`
jaesonchen
  • 浏览: 311160 次
  • 来自: ...
社区版块
存档分类
最新评论

Spring Boot配置多个DataSource

 
阅读更多

使用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

现在,我们就创建了两个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多数据源配置

    在Spring Boot应用中,多数据源配置是一项关键的技术,它允许我们同时管理多个数据库,比如主库和从库,或者不同类型的数据库。本教程将详细阐述如何在Spring Boot项目中实现这一功能,从数据源配置、实体管理到...

    Spring Boot+Jpa多数据源配置Demo(支持不同数据库)

    在Spring Boot中,我们可以通过创建不同的`DataSource` bean来配置多个数据源。每个数据源通常会有一个对应的`JdbcTemplate`或`JpaEntityManagerFactory`。首先,我们需要在`application.yml`或`application....

    Spring Boot多数据源(JdbcTemplate)配置与使用

    在Spring Boot应用中,我们经常需要处理来自多个数据源的数据,比如在开发微服务架构时,每个服务可能对应一个特定的数据源。`JdbcTemplate`是Spring框架提供的一个用于简化数据库操作的工具,它使得数据库访问更为...

    dynamic-datasource-spring-boot-starter_多数据源_

    `dynamic-datasource-spring-boot-starter`通过自动化配置和扩展点设计,使得开发者能够在不修改代码的情况下,轻松地在多个数据源之间切换。 **Spring Boot**是Spring框架的一个衍生项目,旨在简化Spring应用程序...

    spring-boot-dynamic-datasource-started-master.rar

    而Spring Boot动态数据源(Dynamic DataSource)则是其中一个重要且实用的功能,它允许我们在同一应用中灵活切换和管理多个数据库。本教程将深入探讨Spring Boot动态数据源的实现原理与实战技巧。 一、Spring Boot...

    spring boot 2多数据源,里面有hibernate和mybatis的多数据源代码

    1. **配置DataSource**:创建两个DataSource bean,分别对应不同的数据库。可以使用`@ConfigurationProperties`注解从配置文件中读取数据库连接信息。 2. **配置事务管理器**:由于存在多个数据源,我们需要为每个...

    spring boot配置多数据源

    本文将详细讲解如何在Spring Boot中配置多个数据源,以及结合MyBatis进行数据操作。 首先,我们要明白什么是数据源(DataSource)。数据源是Java中用于存储数据库连接的信息,它是JDBC的一部分,负责管理与数据库的...

    spring boot 例子代码

    再者,Spring Boot 提供了丰富的起步依赖,如 `spring-boot-starter-web`、`spring-boot-starter-data-jpa`、`spring-boot-starter-data-mongodb` 等,覆盖了 Web 开发、数据访问等多个方面。"BootTwo" 示例可能涵盖...

    spring boot入门

    只需要创建一个带有 `@SpringBootApplication` 注解的主类,Spring Boot 就能自动配置大多数的设置。例如: ```java @SpringBootApplication public class Application { public static void main(String[] args)...

    SpringBoot框架Datasource注入

    在Spring Boot框架中,`DataSource`的注入是应用程序与数据库交互的基础。`DataSource`是一个接口,通常由...在项目中,`demo`可能是一个包含具体示例代码的文件,用来展示如何在Spring Boot中设置和使用`DataSource`。

    spring-boot示例项目

    config|[Spring Cloud Alibaba(二)配置中心多项目、多配置文件、分目录实现](https://github.com/smltq/spring-boot-demo/blob/master/cloud-alibaba/README2.md) Sentinel|[Spring Cloud Alibaba(三)Sentinel...

    通过Spring Boot配置动态数据源访问多个数据库的实现代码

    Spring Boot配置动态数据源访问多个数据库实现代码详解 通过Spring Boot配置动态数据源访问多个数据库可以实现数据库的动态增删和数量无限的支持,下面将详细介绍该实现代码的知识点。 数据源配置管理 在Spring ...

    spring中dataSource的配置以及配合IOC的使用

    只需要在`application.properties`或`application.yml`中设置相关属性,Spring Boot就会自动配置并创建`DataSource`。 ```properties spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource....

    spring boot多数据源(AOP注解动态切换)

    我们可以创建多个DataSource bean,每个代表一个数据源。这里我们创建两个数据源,分别命名为`primaryDataSource`和`secondaryDataSource`: ```java @Configuration public class DataSourceConfig { @Bean...

    Spring-boot项目多数据源配置

    在Spring Boot项目中,多数据源配置是一项关键的技术,它允许我们连接并操作多个数据库,这对于数据隔离、读写分离或者分布式系统来说是至关重要的。本篇将详细讲解如何在基于Maven构建的Spring Boot应用中实现多...

    Spring Boot中整合MyBatis

    Spring Boot通过`@EnableJpaRepositories`注解自动配置了数据源,但如果我们需要配置多个数据源,可以创建自定义的`DataSource` bean。例如,创建两个数据源`primaryDataSource`和`secondaryDataSource`: ```java...

    Spring Boot如何使用HikariCP连接池详解

    在现代Java开发中,Spring Boot框架以其简洁性和自动化配置受到广泛欢迎。Spring Boot 2.x版本默认采用HikariCP作为其数据连接池,因为HikariCP以其高效和高性能著称。HikariCP通过使用Javassist库进行字节码操作,...

    SpringBoot多数据源配置(方式一:配置多个mapper扫描不同的包路径实现多数据源配置).docx

    ### Spring Boot多数据源配置详解 #### 一、引言 在实际的软件开发过程中,随着业务需求的多样化,单一的数据源已经无法满足所有场景的需求。例如,有时我们需要同时访问两个或更多的数据库来完成复杂的业务逻辑,...

    Spring Boot 学习示例

    这个"Spring Boot 学习示例"项目中的 `spring-boot-examples-master` 文件夹很可能是包含了多个子项目,每个子项目对应一个特定的 Spring Boot 功能或组件的实例。通过研究这些示例,你可以更直观地理解如何在实际...

    spring-boot-demo

    《Spring Boot基础与实战——以spring-boot-demo...通过分析这个小demo,我们可以了解到Spring Boot的基础架构、依赖管理、自动配置、RESTful API设计等多个方面的知识,为深入学习和应用Spring Boot打下坚实的基础。

Global site tag (gtag.js) - Google Analytics