多数据源配置Jpa(十六)上

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 多数据源配置Jpa(十六)上

二八佳人体似酥,腰间仗剑斩愚夫。虽然不见人头落,暗里教君骨髓枯。


上一章简单介绍了多数据源配置JdbcTemplate(十五),如果没有看过,请观看上一章

工作中,在业务的发展或业务数据隔离的场景下,通常需要一个项目中引入多个数据源,

但SpringBoot默认的自动化配置是单数据源的,可以通过一些额外的配置,进行处理。

一. 多数据源配置前的工作准备

一.一 准备两个数据库 springboot 和springboot2

springboot 数据库里面存放着 user 表

springboot2 数据库表里面存放着 dept 表

-- 在 springboot 数据库里面 创建 user 表
use springboot;
CREATE TABLE `user` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `name` varchar(15) DEFAULT NULL,
    `sex` varchar(20) DEFAULT NULL,
    `age` int(6) DEFAULT NULL,
    `description` varchar(50) DEFAULT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
--  在 springboot2 数据库里面 创建 dept 表
use springboot2; 
CREATE TABLE `dept` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `name` varchar(200) DEFAULT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


一.二 准备对应的实体 User.java 和 Dept.java


User.java

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    /**
     * @param id id编号
     * @param name 姓名
     * @param sex 性别
     * @param age 年龄
     * @param description 描述
     */
    private Integer id;
    private String name;
    private String sex;
    private Integer age;
    private String description;
}


Dept.java

@Data
public class Dept {
    /**
     * @param id id编号
     * @param name 部门名称
     */
    private Integer id;
    private String name;
}


一.三 Jpa 的使用

关于 Jpa 的使用,可以看老蝴蝶以前写的文章: SpringBoot整合JPA(六)

项目目录:

daaf508346b88ab5d386eec265f1cd82.png



二. Jpa 多数据源配置

二.一 pom.xml 添加依赖

<!--引入MySql的驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--引入springboot与jpa整合的依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.6</version>
        </dependency>


二.二 application.yml 配置多数据源


# 配置成多数据源的形式
spring:
  datasource:
    # 以前的配置,去掉
    #driver-class-name: com.mysql.cj.jdbc.Driver
    #url: jdbc:mysql://localhost:3306/springboot?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8&useSSL=false
    #username: root
    #password: abc123
    # 配置第一个数据库
    one:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/springboot?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8&useSSL=false
      username: root
      password: abc123
      type: com.alibaba.druid.pool.DruidDataSource
    # 配置第二个数据库
    two:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/springboot2?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8&useSSL=false
      username: root
      password: abc123
      type: com.alibaba.druid.pool.DruidDataSource
  # JPA的相关配置
  jpa:
    # 设置数据库平台
    database-platform: org.hibernate.dialect.MySQLDialect
    # 设置数据库
    database: mysql
    # 是否展示SQL语句
    show-sql: true
    hibernate:
      use-new-id-generator-mappings: false
      # 持久化规则是 update
      ddl-auto: update
      naming:
        # 物理命名策略类的全限定名称
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl


二.三 实体配置

在 pojo 包下, 分别创建两个包 one 和 two 包。


one 包下面放置所有使用 one 数据库实体的信息, two 包下面放置所有使用two数据库实体的信息

f74241097880c7d31542cad3c3eb0bb2.png


二.三.一 User.java 用户实体

@Data
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "user")
@Entity
public class User implements Serializable {
    /**
     * @param id id编号
     * @param name 姓名
     * @param sex 性别
     * @param age 年龄
     * @param description 描述
     */
    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    private Integer id;
    @Column(name = "name")
    private String name;
    @Column(name="sex")
    private String sex;
    @Column(name="age")
    private Integer age;
    @Column(name="description")
    private String description;
}



二.三.二 Dept.java 部门实体


@Data
@Table(name = "dept")
@Entity
public class Dept {
    /**
     * @param id id编号
     * @param name 部门名称
     */
    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    private Integer id;
    @Column(name = "name")
    private String name;
}


二.四 repository 仓库配置

在 repository 包下, 创建 one 包和 two包

one 包下面放置所有使用 one 数据库的信息, two 包下面放置所有使用two数据库的信息

966755875ff31c3ea0e0e4ac1f01102f.png


二.四.一 UserRepository 接口


public interface UserRepository extends JpaRepository<User, Integer>,
        JpaSpecificationExecutor<User>{
    // 其他的方法. 具体使用可以参考 Jpa章节
}


二.四.二 DeptRepository 接口

public interface DeptRepository extends JpaRepository<Dept, Integer>,
        JpaSpecificationExecutor<Dept>{
    // 其他的方法. 具体使用可以参考 Jpa章节
}


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
2月前
|
监控 Java 数据库
SpringBoot 实现动态切换数据源:优雅之道
在微服务架构和复杂的应用系统中,随着业务规模的扩大,单个数据源往往无法满足多样化的数据访问需求。这时,动态切换数据源成为了一个重要的技术需求,它允许应用程序在运行时根据业务逻辑或用户请求,灵活地选择不同的数据源进行操作。在Spring Boot框架中,实现数据源的动态切换既是一项挑战,也是一项展现技术优雅性的机会。以下,我们将深入探讨如何在Spring Boot中实现数据源的动态切换,并追求实现的优雅性。
241 1
|
5月前
|
设计模式 Java 关系型数据库
Spring的配置文件,如何配置端口号,,properties,yml获取配置项等方法,外观模式及其优缺点,日志代表的信息
Spring的配置文件,如何配置端口号,,properties,yml获取配置项等方法,外观模式及其优缺点,日志代表的信息
|
5月前
|
关系型数据库 数据库 数据安全/隐私保护
springboot+dynamic-datasource多数据源配置动态切换
springboot+dynamic-datasource多数据源配置动态切换
649 0
|
6月前
|
存储 Java 关系型数据库
springboot整合多数据源的配置以及动态切换数据源,注解切换数据源
springboot整合多数据源的配置以及动态切换数据源,注解切换数据源
607 0
|
6月前
|
SQL Java 关系型数据库
SpringBoot整合JDBC与默认数据源
SpringBoot整合JDBC与默认数据源
77 0
|
Java Spring
springboot自定义Banner图(项目启动时打印的spring图)
springboot项目启动一般是以这种方式启动:SpringApplication.run(App.class);
|
存储 druid Java
Springboot+Druid动态切换数据源
关于数据源的切换,在实际使用中经常出现,本文主要是使用Druid,最近经常使用到,根据以往项目的使用,调整后进行记录,方便自己以后查看,也便于大家一起学习
1709 0
|
XML Java 数据库
SpringBoot多数据源切换(十二)
SpringBoot多数据源切换(十二)
174 0
SpringBoot多数据源切换(十二)
|
Java 数据库 Spring
springboot切换数据源
springboot切换数据源
141 0