Spring boot配置多数据源

Spring boot如果配置单数据源,使用起来非常简单,几个注解就可以完成数据库的连接,但是如果我们需要配置多数据源,那一些必要的代码就需要我们自己去编写,完成与某个数据库的连接。

一、Spring boot的默认单数据源

1、数据源类型

      Springboot默认支持4种数据源类型,定义在 org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration 中,分别是:

  • org.apache.tomcat.jdbc.pool.DataSource
  • com.zaxxer.hikari.HikariDataSource
  • org.apache.commons.dbcp.BasicDataSource
  • org.apache.commons.dbcp2.BasicDataSource

      对于这4种数据源,当 classpath 下有相应的类存在时,Springboot 会通过自动配置为其生成DataSource Bean,DataSource Bean默认只会生成一个,四种数据源类型的生效先后顺序如下:Tomcat-> Hikari -> Dbcp -> Dbcp2

2、数据源依赖及配置

          在Springboot 使用JDBC可直接添加官方提供的 spring-boot-start-jdbc 或者 spring-boot-start-data-jpa maven依赖。然后在application.properties或者application.yml配置文件添加相关数据库配置即可。

3、数据源使用

     使用单数据源时,不需要特定指明数据源,使用注解@Bean 创建一个DataSource Bean并将其纳入到Spring容器中进行管理即可。

二、Spring boot多数据源配置

       Spring boot单数据源虽然使用很方便,但随着业务的发展我们需要配置两个甚至多个数据源,这时候就不能依靠Spring boot给我们提供的默认方式了,需要我们自己获取datasource,使用时选择需要的JdbcTemplate。以下以两个数据源为准,示例如何配置多个数据源。

1、首先配置文件需要配置两个datasource信息

附代码:

spring:
  #数据库
  datasource:
    driverClassName: XXXX
    url: XXXX
    username: XX
    password: XXXX
    #验证连接的有效性
    test-while-idle: true
    #获取连接时候验证
    test-on-borrow: false
    #在连接归还到连接池时是否测试该连接
    test-on-return: true
    #空闲连接回收的时间间隔,与test-while-idle一起使用,设置5分钟
    time-between-eviction-runs-millis: 300000

  secondDatasource:
    driverClassName: XXXX
    url: XXXX
    username: XXX
    password: XXX

2、读取配置信息,获取DataSource

①获取第一个数据源。使用@Primary注解,则本数据源将设置为默认数据源,不指定时会自动使用这个。

@Bean
@Primary
@ConfigurationProperties("spring.datasource")
public DataSourceProperties primaryDataSourceProperties() {
   return new DataSourceProperties();
}
@Bean
@Primary
public DataSource primaryDataSource(@Autowired DataSourceProperties props) {
   return props.initializeDataSourceBuilder().build();
}

 

②获取第二个数据源。需要在@Bean注解中设置bean的名字,之后使用的时候直接指定名字,注册第二个DataSource时,需要使用@Qualifier注明使用哪个。

@Bean("secondDataSourceProperties")
@ConfigurationProperties("spring.secondDatasource")
public DataSourceProperties shopDataSourceProperties() {
   return new DataSourceProperties();
}
@Bean("secondDataSource")
public DataSource secondDataSource(@Autowired @Qualifier("secondDataSourceProperties") DataSourceProperties props) {
   return props.initializeDataSourceBuilder().build();
}

3、把DataSource注册到Jdbc Template中。

@Bean
@Primary
public JdbcTemplate primaryJdbcTemplate(DataSource dataSource) {
   return new JdbcTemplate(dataSource);
}

@Bean(name = "secondJdbcTemplate")
public JdbcTemplate secondJdbcTemplate(@Autowired @Qualifier("secondDataSource") DataSource dataSource) {
   return new JdbcTemplate(dataSource);
}

4、Dao层使用时,默认的可以直接使用,需要使用第二个或者其他数据源时则需要使用@Qualifier注明。

@Autowired
@Qualifier("secondJdbcTemplate")
JdbcTemplate secondJdbcTemplate;

@Autowired
JdbcTemplate jdbcTemplate;

 

至此,Spring boot多数据源配置完成。

你可能感兴趣的:(接口自动化测试)