我们在实际项目开发中,经常会遇到一个项目需要同时连接、访问多个数据库,进行业务处理。或者是随着项目运营,业务越来越复杂,原来的一个库也要进行业务拆分为多个库,这时也会面临同样的问题,一个项目连接、访问多个库。又或者主从分离、读写分离等等情况。那么本文就主要是以代码来呈现、讲解在SpringBoot项目中我们如何配置多数据源。
多数据库访问
一、数据库连接信息配置
在application.yml配置文件中,添加对应数据库连接信息,如下所示:
spring:datasource:master:#这是第一个数据源名称,可自定义url:jdbc:mysql://127.0.0.1:3306/master_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghaiusername:rootpassword:123456slave:#这是第二个数据源名称,可自定义url:jdbc:mysql://127.0.0.1:3306/slave_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghaiusername:rootpassword:123456
这里目前定义了两个数据源,库一“master”和库二“slave”,如果有更多的数据源,则按照这个配置规则继续往下追加即可。其中,数据源名称是自定义的,只要不重名就可以。
二、数据源配置
在DataSourceConfig中设置这两个数据库的连接配置。具体代码如下:
importorg.springframework.beans.factory.annotation.Qualifier;importorg.springframework.boot.autoconfigure.jdbc.DataSourceProperties;importorg.springframework.boot.context.properties.ConfigurationProperties;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.context.annotation.Primary;importjavax.sql.DataSource;/***数据源配置*/@ConfigurationpublicclassDataSourceConfig{//数据源配置master数据源@Primary@Bean(name="masterDataSourceProperties")@ConfigurationProperties(prefix="spring.datasource.master")publicDataSourcePropertiesmasterDataSourceProperties(){returnnewDataSourceProperties();}//数据源master数据源@Primary@Bean(name="masterDataSource")publicDataSourcemasterDataSource(@Qualifier("masterDataSourceProperties")DataSourcePropertiesdataSourceProperties){returndataSourceProperties.initializeDataSourceBuilder().build();}//数据源配置slave数据源配置@Bean(name="slaveDataSourceProperties")@ConfigurationProperties(prefix="spring.datasource.slave")publicDataSourcePropertiesslaveDataSourceProperties(){returnnewDataSourceProperties();}//数据源slave数据源@Bean("slaveDataSource")publicDataSourceslaveDataSource(@Qualifier("slaveDataSourceProperties")DataSourcePropertiesdataSourceProperties){returndataSourceProperties.initializeDataSourceBuilder().build();}}
三、JdbcTemplate多数据源配置
配置数据源连接工厂,具体代码如下:
importorg.springframework.beans.factory.annotation.Qualifier;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.context.annotation.Primary;importorg.springframework.jdbc.core.JdbcTemplate;importjavax.sql.DataSource;/***JdbcTemplate多数据源配置*/@ConfigurationpublicclassJdbcTemplateDataSourceConfig{//JdbcTemplate数据源mater@Primary@Bean(name="materJdbcTemplate")publicJdbcTemplatematerJdbcTemplate(@Qualifier("materDataSource")DataSourcedataSource){returnnewJdbcTemplate(dataSource);}//JdbcTemplate数据源slave@Bean(name="slaveJdbcTemplate")publicJdbcTemplateslaveJdbcTemplate(@Qualifier("slaveDataSource")DataSourcedataSource){returnnewJdbcTemplate(dataSource);}}
注:1、“@Primary”指的是在相同的bean中,优先使用该注解的bean。
2、“@Qualifier”指定某个bean有没有资格进行注入。
到此多数据源的配置工作已经完成。
四、应用
一般我们根据实际情况,在server层注入对应的dao就可以使用,如下代码所示:
/***Demo演示*/@ServicepublicclassDemoServiceImplimplementsDemoService{@Autowired@Qualifier("masterJdbcTemplate")privateJdbcTemplatemasterJdbcTemplate;@Autowired@Qualifier("slaveJdbcTemplate")privateJdbcTemplateslaveJdbcTemplate;/***查询master库*/@OverridepublicvoidqueryMaster(){//TODOmasterJdbcTemplate.queryForList()}/***查询slave库*/@OverridepublicvoidquerySlave(){//TODOslaveJdbcTemplate.queryForList()}}
以上就是SpringBoot项目多数据源配置代码实现及简单应用示例。