Spring Boot配置多个DataSource
2017-10-23 15:04
429 查看
使用Spring Boot时,默认情况下,配置
百牛信息技术bainiu.ltd整理发布于博客园
如果在
但是,在某些情况下,如果我们需要配置多个数据源,应该如何在Spring Boot中配置呢?
我们以JDBC为例,演示如何在Spring Boot中配置两个
首先,我们必须在
这两个
其次,我们需要自己创建两个
对于每一个
紧接着,我们创建两个
注意到
现在,我们就创建了两个
在需要使用第二个
这样,我们就可以针对不同的数据源,用不同的
相同类型的其他Bean,每一个都需要用
完整的示例工程源码请参考:
https://github.com/michaelliao/springcloud/tree/master/data-multidatasource
DataSource非常容易。Spring Boot会自动为我们配置好一个
DataSource。
百牛信息技术bainiu.ltd整理发布于博客园
如果在
application.yml中指定了
spring.datasource的相关配置,Spring Boot就会使用该配置创建一个
DataSource。如果在
application.yml中没有指定任何
spring.datasource的相关配置,Spring Boot会在classpath中搜索H2、hsqldb等内存数据库的jar包,如果找到了,就会自动配置一个内存数据库的
DataSource,所以,我们只要引入jar包即可。例如,配置一个hsqldb数据源:
<dependency> <groupId>org.hsqldb</groupId> <artifactId>hsqldb</artifactId> <scope>runtime</scope> </dependency>
但是,在某些情况下,如果我们需要配置多个数据源,应该如何在Spring Boot中配置呢?
我们以JDBC为例,演示如何在Spring Boot中配置两个
DataSource。对应的,我们会创建两个
JdbcTemplate的Bean,分别使用这两个数据源。
首先,我们必须在
application.yml中声明两个数据源的配置,一个使用
spring.datasource,另一个使用
spring.second-datasource:
spring: application: name: data-multidatasource datasource: driver-class-name: org.hsqldb.jdbc.JDBCDriver url: jdbc:hsqldb:mem:db1 username: sa password: second-datasource: driver-class-name: org.hsqldb.jdbc.JDBCDriver url: jdbc:hsqldb:mem:db2 username: sa password:
这两个
DataSource都使用hsqldb,但是数据库是不同的。此外,在使用多数据源的时候,所有必要配置都不能省略。
其次,我们需要自己创建两个
DataSource的Bean,其中一个标记为
@Primary,另一个命名为
secondDatasource:
@Configuration public class SomeConfiguration { @Bean @Primary @ConfigurationProperties(prefix = "spring.datasource") public DataSource primaryDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "secondDatasource") @ConfigurationProperties(prefix = "spring.second-datasource") public DataSource secondDataSource() { return DataSourceBuilder.create().build(); } }
对于每一个
DataSource,我们都必须通过
@ConfigurationProperties(prefix = "xxx")指定配置项的前缀。
紧接着,我们创建两个
JdbcTemplate的Bean,其中一个标记为
@Primary,另一个命名为
secondJdbcTemplate,分别使用对应的
DataSource:
@Bean @Primary public JdbcTemplate primaryJdbcTemplate(DataSource dataSource) { return new JdbcTemplate(dataSource); } @Bean(name = "secondJdbcTemplate") public JdbcTemplate secondJdbcTemplate(@Qualifier("secondDatasource") DataSource dataSource) { return new JdbcTemplate(dataSource); }
注意到
secondJdbcTemplate在创建时,传入的
DataSource必须用
@Qualifier("secondDatasource")声明,这样,才能使用第二个
DataSource。
现在,我们就创建了两个
JdbcTemplate的
Bean。在需要使用第一个
JdbcTemplate的地方,我们直接注入:
@Component public class SomeService { @Autowired JdbcTemplate jdbcTemplate; }
在需要使用第二个
JdbcTemplate的地方,我们注入时需要用
@Qualifier("secondJdbcTemplate")标识:
@Component public class AnotherService { @Autowired @Qualifier("secondJdbcTemplate") JdbcTemplate secondJdbcTemplate; }
这样,我们就可以针对不同的数据源,用不同的
JdbcTemplate进行操作。
注意事项
当存在多个相同类型的Bean,例如,多个DataSource,多个
JdbcTemplate时,强烈建议总是使用
@Primary把其中某一个Bean标识为“主要的”,使用
@Autowired注入时会首先使用被标记为
@Primary的Bean。
相同类型的其他Bean,每一个都需要用
@Bean(name="xxx")标识名字,并且,在使用
@Autowired注入时配合
@Qualifier("xxx")指定注入的Bean的名字。
完整的示例工程源码请参考:
https://github.com/michaelliao/springcloud/tree/master/data-multidatasource
相关文章推荐
- SpringBoot配置属性之DataSource
- SpringBoot配置属性之DataSource
- springboot datasource 配置说明
- SpringBoot 配置Mysql多数据源DataSource以及各种工作环境切换
- SpringBoot配置属性之DataSource
- SpringBoot配置属性之DataSource
- SpringBoot DataSource配置详解
- Spring-boot 配置dataSource 可配多数据源
- SpringBoot配置属性之DataSource
- SpringBoot配置属性之DataSource(三)
- spring-boot配置文件-DataSource(中文翻译)
- SpringBoot配置属性之DataSource
- SpringBoot DataSource 配置说明
- Spring Boot配置多个DataSource
- spring boot多DataSource配置时的一个小细节
- springboot+DruidDataSource 双数据源配置
- SpringBoot配置属性之DataSource
- Spring Boot配置多个DataSource
- SpringBoot DataSource 配置说明
- Spring Boot中Datasource配置(Spring Boot dbcp2数据源配置)