使用Spring Boot时,默认情况下,配置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

现在,我们就创建了两个JdbcTemplateBean。在需要使用第一个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

Spring Boot配置多个DataSource的更多相关文章

  1. [转] Spring Boot配置多个DataSource

    [From]  https://www.liaoxuefeng.com/article/001484212576147b1f07dc0ab9147a1a97662a0bd270c20000 Sprin ...

  2. Spring Boot配置多个DataSource (转)

    使用Spring Boot时,默认情况下,配置DataSource非常容易.Spring Boot会自动为我们配置好一个DataSource. 如果在application.yml中指定了spring ...

  3. spring boot配置mybatis和事务管理

    spring boot配置mybatis和事务管理 一.spring boot与mybatis的配置 1.首先,spring boot 配置mybatis需要的全部依赖如下: <!-- Spri ...

  4. Spring Boot配置多数据源并实现Druid自动切换

    原文:https://blog.csdn.net/acquaintanceship/article/details/75350653 Spring Boot配置多数据源配置yml文件主数据源配置从数据 ...

  5. spring boot配置druid连接池连接mysql

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  6. Redis篇之操作、lettuce客户端、Spring集成以及Spring Boot配置

    Redis篇之操作.lettuce客户端.Spring集成以及Spring Boot配置 目录 一.Redis简介 1.1 数据结构的操作 1.2 重要概念分析 二.Redis客户端 2.1 简介 2 ...

  7. Spring Boot配置,读取配置文件

    Spring Boot配置,读取配置文件 一.配置Spring Boot 1.1 服务器配置 1.2 使用其他Web服务器 1.3 配置启动信息 1.4 配置浏览器显示ico 1.5 Yaml语法 1 ...

  8. Spring Boot -- 配置切换指南

    一般在一个项目中,总是会有好多个环境.比如: 开发环境 -> 测试环境 -> 预发布环境 -> 生产环境 每个环境上的配置文件总是不一样的,甚至开发环境中每个开发者的环境可能也会有一 ...

  9. Spring Boot 配置优先级顺序

    一般在一个项目中,总是会有好多个环境.比如: 开发环境 -> 测试环境 -> 预发布环境 -> 生产环境 每个环境上的配置文件总是不一样的,甚至开发环境中每个开发者的环境可能也会有一 ...

随机推荐

  1. jquery获取<div></div>之间的内容.text() 和 .html()区别

    jQuery 获取 div 之间的内容,有两种方法,$(selector).text().$(selector).html() . html: <div> <p>test< ...

  2. Topcoder SRM625 题解

    给出一个字符串求是palindrome和anagram的比率是多少. 知识点: 1 DBL_MAX 64位double的最长数大概是1.7E308,非常大非常大,比long long大上不知多少倍.故 ...

  3. Kubernetes基本概念之Label

    系列目录 在为对象定义好Label后,其他对象就可以通过Label来对对象进行引用.Label的最常见的用法便是通过spec.selector来引用对象. apiVersion: v1 kind: R ...

  4. 汇率换算自然语言理解功能JAVA DEMO

    >>>>>>>>>>>>>>>>>>>>>>>> 欢迎转 ...

  5. 记录-外挂recovery的制作(魅蓝note)

    安卓的开源使其具有很强的可定制性,对于用户来说很具有可玩性.玩机一般来说就是解锁BootLoader刷入第三方recovery,利用第三方recovery刷第三方ROM,刷supersu获取root权 ...

  6. ios6.0,程序为横屏,出现闪退

    本文转载至 http://blog.csdn.net/huanghuanghbc/article/details/10150355   ios6.0,程序为横屏,出现闪退 *** Terminatin ...

  7. Struts2基本概念

    一.Struts2体系结构 : 1.Web浏览器请求一个资源. 2.过滤器Dispatcher查找方法,确定适当的Action. 3.拦截器自动对请求应用通用功能,如验证和文件上传操作. 4.Acti ...

  8. a completely rewritten architecture of Hadoop cluster

    https://www.ibm.com/developerworks/library/bd-yarn-intro/

  9. git 的安装

    git在开发中已经成了必备工具了,我们来看看git在各个平台上的安装 1.Linux上安装git $sudo apt-get install git 2.mac上安装 1)homebrew安装git ...

  10. 数据库的update、delete、insert和select用法

    String sql=null; 1.sql="update 表名 set <列名>=<表达式> [where=<表达式>]" 2.sql=&q ...