SpringBoot项目整合JPA多数据源配置

前言 


最近一直在参加Springboot相关的开源项目,自己负责了有关多数据源切换的模块。因此涉及到了在Springboot中配置多数据源。在本项目中使用到的数据库框架是Spring data jpa,因此下文介绍的是如何使用SpringDataJpa来让Springboot项目集成多个不同数据库的数据源

多数据源设计一般应用到中大型项目,项目关联的业务性比较复杂,使用的数据库比较分散。我们使用多数据源的目的也有很多,比如:分布式数据库读写分离,集成不同数据库等。不管初衷是什么也都是为了提高项目的可维护性、稳定性、响应速度。
 

开发环境


1. IDE - intelij idea
2. JAVA 1.8
3. XAMPP - 一键式配置开发环境(不了解的自己google一下)
4. POSTMAN - HTTP模拟神器(不了解的google一下)



1 创建数据库 


1.1 安装XAMPP 


下载和安装XAMPP后,运行Apache和MySQL,如下图:
SpringBoot项目整合JPA多数据源配置_第1张图片

这个时候mysql就安装好了,接着通过http://localhost/phpmyadmin在网页上面操作mysql数据库了。


1.2 新建数据库表 


我们首先创建两个数据库(user、books)user数据库内包含了一张数据表t_user,books数据库内包含了一张数据库book。

t_user表结构如下图:
SpringBoot项目整合JPA多数据源配置_第2张图片


t_book表结构如下图:
SpringBoot项目整合JPA多数据源配置_第3张图片


 

 

2. 构建maven项目


使用spring initializr工具生成一个spring boot的maven工程,
并添加如下dependency:

SpringBoot项目整合JPA多数据源配置_第4张图片

 

2.1 编写applicaton.properties 


spring boot连接数据库的方式比较简单,只需要在properties里面配置一些连接属性即可,下图
配置了book数据库和user数据库的连接信息:

SpringBoot项目整合JPA多数据源配置_第5张图片
 

可以看到上面两个数据源命名时都有前缀,spring.datasource.primary、spring.datasource.second。这个是我们配置时必要的属性,下面我们就来编写数据库源的映射配置类。

 

 2.2 定义数据库配置类 DataSourceConfig 


新建一个DataSourceConfig.java类,用来映射数据库源的配置。

SpringBoot项目整合JPA多数据源配置_第6张图片

上图中,我们对应两个数据库分别定义了2个数据库配置信息类 userDataSourceProperties , bookDataSourceProperties,
2个数据源类 userDataSource,bookDataSource。 

@Primary注解决定了哪一个数据源为主数据源,当没有配置自动切换的package时默认使用该数据源进行数据处理操作。

@Qualfier注解用来注入制定的候选bean对象。

@configurationProperties根据前缀将配置文件的信息,读取并自动封装成实体类.我们就是利用这个其将数据库配置信息封装
成DataSourceProperties信息


2.3 定义具体的数据库配置类 



BookDataSourceConfig

SpringBoot项目整合JPA多数据源配置_第7张图片

 

SpringBoot项目整合JPA多数据源配置_第8张图片

UserDataSourceConfig 

SpringBoot项目整合JPA多数据源配置_第9张图片

 

SpringBoot项目整合JPA多数据源配置_第10张图片


@EnableJpaRepositories注解用于Srping JPA的代码配置,用于取代xml形式的配置文件,@EnableJpaRepositories支持的配置形式丰富多用.其最主要的三个的属性如下:

1. basePackage 用于配置扫描Repositories所在的package及子package(其实就是你访问数据库的DAO文件包路径)

2. entityManagerFactoryRef,实体管理工厂引用名称,你可以用@BEAN自定义控制entityManager的属性,配置让SpringDataJpa管理实体,根据EntityManagerFactory工厂的参数构建出EntityManager。

3. transactionManagerRef事务管理工厂引用名称,根据EntityManagerFactory创建事务Manager,让事务应用到实体工厂内


我们在类上添加开启了@EnableTransationManager事务配置以及启用了SpringDataJpa(@EnableJpaRepositories)的配置参数,设置事务、实体管理器、数据源所应用到的包,当使用该包下的实体以及数据接口时就会自动调用bookDataSource来处理数据。userDataSource的实现跟bookDataSource的实现几乎一样,只是少了@Primart注解以及修改对应的参数等


2.4 定义用来访问数据库 JPA-repository文件 


SpringBoot项目整合JPA多数据源配置_第11张图片

UserRepository跟bookRepository实现几乎一样,就不在讲述了。具体可以下载代码参考(文章最后有代码下载连接).


2.5 controller 查询书籍列表接口

SpringBoot项目整合JPA多数据源配置_第12张图片

2.6 contrller  查询用户列表接口


SpringBoot项目整合JPA多数据源配置_第13张图片



 利用POSTMAN发送HTTP请求-测试 


总结
这里主要讲解了如果基于SpringBoot项目使用SpringDataJPA自动根据package名称切换使用不同的数据源。

你可能感兴趣的:(SpringBoot)