注意事项
- 不同数据源的 配置要分开
- 关注每次使用的数据源
- 有多个DataSource时系统如何判断
- 对应的设施(事务、ORM)如何选择DataSource
多数据源配置(二选一)
- 配置 @Primary 类型的Bean(DataSource)
- 排除Spring Boot的自动配置( 手动配置 )
- DataSourceAutoConfiguration
- DataSourceTransactionManagerAutoConfiguration
- JdbcTemplateAutoConfiguration
依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter- jdbc </artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
application.properties
management.endpoints.web.exposure.include=* foo.datasource.url=jdbc:h2:mem:foo foo.datasource.username=SA foo.datasource.password= bar.datasource.url=jdbc:h2:mem:bar bar.datasource.username=SA bar.datasource.password=
DataSourceConfig
@ Slf4j @Configuration public class DataSourceConfig { @Bean @ConfigurationProperties("foo.datasource") public DataSourceProperties fooDataSourceProperties() { return new DataSourceProperties(); } @Bean public DataSource fooDataSource() { DataSourceProperties dataSourceProperties = fooDataSourceProperties(); log.info("foo datasource : {}", dataSourceProperties.getUrl()); return dataSourceProperties.initializeDataSource build er().build(); } @Bean @ Resource public PlatformTransactionManager fooTxManager(DataSource fooDataSource) { return new DataSourceTransactionManager(fooDataSource); } @Bean @ConfigurationProperties("bar.datasource") public DataSourceProperties barDataSourceProperties() { return new DataSourceProperties(); } @Bean public DataSource barDataSource() { DataSourceProperties dataSourceProperties = barDataSourceProperties(); log.info("bar datasource : {}", dataSourceProperties.getUrl()); return dataSourceProperties.initializeDataSourceBuilder().build(); } @Bean @Resource public PlatformTransactionManager barTxManager(DataSource barDataSource) { return new DataSourceTransactionManager(barDataSource); } }
MultiDatasourceApplication
// 排查自动配置 @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, JdbcTemplateAutoConfiguration.class}) public class MultiDatasourceApplication { public static void main(String[] args) { SpringApplication.run(MultiDatasourceApplication.class, args); } }
beans
"fooDataSource": { "aliases": [], "scope": "singleton", "type": "com.zaxxer.hikari.HikariDataSource", "resource": "class path resource [me/zhongmingmao/multidatasource/DataSourceConfig.class]", "dependencies": ["fooDataSourceProperties"] } "fooTxManager": { "aliases": [], "scope": "singleton", "type": "org.springframework.jdbc.datasource.DataSourceTransactionManager", "resource": "class path resource [me/zhongmingmao/multidatasource/DataSourceConfig.class]", "dependencies": ["fooDataSource"] }
小结
最后,小架在这里祝大家国庆快乐!
希望一直以来关注我的各位越来越好,身体健康,学业有成。在成为架构师的这条路上,我以后也会一直陪大家走下去! 会努力的去寻找更多的新内容新知识,来分享给大家,接下来可能会脱更几天,因为某些不可抗力,再次感谢大家的看我的文章!
仰天大笑出门去,我辈岂是蓬蒿人。
我是小架,我们
下篇文章见!