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

yizhihongxing

下面是关于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日

相关文章

  • java中创建、写入文件的5种方式

    当我们在开发Java应用程序时,可能会遇到需要将数据写入文件的需求,本文将介绍Java中创建、写入文件的5种方式。 1. 使用FileOutputStream和BufferedOutputStream创建和写入文件 使用Java的FileOutputStream和BufferedOutputStream类,我们可以创建和写入文件: import java.i…

    Java 2023年5月19日
    00
  • Java自定义数组列表的实现操作

    下面是Java自定义数组列表的实现操作的完整攻略。 1. 概述 Java内置了ArrayList,LinkedList等类型的集合,但有时我们需要使用自定义的数组列表来满足特定的需求。自定义数组列表主要包含以下操作: 添加元素 删除元素 获取元素 修改元素 获取元素个数 2. 实现 我们可以通过定义一个类来实现自定义数组列表。在这个类中,我们可以使用Java…

    Java 2023年5月27日
    00
  • javaweb实战之商城项目开发(二)

    《javaweb实战之商城项目开发(二)》是一篇介绍如何开发一个完整的商城网站的教程,其中包含了从前台页面设计到后台数据管理等方面的内容。 在开发商城项目时,我们需要先进行项目规划和技术选型,如需使用框架,我们可以选择Spring MVC、Spring Boot等常用的框架。在规划完整个项目后,我们需要完成数据库的设计和表的创建。商城项目通常需要的功能包括商…

    Java 2023年5月23日
    00
  • Java实现前端jsencrypt.js加密后端解密的示例代码

    下面是实现Java实现前端jsencrypt.js加密后端解密的完整攻略: 一、前言 在前后端分离架构中,涉及到传输敏感信息时通常会进行加密处理。在前端,我们可以使用jsencrypt.js这样的JS库进行加密操作,但将加密后的数据发送到后端后,我们需要使用Java等语言进行解密操作。 因此,本文将讲解如何使用Java实现前端jsencrypt.js加密后端…

    Java 2023年5月19日
    00
  • R语言3.6.3安装超详细教程附安装包

    下面是详细的“R语言3.6.3安装超详细教程附安装包”的完整攻略。 准备 首先,你需要下载R语言的安装包。可以前往R官网下载对应版本的R语言安装包。 安装 双击运行下载好的R语言安装包; 选择“ Agree”同意协议; 选择安装位置; 在“Select Components”中,推荐选择默认的安装模式; 此时,“Start Menu Folder”中会出现R…

    Java 2023年5月26日
    00
  • Java 判断实体对象及所有属性是否为空的操作

    Java 判断实体对象及所有属性是否为空的操作是日常开发中经常遇到的问题之一,可以用来对数据进行合法性校验。下面将详细介绍如何实现该操作的完整攻略。 判断实体对象是否为空 判断实体对象是否为空可以通过对实体对象本身进行判断的方法实现。我们可以使用 Java 中的 == 或 null 进行判断。 示例: public boolean isObjectNull(…

    Java 2023年5月26日
    00
  • java中CopyOnWriteArrayList源码解析

    Java中CopyOnWriteArrayList源码解析 简介 CopyOnWriteArrayList是Java中并发编程常用的数据结构,在多线程的环境下,它可以保证线程安全。它的实现是通过在写入时复制整个数组,从而避免了并发写入数据时的冲突。 CopyOnWriteArrayList继承自AbstractList,同样实现了List接口。它在List的…

    Java 2023年5月26日
    00
  • 浅谈java随机数的陷阱

    浅谈Java随机数的陷阱 在Java中,我们常常需要使用随机数来模拟一些随机的行为,比如生成验证码、抽奖等。然而,在使用Java随机数的过程中,我们可能会遇到一些难以预料的陷阱。本文将从以下几个方面详细讲解Java随机数的使用注意事项: 随机种子的问题 伪随机数生成器的局限性 安全随机数生成器的使用方法 随机种子的问题 在Java中,我们可以使用java.u…

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