这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战
今天是第三天,昨天我们学了配置单数据源,会配单的就会配多的,其实道理是一样的,那道理归道理,我还是要带大家玩一下的,因为手痒痒,嘿嘿。
工程还用昨天的工程,当然,你想新建我也不拦着,重复的操作我就不说了,哪有那么多时间。
要考虑的
- 配置多数据源的时候,配置要分开,就是为了便于管理。
- 你要告诉框架,你要配置哪个数据源,不要让它去猜。
- 如果你的数据源有主次之分,可以使用
@primary注解 - 如果数据源都重要,就需要把SpringBoot配置的数据源都排除掉。
搞个复杂的都自己管理
数据库依然选择H2.你配别的也一样
搞配置
fool.datasource.url=jdbc:h2:mem:foo
fool.datasource.username=sa
fool.datasource.password=123
bar.datasource.url=jdbc:h2:mem:bar
bar.datasource.username=sa
bar.datasource.password=123
搞代码
代码其实也是和昨天一样,各个属性都介绍了,数据源,数据源配置和事务管理器。
@Bean
@ConfigurationProperties("fool.datasource")
public DataSourceProperties fooDataSourceProperties(){
return new DataSourceProperties();
}
@Bean
@ConditionalOnBean(DataSourceProperties.class)
public DataSource fooDataSource(){
DataSourceProperties dataSourceProperties =fooDataSourceProperties();
log.info("foo dataSource url:{}",dataSourceProperties.getUrl());
return dataSourceProperties.initializeDataSourceBuilder().build();
}
@Bean
@Resource
public PlatformTransactionManager txManager(DataSource fooDataSource){
return new DataSourceTransactionManager(fooDataSource);
}
@Bean
@ConfigurationProperties("bar.datasource")
public DataSourceProperties barDataSourceProperties(){
return new DataSourceProperties();
}
@Bean
@ConditionalOnBean(DataSourceProperties.class)
public DataSource barDataSource(){
DataSourceProperties dataSourceProperties = barDataSourceProperties();
log.info("bar dataSource url:{}",dataSourceProperties.getUrl());
return dataSourceProperties.initializeDataSourceBuilder().build();
}
@Bean
@Resource
public PlatformTransactionManager barManager(DataSource barDataSource){
return new DataSourceTransactionManager(barDataSource);
}
跑一下:
报错了,这里说是有一个字段,就需要一个数据源,结果你给我整两,你让我猜呢?框架说:我就不猜,我不光不猜,我还就让你告诉我,嘿嘿,下次对女朋友的时候可以用上了,(千万别说是我教的,有事找框架)。
框架还给了解决方案,老弟你看看你是不是想这么解决?
这是我们上面提到的注解,作用自己百度,很明显,老子是不做选择,全都要啊。
出来两个数据源
看看Bean
然后我们可以看下我们的数据源:这是foolDataSource
当然还有barDataSource
3个,4个读者应该也会搞了。
总结
多数据源其实和单数据源差不多,会搞单的,多的也会搞
- 要素1就是数据源配置、从哪来?黄河之水天上来,我们的配置还得自己配。
- 要素2将配置信息交给Spring管理,然后初始化一个数据源
- 要素3给事务管理器注入灵魂.
当然这是个简陋的数据源,我不还是为了照顾读者感受(偷懒)嘛?