700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Spring Boot 2.x基础教程:JdbcTemplate的多数据源配置

Spring Boot 2.x基础教程:JdbcTemplate的多数据源配置

时间:2022-07-02 06:05:32

相关推荐

Spring Boot 2.x基础教程:JdbcTemplate的多数据源配置

点击上方蓝色“程序猿DD”,选择“设为星标”

回复“资源”获取独家整理的学习资料!

在本系列之前的教程中,我们已经介绍了如何使用目前最常用的三种数据访问方式:

JdbcTemplate

Spring Data JPA

MyBatis

下面我们将分三篇来介绍在这三种数据访问方式之下,当我们需要多个数据源的时候,该如何使用的配置说明。

添加多数据源的配置

先在Spring Boot的配置文件application.properties中设置两个你要链接的数据库配置,比如这样:

spring.datasource.primary.jdbc-url=jdbc:mysql://localhost:3306/test1spring.datasource.primary.username=rootspring.datasource.primary.password=123456spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.secondary.jdbc-url=jdbc:mysql://localhost:3306/test2spring.datasource.secondary.username=rootspring.datasource.secondary.password=123456spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver

说明与注意

多数据源配置的时候,与单数据源不同点在于spring.datasource之后多设置一个数据源名称primarysecondary来区分不同的数据源配置,这个前缀将在后续初始化数据源的时候用到。

数据源连接配置2.x和1.x的配置项是有区别的:2.x使用spring.datasource.secondary.jdbc-url,而1.x版本使用spring.datasource.secondary.url

如果你在配置的时候发生了这个报错java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName.,那么就是这个配置项的问题。

相关阅读:Spring Boot 1.x基础教程:多数据源配置:/springbootmultidatasource/

初始化数据源与JdbcTemplate

完成多数据源的配置信息之后,就来创建个配置类来加载这些配置信息,初始化数据源,以及初始化每个数据源要用的JdbcTemplate。你只需要在你的Spring Boot应用下添加下面的这个配置类即可完成!

@ConfigurationpublicclassDataSourceConfiguration{@Primary@Bean@ConfigurationProperties(prefix="spring.datasource.primary")publicDataSourceprimaryDataSource(){returnDataSourceBuilder.create().build();}@Bean@ConfigurationProperties(prefix="spring.datasource.secondary")publicDataSourcesecondaryDataSource(){returnDataSourceBuilder.create().build();}@BeanpublicJdbcTemplateprimaryJdbcTemplate(@Qualifier("primaryDataSource")DataSourceprimaryDataSource){returnnewJdbcTemplate(primaryDataSource);}@BeanpublicJdbcTemplatesecondaryJdbcTemplate(@Qualifier("secondaryDataSource")DataSourcesecondaryDataSource){returnnewJdbcTemplate(secondaryDataSource);}}

说明与注意

前两个Bean是数据源的创建,通过@ConfigurationProperties可以知道这两个数据源分别加载了spring.datasource.primary.*spring.datasource.secondary.*的配置。

@Primary注解指定了主数据源,就是当我们不特别指定哪个数据源的时候,就会使用这个Bean

后两个Bean是每个数据源对应的JdbcTemplate。可以看到这两个JdbcTemplate创建的时候,分别注入了primaryDataSource数据源和secondaryDataSource数据源

测试一下

完成了上面之后,我们就可以写个测试类来尝试一下上面的多数据源配置是否正确了,比如下面这样:

@RunWith(SpringRunner.class)@SpringBootTestpublicclassChapter37ApplicationTests{@AutowiredprotectedJdbcTemplateprimaryJdbcTemplate;@AutowiredprotectedJdbcTemplatesecondaryJdbcTemplate;@BeforepublicvoidsetUp(){primaryJdbcTemplate.update("DELETEFROMUSER");secondaryJdbcTemplate.update("DELETEFROMUSER");}@Testpublicvoidtest()throwsException{//往第一个数据源中插入2条数据primaryJdbcTemplate.update("insertintouser(name,age)values(?,?)","aaa",20);primaryJdbcTemplate.update("insertintouser(name,age)values(?,?)","bbb",30);//往第二个数据源中插入1条数据,若插入的是第一个数据源,则会主键冲突报错secondaryJdbcTemplate.update("insertintouser(name,age)values(?,?)","ccc",20);//查一下第一个数据源中是否有2条数据,验证插入是否成功Assert.assertEquals("2",primaryJdbcTemplate.queryForObject("selectcount(1)fromuser",String.class));//查一下第一个数据源中是否有1条数据,验证插入是否成功Assert.assertEquals("1",secondaryJdbcTemplate.queryForObject("selectcount(1)fromuser",String.class));}}

说明与注意

可能这里你会问,有两个JdbcTemplate,为什么不用@Qualifier指定?这里顺带说个小知识点,当我们不指定的时候,会采用参数的名字来查找Bean,存在的话就注入。

这两个JdbcTemplate创建的时候,我们也没指定名字,它们是如何匹配上的?这里也是一个小知识点,当我们创建Bean的时候,默认会使用方法名称来作为Bean的名称,所以这里就对应上了。读者不妨回头看看两个名称是不是一致的?

代码示例

本文的相关例子可以查看下面仓库中的chapter3-7目录:

Github:/dyc87112/SpringBoot-Learning/

Gitee:/didispace/SpringBoot-Learning/

如果您觉得本文不错,欢迎Star支持,您的关注是我坚持的动力!

往期推荐

两种写法的效果一样,那么到底哪一种更好呢?

StackOverflow 上面最流行的 7 个 Java 问题!

MySQL百万级、千万级数据多表关联SQL语句调优

以为是行废代码,原来有这作用!

尤雨溪:重头来过的 Vue 3 带来了什么?

技巧:MyBatis 中的trim标签,好用!

更新一下618当当图书优惠码:“实付满150再减30”的优惠码「EVFP9H」或者 「T2VHZT」,(使用时间:6.9 - 6.20 ,使用渠道:当当小程序或当当APP)。以前的是“实付200-30”,这次更加给力点。

618华为云服务器羊毛也在进行中,点击“阅读原文”查看详情!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。