基于Spring注解的数据库获取不同DataSource的总结

/**
 * 
 */
package com.soundsystem.config;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
import org.springframework.jndi.JndiObjectFactoryBean;

/**
 * @author zhangpeng
 *
 */
@Configuration
public class DatasourceConfig {


    /**
     * 嵌入式数据库 基于内存数据库
     * 适合开发环境,让数据库处于一个给定的状态
     * ****
     * @return
     */
    @Bean(destroyMethod = "shutdown")
    @Profile("dev")
    public DataSource embeddedDataSource() {

        return (DataSource) new EmbeddedDatabaseBuilder().addScript("classpath:schema.sql")
                .addScript("classpath:test-data.sql").build();

    }

    /**
     * 通过jndi获取datasource 能够让容器决定该如何创建这个datasource,甚至包括切换为容器管理的连接池。
     *  适合 生产环境  对于开发环境来说会增加不必要的复杂性。
     * @return
     */
    @Bean
    public DataSource jndiDataSource() {
        JndiObjectFactoryBean jndiObjectFactoryBean=new JndiObjectFactoryBean();
        jndiObjectFactoryBean.setJndiName("jdbc/myds");
        jndiObjectFactoryBean.setResourceRef(true);
        jndiObjectFactoryBean.setProxyInterface(javax.sql.DataSource.class);
        return (DataSource) jndiObjectFactoryBean.getObject();
    }


    /**
     * 适合测试环境
     * @return
     */
    @Bean
    public DataSource dbcpDataSource(){
        BasicDataSource basicDataSource=new BasicDataSource();
        basicDataSource.setUrl("");
        basicDataSource.setPassword("");
        basicDataSource.setUsername("");
        basicDataSource.setInitialSize(20);
        basicDataSource.setMaxActive(30);


        return basicDataSource;



    }

}

你可能感兴趣的:(hibernate初学,Spring实战)