Springboot2.0配置JPA多数据源连接两个mysql数据库方式

下面是关于Springboot2.0配置JPA多数据源连接两个mysql数据库的完整攻略:

1. 配置application.properties文件

在application.properties文件中配置两个数据源的连接信息,如下所示:

#第一个数据源
spring.datasource.test1.jdbc-url=jdbc:mysql://localhost/test1?useUnicode=true&character-encoding=UTF-8
spring.datasource.test1.username=root
spring.datasource.test1.password=root
spring.datasource.test1.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.test1.initialSize=10
spring.datasource.test1.maxActive=100
spring.datasource.test1.maxWait=10000

#第二个数据源
spring.datasource.test2.jdbc-url=jdbc:mysql://localhost/test2?useUnicode=true&character-encoding=UTF-8
spring.datasource.test2.username=root
spring.datasource.test2.password=root
spring.datasource.test2.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.test2.initialSize=10
spring.datasource.test2.maxActive=100
spring.datasource.test2.maxWait=10000

在上面的配置中分别配置了两个数据源,其中test1和test2是数据源的名称,jdbc-url、username、password等参数分别对应数据库连接的地址、用户名、密码等。在这里,我们使用的是mysql数据库。需要注意的是,如果你使用的是其他数据库,则可能需要更改一些配置参数(如驱动类名等)。

2. 配置数据源

在Springboot2.0版本中,可以使用@Configuration和@Bean注解将数据源配置成一个Bean,如下所示:

@Configuration
public class DataSourceConfig {

    @Bean(name = "test1DataSource")
    @Primary
    @ConfigurationProperties(prefix="spring.datasource.test1")
    public DataSource testDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "test2DataSource")
    @ConfigurationProperties(prefix="spring.datasource.test2")
    public DataSource logDataSource() {
        return DataSourceBuilder.create().build();
    }
}

在上面的配置中,我们使用了@Configuration注解将这个配置类声明为一个Java配置类,并使用@Bean注解将数据源配置成了一个Bean。需要注意的是,我们在配置test1DataSource的时候使用了@Primary注解,表示如果系统中有多个数据源,则默认使用test1DataSource数据源。

3. 配置JPA

在Springboot2.0版本中,可以使用@Qualifier注解将不同的数据源注入到不同的EntityManagerFactoryBean中,如下所示:

@Configuration
@EnableJpaRepositories(
        entityManagerFactoryRef = "test1EntityManagerFactory",
        transactionManagerRef = "test1TransactionManager",
        basePackages = {"com.example.demo.dao.test1"}) //设置Repository所在位置
public class Test1JPAConfig {

    @Primary
    @Bean(name = "test1EntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(
            EntityManagerFactoryBuilder builder,
            @Qualifier("test1DataSource") DataSource dataSource) {
        return builder
                .dataSource(dataSource)
                .packages("com.example.demo.entity.test1") //设置实体类所在位置
                .persistenceUnit("test1PersistenceUnit")
                .build();
    }

    @Primary
    @Bean(name = "test1TransactionManager")
    public PlatformTransactionManager transactionManager(
            @Qualifier("test1EntityManagerFactory") EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }
}

在上面的配置中,我们使用@EnableJpaRepositories注解来启用JPA仓库,并使用@Qualifier注解将test1DataSource注入到test1EntityManagerFactory中,从而实现使用test1DataSource连接test1数据库。

同样地,我们配置test2的JPA实体管理器:

@Configuration
@EnableJpaRepositories(
        entityManagerFactoryRef = "test2EntityManagerFactory",
        transactionManagerRef = "test2TransactionManager",
        basePackages = {"com.example.demo.dao.test2"}) //设置Repository所在位置
public class Test2JPAConfig {

    @Bean(name = "test2EntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(
            EntityManagerFactoryBuilder builder,
            @Qualifier("test2DataSource") DataSource dataSource) {
        return builder
                .dataSource(dataSource)
                .packages("com.example.demo.entity.test2") //设置实体类所在位置
                .persistenceUnit("test2PersistenceUnit")
                .build();
    }

    @Bean(name = "test2TransactionManager")
    public PlatformTransactionManager transactionManager(
            @Qualifier("test2EntityManagerFactory") EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }
}

需要注意的是,由于我们在两个配置类中都使用了@Primary注解,因此如果你在使用JPA时没有指定数据源的话,则会默认使用test1DataSource数据源。

4. 完善Controller类

现在我们已经配置好了数据源和JPA实体管理器,下面我们需要编写Controller类来实现对两个数据库的访问。下面是对test1数据源的访问示例:

@RestController
@RequestMapping("/test1")
public class Test1Controller {

    @Autowired
    @Qualifier("test1EntityManagerFactory")
    private EntityManager entityManager;

    @GetMapping("/list")
    public List<Test1> list() {
        TypedQuery<Test1> query = entityManager.createQuery("select t from Test1 t", Test1.class);
        return query.getResultList();
    }
}

在上面的Controller类中,我们使用了@Autowired注解将test1DataSource注入到了entityManager中,并通过查询语句来查询数据库中的信息。

同样地,我们编写对test2数据源的访问示例:

@RestController
@RequestMapping("/test2")
public class Test2Controller {

    @Autowired
    @Qualifier("test2EntityManagerFactory")
    private EntityManager entityManager;

    @GetMapping("/list")
    public List<Test2> list() {
        TypedQuery<Test2> query = entityManager.createQuery("select t from Test2 t", Test2.class);
        return query.getResultList();
    }
}

这里我们通过@Autowired注解将test2DataSource注入到了entityManager中,并使用查询语句来查询数据库中的信息。

至此,Springboot2.0配置JPA多数据源连接两个mysql数据库的攻略就完成了,两条示例分别演示了对两个数据源的访问。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Springboot2.0配置JPA多数据源连接两个mysql数据库方式 - Python技术站

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

相关文章

  • Springboot集成Kafka进行批量消费及踩坑点

    下面我来详细讲解“Springboot集成Kafka进行批量消费及踩坑点”的完整攻略。 一、前言 Kafka是一款分布式消息队列系统,由Apache在2011年引入,其主要包括了生产者、消费者等API,用于实现消息的发送和接收等操作。而Springboot则是目前流行的一种开发框架,它可以简化Java应用的开发过程。本文将探讨如何在Springboot中集成…

    Java 2023年5月20日
    00
  • Java 判断两个字符串是否由相同的字符组成的实例

    下面是“Java 判断两个字符串是否由相同的字符组成的实例”的完整攻略。 鉴于这个问题,我们需要一个逐字比较的算法来解决。首先,需要确保两个字符串的长度相等,然后对它们进行排序,最后逐一比较它们是否相等。下面是具体步骤: 确保两个字符串的长度相等。可以使用 length() 方法来获取两个字符串的长度,并使用 if 语句确定它们是否相等,如果不相等,马上返回…

    Java 2023年5月27日
    00
  • 一篇文章带你入门Java变量及整形

    一篇文章带你入门Java变量及整形 什么是变量? 变量就是在程序执行期间可以发生变化的量。Java是一种强类型语言,声明变量时需要指定变量类型。 声明变量 在Java中声明变量时,需要指定变量的类型,语法为: type name; 其中,type表示变量类型,name表示变量名。例如,声明一个整型变量age: int age; 表示声明一个名为age的整型变…

    Java 2023年5月23日
    00
  • Java开发中最让人头疼的十个bug

    关于“Java开发中最让人头疼的十个 bug”的攻略,我会以下方式进行详细讲解: 一、前言 Java 是一种具有广泛应用的编程语言,然而,在 Java 开发过程中,也会出现一些 bug。接下来我们会详细讲解 Java 开发中最让人头疼的十个 bug 及其解决方法。 二、 Java 开发中最让人头疼的十个 bug 1. 空指针异常 在 Java 中,空指针异常…

    Java 2023年5月26日
    00
  • JavaWeb文件上传开发实例

    JavaWeb文件上传开发实例 在JavaWeb开发中,文件上传是一个常见的功能。本篇文章将为大家介绍如何在JavaWeb项目中实现文件上传的功能。 1. 前置条件 在开发文件上传功能前,需要先了解JavaWeb中FileUpload组件。FileUpload组件是Apache提供的一个工具包,用于在Web应用中处理文件上传功能。我们需要从官方网站上下载Fi…

    Java 2023年5月19日
    00
  • JAVA实现链表面试题

    下面是“JAVA实现链表面试题”的完整攻略: 什么是链表? 链表是一种常见的数据结构,由若干个节点(Node)组成的一个序列。每个节点包含两个信息:数据(Data)和指向下一个节点的地址(Next)。 怎样用JAVA实现链表? 1. 定义节点类 public class Node { public int data; // 节点中存放的数据 public N…

    Java 2023年5月26日
    00
  • java压缩文件与删除文件的示例代码

    让我来介绍一下如何使用Java对文件进行压缩和删除。 压缩文件 Java中提供了zip压缩格式的支持,在使用时只需要使用java.util.zip包中的相关类即可。下面提供两个示例: 示例一:压缩单个文件 import java.io.*; import java.util.zip.*; public class ZipDemo { public stati…

    Java 2023年5月19日
    00
  • 详解MyBatis的getMapper()接口、resultMap标签、Alias别名、 尽量提取sql列、动态操作

    下面就针对所提到的 MyBatis 的几个关键点展开讲解。 getMapper() 接口 getMapper() 接口是 MyBatis 通过动态代理将 Mapper 接口和 XML 配置文件绑定在一起。这样每次调用的时候就可以直接使用对象调用 Mapper 中的方法,并且 MyBatis 会自动帮我们调用 SQL 语句。下面是一个示例: public in…

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