SpringBoot配置多个数据源

1、首先在application.properties文件中配置数据源信息(以下的可作为参考)

#dev datasource
dev.datasource.driverClassName=com.mysql.jdbc.Driver
dev.datasource.jdbcUrl=jdbc:mysql://localhost:3306/dev?useUnicode=true&characterEncoding=utf-8&useSSL=false
dev.datasource.username=root
dev.datasource.password=root

#online datasource
online.spring.datasource.driverClassName=com.mysql.jdbc.Driver
online.spring.datasource.jdbcUrl=jdbc:mysql://localhost:3306/online?useUnicode=true&characterEncoding=utf-8&useSSL=false
online.spring.datasource.username=root
online.spring.datasource.password=root

我这里是oracle数据库,所以配置信息跟mysql、sqlserver数据库jdbc.Url长得不一样,

2、下面我们创建一个DbConfigModel.java来读取配置信息

public class DBConfigModel {

	private String driverClassName;
	
	private String jdbcUrl;
	
	private String username;
	
	private String password;

	public String getDriverClassName() {
		return driverClassName;
	}

	public void setDriverClassName(String driverClassName) {
		this.driverClassName = driverClassName;
	}

	public String getJdbcUrl() {
		return jdbcUrl;
	}

	public void setJdbcUrl(String jdbcUrl) {
		this.jdbcUrl = jdbcUrl;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
	
}

 3、下面我们来配置两个DbConfigModel 来保存两个数据源配置信息

@Configuration
public class ConfigurationBeans {

	@Bean(name = "devDBConfigModel")
	@ConfigurationProperties(prefix = "dev.spring.datasource")
	public DBConfigModel devDBConfigModel() {
		return new DBConfigModel();
	}
	
	@Bean(name = "onlineDBConfigModel")
	@ConfigurationProperties(prefix = "online.spring.datasource")
	public DBConfigModel onlineDBConfigModel() {
		return new DBConfigModel();
	}
	
}

4、接下来我们来配置比较关键的配置信息,我就把全部的代码拷出来

@Configuration
@MapperScan(basePackages = "com.*****.dao.mapper", sqlSessionFactoryRef = "devSqlSessionFactory")
public class DevDataSourceConfig {

    /**
     * dataSource
     * @return
     */
    @Bean(name = "devDataSource")
    @Primary
    public DataSource dataSource(@Qualifier("devDbConfigModel") DBConfigModel dbConfigModel) {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(dbConfigModel.getDriverClassName());
        dataSource.setUrl(dbConfigModel.getJdbcUrl());
        dataSource.setUsername(dbConfigModel.getUsername());
        dataSource.setPassword(dbConfigModel.getPassword());
        dataSource.setInitialSize(1);
        dataSource.setMaxActive(10);
        dataSource.setMinIdle(1);
        dataSource.setMaxWait(60 * 1000);
        dataSource.setTimeBetweenEvictionRunsMillis(60 * 1000);
        dataSource.setMinEvictableIdleTimeMillis(300 * 1000);
        dataSource.setTestWhileIdle(true);
        return dataSource;
    }

    /**
     * sqlSessionFactory
     * @param dataSource
     * @return
     * @throws Exception
     */
    @Bean("devSqlSessionFactory")
    @Primary
    public SqlSessionFactory sqlSessionFactory(@Qualifier("devDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setTypeAliasesPackage("com.qt.scs.admin.dao.entity");
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
        return bean.getObject();
    }
    
    
    /**
     * 事务管理器
     * @param dataSource
     * @return
     */
    @Bean(name="devTransactionManager")
    @Primary
    public DataSourceTransactionManager dataSourceTransactionManager(@Qualifier("devDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
    
    /**
     * sqlSessionTemplate
     * @param sqlSessionFactory
     * @return
     */
    @Bean(name="devSqlSessionTemplate")
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("devSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}

5、online的相关配置信息

@Configuration
@MapperScan(basePackages = "com.****.dao.onlineMapper", sqlSessionFactoryRef = "onlineSqlSessionFactory")
public class OnlineDataSourceConfig {

    /**
     * dataSource
     * @return
     */
    @Bean(name = "onlineDataSource")
    @Primary
    public DataSource dataSource(@Qualifier("onlineDbConfigModel") DBConfigModel dbConfigModel) {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(dbConfigModel.getDriverClassName());
        dataSource.setUrl(dbConfigModel.getJdbcUrl());
        dataSource.setUsername(dbConfigModel.getUsername());
        dataSource.setPassword(dbConfigModel.getPassword());
        dataSource.setInitialSize(1);
        dataSource.setMaxActive(10);
        dataSource.setMinIdle(1);
        dataSource.setMaxWait(60 * 1000);
        dataSource.setTimeBetweenEvictionRunsMillis(60 * 1000);
        dataSource.setMinEvictableIdleTimeMillis(300 * 1000);
        dataSource.setTestWhileIdle(true);
        return dataSource;
    }

    /**
     * sqlSessionFactory
     * @param dataSource
     * @return
     * @throws Exception
     */
    @Bean("onlineSqlSessionFactory")
    @Primary
    public SqlSessionFactory sqlSessionFactory(@Qualifier("onlineDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setTypeAliasesPackage("com.qt.scs.admin.dao.entity");
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:onlineMapper/*.xml"));
        return bean.getObject();
    }
    
    
    /**
     * 事务管理器
     * @param dataSource
     * @return
     */
    @Bean(name="onlineTransactionManager")
    @Primary
    public DataSourceTransactionManager dataSourceTransactionManager(@Qualifier("onlineDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
    
    /**
     * sqlSessionTemplate
     * @param sqlSessionFactory
     * @return
     */
    @Bean(name="onlineSqlSessionTemplate")
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("onlineSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}

 5、最后springboot启动类的配置(需要添加exclude = DataSourceAutoConfiguration.class这一段,不然程序启动会报错的)

@SpringBootApplication(scanBasePackages = "com.****.admin", exclude = DataSourceAutoConfiguration.class)
public class AdminApplication {


    public static void main(String[] args) {
        SpringApplication.run(AdminApplication.class, args);
    }

}

7、springboot配置多个数据源就结束了,阔以自己动手操作一把!

发布了16 篇原创文章 · 获赞 10 · 访问量 7954

猜你喜欢

转载自blog.csdn.net/mnicsm/article/details/96292329