《SpringBoot》如何配置多个数据源

您所在的位置:网站首页 springboot如何配置多数据源 《SpringBoot》如何配置多个数据源

《SpringBoot》如何配置多个数据源

#《SpringBoot》如何配置多个数据源| 来源: 网络整理| 查看: 265

起因:

配置一个数据源我们知道可以在yml文件或者properties中编写配置,利用SpringBoot自动配置的特性完成绑定,但如果我们需要依赖一个以上的多个数据源这该怎么办呢?

解决方案:

不同的数据源配置要分开,避免混在一起,一定要注意正在操作的数据源是哪个。

首先我们需要排除SpringBoot对数据源的自动配置,利用exclude属性将DataSourceAutoConfiguration,DataSourceTransactionManagerAutoConfiguration,JdbcTemplateAutoConfiguration排除。 如下:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, JdbcTemplateAutoConfiguration.class }) @Slf4j public class MultiDataSourceApplication { public static void main(String[] args) { SpringApplication.run(MultiDataSourceApplication.class, args); } }

这样做消除了框架对数据源一系列的自动配置,我们可以手动去控制它们。 先来看下properties配置文件,声明两种数据源url分别是default和text。

management.endpoints.web.exposure.include=* spring.output.ansi.enabled=ALWAYS default.datasource.url=jdbc:h2:file:~/default default.datasource.username=MRyan default.datasource.password=123456 text.datasource.url=jdbc:h2:file:~/text text.datasource.username= text.datasource.password=

然后我们手动配置一个数据源 创建一个配置类DataSourceProperties绑定Properties配置文件,数据源我们采用配置文件中声明的default url。

/** * default数据源 * 利用@ConfigurationProperties为DataSourceProperties赋值 获取application.properties配置文件 */ @Bean @ConfigurationProperties("default.datasource") public DataSourceProperties defaultSourceProperties() { return new DataSourceProperties(); }

接着创建DataSource的bean并且输出log日志查看数据源url。

/** * 创建DataSource的bean */ @Bean public DataSource defaultDataSource() { DataSourceProperties dataSourceProperties = defaultSourceProperties(); log.info("default datasource:{}", dataSourceProperties.getUrl()); return dataSourceProperties.initializeDataSourceBuilder().build(); }

然后为上述创建的DataSource的Bean创建对应的事务管理器

/** * 为上述创建的DataSource的Bean创建对应的事务管理器 */ @Bean @Resource public PlatformTransactionManager defaultManager(DataSource defaultDataSource) { return new DataSourceTransactionManager(defaultDataSource); }

这个时候我们就配置好一个数据源了,可以运行输出下没什么问题。 在这里插入图片描述

用同样的方法我们配置第二个数据源text

//****************************************************** /** * text数据源 * 利用@ConfigurationProperties为DataSourceProperties赋值 获取application.properties配置文件 */ @Bean @ConfigurationProperties("text.datasource") public DataSourceProperties textSourceProperties() { return new DataSourceProperties(); } /** * 创建DataSource的bean */ @Bean public DataSource textDataSource() { DataSourceProperties dataSourceProperties = textSourceProperties(); log.info("text datasource:{}", dataSourceProperties.getUrl()); return dataSourceProperties.initializeDataSourceBuilder().build(); } /** * 为上述创建的DataSource的Bean创建对应的事务管理器 */ @Bean @Resource public PlatformTransactionManager textManager(DataSource textDataSource) { return new DataSourceTransactionManager(textDataSource); }

最终的代码如下:

/** * @description: SpringBoot如何配置多个数据源 * @Author MRyan * @Date 2020/10/8 15:53 * @Version 1.0 */ @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, JdbcTemplateAutoConfiguration.class }) @Slf4j public class MultiDataSourceApplication { public static void main(String[] args) { SpringApplication.run(MultiDataSourceApplication.class, args); } /** * default数据源 * 利用@ConfigurationProperties为DataSourceProperties赋值 获取application.properties配置文件 */ @Bean @ConfigurationProperties("default.datasource") public DataSourceProperties defaultSourceProperties() { return new DataSourceProperties(); } /** * 创建DataSource的bean */ @Bean public DataSource defaultDataSource() { DataSourceProperties dataSourceProperties = defaultSourceProperties(); log.info("default datasource:{}", dataSourceProperties.getUrl()); return dataSourceProperties.initializeDataSourceBuilder().build(); } /** * 为上述创建的DataSource的Bean创建对应的事务管理器 */ @Bean @Resource public PlatformTransactionManager defaultManager(DataSource defaultDataSource) { return new DataSourceTransactionManager(defaultDataSource); } //****************************************************** /** * text数据源 * 利用@ConfigurationProperties为DataSourceProperties赋值 获取application.properties配置文件 */ @Bean @ConfigurationProperties("text.datasource") public DataSourceProperties textSourceProperties() { return new DataSourceProperties(); } /** * 创建DataSource的bean */ @Bean public DataSource textDataSource() { DataSourceProperties dataSourceProperties = textSourceProperties(); log.info("text datasource:{}", dataSourceProperties.getUrl()); return dataSourceProperties.initializeDataSourceBuilder().build(); } /** * 为上述创建的DataSource的Bean创建对应的事务管理器 */ @Bean @Resource public PlatformTransactionManager textManager(DataSource textDataSource) { return new DataSourceTransactionManager(textDataSource); } }

运行并输出日志 在这里插入图片描述 正常运行,并没有什么问题。

查看actuator中beans发现却在其中 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3