springboot下配置多数据源的方法

下面为您介绍在Spring Boot中配置多数据源的方法。

1. 添加依赖

pom.xml 文件中添加以下依赖:

<!-- 数据源驱动依赖 -->
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
</dependency>

<!-- Spring Boot JPA依赖 -> 如果使用Spring Data JPA -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

2. 配置主数据源

application.ymlapplication.properties 文件中,配置主数据源的连接信息:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver

3. 配置第二个数据源

3.1 创建配置类

创建一个配置类,用来配置第二个数据源的连接信息:

@Configuration
public class DataSourceConfig2 {

    @Bean(name = "secondaryDataSource")
    @Qualifier("secondaryDataSource")
    @ConfigurationProperties(prefix="spring.datasource.secondary")
    public DataSource secondaryDataSource() {
        return DataSourceBuilder.create().build();
    }
}

3.2 在配置文件中配置第二个数据源连接信息

application.ymlapplication.properties 文件中添加以下配置信息:

spring:
  datasource:
    secondary:
      url: jdbc:mysql://localhost:3306/mydb2
      username: root
      password: root
      driver-class-name: com.mysql.cj.jdbc.Driver

4. 配置JPA

如果需要使用Spring Data JPA,可以在 pom.xml 中添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
</dependency>

4.1 创建一个JPA的配置类

@Configuration
@EnableJpaRepositories(
        entityManagerFactoryRef="entityManagerFactory2",
        basePackages= { "com.example.multi.repository.secondary" }) // 指定JPA Repository的位置
public class JpaConfig2 {

    @Autowired
    @Qualifier("secondaryDataSource")
    private DataSource secondaryDataSource;

    @Autowired
    private JpaProperties jpaProperties;

    @Bean(name = "entityManagerFactory2")
    public EntityManagerFactory secondaryEntityManagerFactory(EntityManagerFactoryBuilder builder) {
        LocalContainerEntityManagerFactoryBean factory = builder
                .dataSource(secondaryDataSource)
                // 指定Entity的位置
                .packages("com.example.multi.entity.secondary")
                .persistenceUnit("secondaryPersistenceUnit")
                .properties(jpaProperties.getProperties())
                .build();

        return factory.getObject();
    }

    @Bean(name = "transactionManager2")
    public PlatformTransactionManager secondaryTransactionManager(EntityManagerFactoryBuilder builder) {
        JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
        jpaTransactionManager.setEntityManagerFactory(secondaryEntityManagerFactory(builder));
        return jpaTransactionManager;
    }
}

4.2 在Service中使用

最后,在Service中使用EntityManager和@Transactional注解来实现对两个库的访问。

@Service
public class UserService {

    @Autowired
    @Qualifier("primaryDataSource")
    private DataSource primaryDataSource;

    @PersistenceContext(unitName = "primaryEntityManagerFactory")
    private EntityManager entityManager;

    @PersistenceContext(unitName = "secondaryEntityManagerFactory")
    private EntityManager entityManager2;

    @Transactional
    public void save(User user) {
        entityManager.persist(user);
    }

    @Transactional(value = "transactionManager2")
    public void save2(User user) {
        entityManager2.persist(user);
    }
}

示例

示例1: 单个Service内使用两个数据源

@Service
public class UserService {

    @Autowired
    @Qualifier("primaryDataSource")
    private DataSource primaryDataSource;

    @PersistenceContext(unitName = "primaryEntityManagerFactory")
    private EntityManager entityManager;

    @Autowired
    @Qualifier("secondaryDataSource")
    private DataSource secondaryDataSource;

    @PersistenceContext(unitName = "secondaryEntityManagerFactory")
    private EntityManager entityManager2;

    @Transactional
    public void save(User user) {
        entityManager.persist(user);
    }

    @Transactional(value = "transactionManager2")
    public void save2(User user) {
        entityManager2.persist(user);
    }
}

示例2: 不同Service使用不同的数据源

@Service
public class UserServicePrimary {

    @Autowired
    @Qualifier("primaryDataSource")
    private DataSource primaryDataSource;

    @PersistenceContext(unitName = "primaryEntityManagerFactory")
    private EntityManager entityManager;

    @Transactional
    public void save(User user) {
        entityManager.persist(user);
    }
}

@Service
public class UserServiceSecondary {

    @Autowired
    @Qualifier("secondaryDataSource")
    private DataSource secondaryDataSource;

    @PersistenceContext(unitName = "secondaryEntityManagerFactory")
    private EntityManager entityManager2;

    @Transactional(value = "transactionManager2")
    public void save2(User user) {
        entityManager2.persist(user);
    }
}

以上就是在Spring Boot中配置多数据源的方法,希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot下配置多数据源的方法 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 推荐一个可以提高生产力的在线游戏

    很久没推荐好玩的工具了,今天给家推荐一个非常有意思的游戏:Habitica Habitica除了是个游戏之外,居然还是一个生产力应用! 为什么说Habitica还是个生产力应用呢?因为它还可以帮助我们养成习惯! 通过Habitica,我们可以用它的每日目标和代办事项列表功能来跟踪和管理你的习惯 在完成任务之后,你可以以此来升级你的虚拟角色,同时解锁游戏中更多…

    Java 2023年4月25日
    00
  • Java验证时间格式是否正确方法类项目实战

    Java验证时间格式是否正确方法类项目实战 介绍 在Java开发过程中,经常需要验证时间日期格式是否正确,例如用户提交的时间日期格式是否符合规范,或者我们需要对某个日期字符串进行解析等等。这篇文章将介绍如何在Java中验证时间日期格式是否正确的方法类项目实战。 步骤 步骤一:创建时间格式验证工具类 我们可以创建一个名为 DateTimeUtil 的工具类来进…

    Java 2023年5月20日
    00
  • Spring JdbcTemplate实现添加与查询方法详解

    我们来详细讲解一下“Spring JdbcTemplate实现添加与查询方法详解”的完整攻略。 一、什么是JdbcTemplate? JdbcTemplate是Spring框架中用来简化JDBC访问的类,通过JdbcTemplate可以简单而且明了地编写JDBC相关代码。相对于纯JDBC,JdbcTemplate有以下优势: JdbcTemplate回调函数…

    Java 2023年5月20日
    00
  • java 易懂易用的MD5加密(可直接运行)(2)

    下面是完整的攻略: Java易懂易用的MD5加密(可直接运行)(2) 背景信息 本篇攻略是 “Java易懂易用的MD5加密(可直接运行)(1)” 的续篇,如需了解更多背景信息请先查阅前篇攻略。 攻略步骤 1. 导入依赖包 首先,我们需要先导入依赖包。在本篇攻略中,我们使用的是commons-codec依赖包,该包中包含了Java中常用的摘要算法、编码器和哈希…

    Java 2023年6月15日
    00
  • Spring Security OAuth2 授权码模式的实现

    下面给出 Spring Security OAuth2 授权码模式的实现攻略。 什么是授权码模式 授权码模式(Authorization Code Grant)是OAuth2.0标准中最为常用的一种流程,在实现 OAuth2.0 授权功能时,授权码模式是最稳妥的一种方式。 授权码模式的具体流程如下:1. 第三方应用向用户请求授权,用户同意授权后,第三方应用获…

    Java 2023年5月20日
    00
  • Springboot项目快速实现Aop功能

    下面是关于“Springboot项目快速实现Aop功能”的完整攻略,希望对你有帮助。 什么是AOP AOP,全称为Aspect Oriented Programming,即面向切面编程。它是一种基于OOP的扩展,旨在通过预编译方式和运行期动态代理实现程序的透明化、模块化、松耦合等功能。通俗的理解就是,把一些常用功能提取出来,不用在每个业务场景都写一遍,比如日…

    Java 2023年5月19日
    00
  • JSP简介

    JSP 简介 JSP(Java Server Pages)是一种动态的网页技术,它可以让开发人员将 Java 代码嵌入到 HTML 页面中。JSP 页面首先被翻译成 Java 代码,然后编译成 Servlet 类,最后将 Servlet 类加载到 Web 服务器中。当 Web 客户端请求 JSP 页面时,Web 服务器会处理该请求并返回 Servlet 的执…

    Java 2023年6月15日
    00
  • Spring Data Exists查询最佳方法编写示例

    下面是关于“Spring Data Exists查询最佳方法编写示例”的完整攻略。 概述 在使用Spring Data进行数据持久化时,我们有时需要在数据访问层中使用Exists查询。Exists查询用于判断数据库中是否存在满足特定条件的记录。在本文中,我们将介绍如何在Spring Data中编写最佳的Exists查询。 方法一:使用方法名查询 Spring…

    Java 2023年6月2日
    00
合作推广
合作推广
分享本页
返回顶部