Spring boot如果配置单数据源,使用起来非常简单,几个注解就可以完成数据库的连接,但是如果我们需要配置多数据源,那一些必要的代码就需要我们自己去编写,完成与某个数据库的连接。
一、Spring boot的默认单数据源
1、数据源类型
Springboot默认支持4种数据源类型,定义在 org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration 中,分别是:
对于这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多数据源配置完成。