面向小白的SpringBoot配置多数据源教程

133 阅读2分钟

这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战

今天是第三天,昨天我们学了配置单数据源,会配单的就会配多的,其实道理是一样的,那道理归道理,我还是要带大家玩一下的,因为手痒痒,嘿嘿。

工程还用昨天的工程,当然,你想新建我也不拦着,重复的操作我就不说了,哪有那么多时间。

要考虑的

  1. 配置多数据源的时候,配置要分开,就是为了便于管理。
  2. 你要告诉框架,你要配置哪个数据源,不要让它去猜。
  3. 如果你的数据源有主次之分,可以使用@primary注解
  4. 如果数据源都重要,就需要把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);
}

跑一下:

image.png

报错了,这里说是有一个字段,就需要一个数据源,结果你给我整两,你让我猜呢?框架说:我就不猜,我不光不猜,我还就让你告诉我,嘿嘿,下次对女朋友的时候可以用上了,(千万别说是我教的,有事找框架)。

框架还给了解决方案,老弟你看看你是不是想这么解决?

image.png

这是我们上面提到的注解,作用自己百度,很明显,老子是不做选择,全都要啊。

出来两个数据源 image.png

看看Bean

然后我们可以看下我们的数据源:这是foolDataSource

image.png

当然还有barDataSource image.png

3个,4个读者应该也会搞了。

总结

多数据源其实和单数据源差不多,会搞单的,多的也会搞

  1. 要素1就是数据源配置、从哪来?黄河之水天上来,我们的配置还得自己配。
  2. 要素2将配置信息交给Spring管理,然后初始化一个数据源
  3. 要素3给事务管理器注入灵魂.

当然这是个简陋的数据源,我不还是为了照顾读者感受(偷懒)嘛?