二八佳人体似酥,腰间仗剑斩愚夫。虽然不见人头落,暗里教君骨髓枯。
上一章简单介绍了多数据源配置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(六)
项目目录:
二. 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数据库实体的信息
二.三.一 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数据库的信息
二.四.一 UserRepository 接口
public interface UserRepository extends JpaRepository<User, Integer>, JpaSpecificationExecutor<User>{ // 其他的方法. 具体使用可以参考 Jpa章节 }
二.四.二 DeptRepository 接口
public interface DeptRepository extends JpaRepository<Dept, Integer>, JpaSpecificationExecutor<Dept>{ // 其他的方法. 具体使用可以参考 Jpa章节 }