知乎专栏 |
package cn.netkiller.project.config; import javax.sql.DataSource; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; @Configuration public class DataSourceConfig { @Bean @Primary @ConfigurationProperties("spring.datasource") public DataSourceProperties defaultDataSourceProperties() { return new DataSourceProperties(); } @Bean @Primary @ConfigurationProperties("spring.datasource") public DataSource defaultDataSource() { return defaultDataSourceProperties().initializeDataSourceBuilder().build(); } @Bean("JdbcTemplate") @Primary public JdbcTemplate defaultJdbcTemplate(@Qualifier("defaultDataSource") DataSource Master) { return new JdbcTemplate(Master); } @Bean // @Primary @ConfigurationProperties("spring.datasource.master") public DataSourceProperties masterDataSourceProperties() { return new DataSourceProperties(); } @Bean("Master") // @Primary @ConfigurationProperties("spring.datasource.master") public DataSource masterDataSource() { return masterDataSourceProperties().initializeDataSourceBuilder().build(); } @Bean("masterJdbcTemplate") // @Primary public JdbcTemplate masterJdbcTemplate(@Qualifier("Master") DataSource Master) { return new JdbcTemplate(Master); } @Bean @ConfigurationProperties("spring.datasource.slave") public DataSourceProperties slaveDataSourceProperties() { return new DataSourceProperties(); } @Bean(name = "Slave") @ConfigurationProperties("spring.datasource.slave") public DataSource slaveDataSource() { return slaveDataSourceProperties().initializeDataSourceBuilder().build(); } @Bean("slaveJdbcTemplate") public JdbcTemplate slaveJdbcTemplate(@Qualifier("Slave") DataSource Master) { return new JdbcTemplate(Master); } @Bean(name = "wwwDataSource") @Qualifier("wwwDataSource") @ConfigurationProperties(prefix = "spring.datasource.www") public DataSource wwwDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "apiDataSource") @Qualifier("apiDataSource") @ConfigurationProperties(prefix = "spring.datasource.api") public DataSource apiDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "cmsDataSource") @Qualifier("cmsDataSource") //@Primary @ConfigurationProperties(prefix = "spring.datasource.cms") public DataSource cmsDataSource() { return DataSourceBuilder.create().build(); } @Bean PlatformTransactionManager transactionManager() { return new DataSourceTransactionManager(apiDataSource()); } @Bean(name = "wwwJdbcTemplate") public JdbcTemplate wwwJdbcTemplate(@Qualifier("wwwDataSource") DataSource dataSource) { return new JdbcTemplate(dataSource); } @Bean(name = "appJdbcTemplate") public JdbcTemplate appJdbcTemplate(@Qualifier("apiDataSource") DataSource dataSource) { return new JdbcTemplate(dataSource); } @Bean(name = "cmsJdbcTemplate") public JdbcTemplate cmsJdbcTemplate(@Qualifier("cmsDataSource") DataSource dataSource) { return new JdbcTemplate(dataSource); } }
对应 application.properties 的配置方法
spring.datasource.www.driver-class-name=com.mysql.jdbc.Driver spring.datasource.www.url=jdbc:mysql://localhost:3306/www?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false spring.datasource.www.username=www spring.datasource.www.password=passw0rd spring.datasource.www.max-idle=10 spring.datasource.www.max-wait=10000 spring.datasource.www.min-idle=5 spring.datasource.www.initial-size=5 spring.datasource.www.validation-query=SELECT 1 spring.datasource.www.test-on-borrow=false spring.datasource.www.test-while-idle=true spring.datasource.www.time-between-eviction-runs-millis=18800 spring.datasource.www.jdbc-interceptors=ConnectionState;SlowQueryReport(threshold=0) spring.datasource.api.driver-class-name=com.mysql.jdbc.Driver spring.datasource.api.url=jdbc:mysql://localhost:3306/api?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false spring.datasource.api.username=api spring.datasource.api.password=passw0rd spring.datasource.api.max-idle=10 spring.datasource.api.max-wait=10000 spring.datasource.api.min-idle=5 spring.datasource.api.initial-size=5 spring.datasource.api.validation-query=SELECT 1 spring.datasource.api.test-on-borrow=false spring.datasource.api.test-while-idle=true spring.datasource.api.time-between-eviction-runs-millis=18800 spring.datasource.api.jdbc-interceptors=ConnectionState;SlowQueryReport(threshold=0)
选择数据库
@Autowired @Qualifier("apiJdbcTemplate") JdbcTemplate jdbcTempalte;