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日

相关文章

  • java LinkedList类详解及实例代码

    Java LinkedList 类详解及实例代码 介绍 Java中的LinkedList类是一个双向链表的实现,是List接口的有序集合。LinkedList类提供了方便的操作链表的方法,可以很容易地实现添加、删除、插入以及访问节点等操作。 以下是创建一个LinkedList的示例: LinkedList<String> linkedList =…

    Java 2023年5月23日
    00
  • Java异常学习之自定义异常详解

    Java异常学习之自定义异常详解 自定义异常是什么? 在Java的异常体系中,自定义异常指的是用户自己定义的异常类,继承自Throwable或其子类。自定义异常一般用来处理应用程序特别的异常,例如业务逻辑中的特定条件。 如何定义自定义异常? 定义自定义异常需要遵循以下步骤: 创建一个继承自Exception或其子类的Java类; 添加至少一个构造函数,以便在…

    Java 2023年5月27日
    00
  • IntelliJ IDEA使用教程从入门到上瘾(2019图文版)

    IntelliJ IDEA使用教程从入门到上瘾(2019图文版) IntelliJ IDEA 是一款集成开发环境(IDE),被广泛应用于 Java 开发。本教程将从入门到上瘾,讲解 IntelliJ IDEA 的使用方法。 下载和安装 IntelliJ IDEA 下载 IntelliJ IDEA 的安装包,可前往官网下载: https://www.jetbr…

    Java 2023年5月19日
    00
  • springmvc 中dao层和service层的区别说明

    下面是详细讲解“springmvc 中dao层和service层的区别说明”的攻略。 1. DAO层和Service层的作用 DAO层 DAO层(Data Access Object 层)是Spring框架中负责与数据库交互,并对数据进行CRUD(增删改查)的持久化操作代码的一层。在实际开发中,DAO层通常与Hibernate、MyBatis等持久化框架联合…

    Java 2023年6月16日
    00
  • Java mybatis 开发自定义插件

    Java MyBatis是一种简单易用的ORM(对象关系映射)框架,它可以将Java对象与关系数据库中的数据进行映射。MyBatis的设计思想是SQL语句与Java代码的分离,这使得MyBatis可以灵活地解决各种SQL问题。针对特殊的需求,MyBatis还支持自定义插件的开发,开发者可以通过自定义插件完成自己的业务逻辑。本文将详细介绍如何开发MyBatis…

    Java 2023年5月20日
    00
  • jsp页面中窗口关闭,退出的方式分享

    下面我会详细讲解如何在 JSP 页面中实现窗口关闭和退出的方式。 使用 JavaScript 关闭窗口 可以使用 JavaScript 来实现关闭窗口的功能。具体代码如下所示: <button onclick="window.close();">关闭窗口</button> 可以在 JSP 页面中将上述代码添加到一个…

    Java 2023年6月15日
    00
  • JAVAEE model1模型实现商品浏览记录(去除重复的浏览记录)(一)

    JavaEE Model1模型实现商品浏览记录(去除重复的浏览记录)的攻略大致分为以下几个步骤: Step1:分析需求,确定数据结构 首先,需要确定需要保存哪些数据。在本场景中,需要保存用户的浏览记录,因此需要保存的数据包括商品ID(item_id)和浏览时间(view_time)。 为了去除重复的浏览记录,需要使用Java集合类HashSet来保存用户的浏…

    Java 2023年6月15日
    00
  • jsp给后台带多个参数的方法

    当使用JSP进行Web开发时,传递多个参数给后台是很常见的需求。下面是详细的攻略: 一、GET方法传递多个参数 在JSP页面的form表单中设置多个参数: <form action="submit.jsp" method="get"> <label for="name">Na…

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