使用Spring Boot时,默认情况下,配置DataSource
非常容易。Spring Boot会自动为我们配置好一个DataSource
。
如果在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的多数据配置,从mapper到controller完整的一个业务流程
config|[Spring Cloud Alibaba(二)配置中心多项目、多配置文件、分目录实现](https://github.com/smltq/spring-boot-demo/blob/master/cloud-alibaba/README2.md) Sentinel|[Spring Cloud Alibaba(三)Sentinel...
Dynamic-Datasource (opens new window)- 基于 SpringBoot 的多数据源组件,功能强悍,支持 Seata 分布式事务。 支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。 支持数据库敏感配置信息 ...
Dynamic-Datasource (opens new window)- 基于 SpringBoot 的多数据源组件,功能强悍,支持 Seata 分布式事务。 支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。 支持数据库敏感配置信息 ...
多个档案的YAML文件 24.7.4.YAML缺点 24.8.类型安全的配置属性 24.8.1.第三方配置 24.8.2.轻松绑定 24.8.3.合并复杂类型 24.8.4.属性转换 转换持续时间 转换数据大小 24.8.5.@...
在查阅大量多数据源配置资料和文章并结合工作实践的基础上开发了一个简单实用的spring boot动态多数据源demo,该demo主要功能如下: 自定义多数据源类MultiplyDataSource(继承HikariDataSource),通过多线程类...
使用Liquibase的Spring Boot多个数据源多个数据源您需要向yaml配置文件中添加几个数据源定义。 datasource: primary: url: jdbc:mysql://localhost/primary username: root driver-class-name: ...
3.数据库使用Mysql中自带的sakila数据库,使用前,请将application.yml中的spring.datasource.ssm.password中的数据库密码设置为自己的; 4.实现了sakila中的单表的增删改查和跨表查询,跨表查询包括了Mybatis的1-N...
基于Spring实现的动态数据源框架使用方法如下:配置文件在springboot的配置文件中配置多个数据源其中prefix = "spring.slavedatasource" 的配置文件为从库,datasource为主库spring.datasource.url=jdbc:mysql://...
本项目使用 Spring Boot 搭建, 用于加深对 Spring Boot 与 Shiro 的学习, 项目特色是支持 restful 风格权限控制, 支持对同一 URL, 不同 HTTP Mehtod 的权限控制, 适用于更多的场景. 预览地址: http://ewt.186g.cn ...
一个基于springboot的快速集成多数据源的启动器简介dynamic-datasource-spring-boot-starter是一个基于springboot的快速集成多数据源的启动器。其支持Jdk 1.7 +,SpringBoot 1.4.x 1.5.x 2.xx。文件| 文献资料|特性...
3, application.yml中配置了双数据源,根据需要可以加多个数据源,同时要在datasource包中新建数据源配置,参考那两个配置。 4, 启动项目,测试接口在DataSourceController中,只用注入相关的bean就能使用。 5, 使用...
它与Spring Boot的现有DataSource配置机制一起使用。 假设您有一个来自的新生成的Spring Boot项目,其中选择了JDBC数据库驱动程序(在本例中为MySQL ,该示例使用MySQL)和Lombok(编译时注释处理器)。 构建此库并...
1、集成com.baomidou的方式,引入dynamic-datasource...2、原生的方式,基于AOP手动实现多数据源; 3、项目代码完整,包含注释,能启动测试; 博客地址:https://blog.csdn.net/u011974797/article/details/130109195
一个示例,该示例使用Spring Boot + Spring Data JPA + Hibernate连接到多个RDB,并为每个DB使用JPA进行操作。 我能达到的目标 连接到多个RDB 特别是,您可以使用不同的JDBC驱动程序,因此可以连接到不同节点上的...
Spring Boot中的Master和Slave(或多个)数据源参考:
开发你的第一个Spring Boot应用 v. 11.1. 创建POM vi. 11.2. 添加classpath依赖 vii. 11.3. 编写代码 i. 11.3.1. @RestController和@RequestMapping注解 ii. 11.3.2. @EnableAutoConfiguration注解 iii. 11.3.3. ...
如果您需要100多个Java持久性性能问题的提示和插图,那么“ Java持久性性能图解指南”非常适合您。 Hibernate和Spring Boot示例 说明:此应用程序是如何在UTC时区中存储日期,时间和时间戳的示例。 第二个设置...
项目背景: 1. Springboot项目 ... 一个主数据源,数据名称库不变。 3. 一个副数据源,数据库名称每天都在变,比如今天1号,是db_01; 明天2号,是db_02。 4.不重启项目切换数据源。 5.项目介绍: ...
3.数据库使用Mysql中自带的sakila数据库,使用前,请将application.properties中的spring.datasource.ssm.password中的数据库密码设置为自己的;4.实现了sakila中的单表的增删改查和跨表查询,跨表查询包括了Mybatis...