SpringBoot JPA配置多数据源(同类型库)教程
SpringBoot项目配置多数据源主要分为以下个步骤:
- 确定好所连接的数据库的资源(包括url username password)
- 将两个库的信息写入到配置文件中(application.yaml或application.properties都可)
我使用的是两个mysql的数据库,连接信息如下:
spring:datasource:ds1:jdbc-url: xxxx#数据库用户名username: xxxx#数据库密码password:xxxx#mysql数据库驱动程序(重要)driver-class-name: com.mysql.cj.jdbc.Driverds2:jdbc-url: xxxx#数据库用户名username: xxxxx#数据库密码password: xxxxxx#mysql数据库驱动程序(重要)driver-class-name: com.mysql.cj.jdbc.Driver
- 写完配置文件后,需要根据使用的数据源来建立不同的数据源配置类
首先建立主配置类DataSourceConfig.class,在主配置类中指定刚刚写入的两个数据源,如下:
@Configuration
public class DataSourceConfig {//第一个数据源@Bean(name = "firstDataSource")@Primary@ConfigurationProperties("spring.datasource.ds1")@Qualifier("firstDataSource")public DataSource FirstDataSource() {return DataSourceBuilder.create().build();}//第二个数据源@Bean(name = "secondDataSource")@ConfigurationProperties("spring.datasource.ds2")@Qualifier("secondDataSource")public DataSource SecondDataSource() {return DataSourceBuilder.create().build();}//加载JPA的相关配置信息@Autowiredprivate JpaProperties jpaProperties;@Autowiredprivate HibernateProperties hibernateProperties;@Bean(name = "vendorProperties")public Map<String, Object> getVendorProperties() {return hibernateProperties.determineHibernateProperties(jpaProperties.getProperties(), new HibernateSettings());}}
其次,建立主数据源配置类,需要指定与该数据源建立连接的**实体类包**与持久层的**repository接口的包**
@Configuration //定义主配置类,在启动时注入bean到spring容器中
@EnableTransactionManagement //开启生明式事务
@EnableJpaRepositories( //用来扫描指定的包及其子包中repository定义entityManagerFactoryRef="entityManagerFactoryPrimary", transactionManagerRef="transactionManagerPrimary",basePackages= { "xxx.xxx.xxx.xx" })//设置dao层(持久层,即repo)所在位置
public class PrimaryDataSourceConfig {@Resource@Qualifier("firstDataSource")private DataSource firstDataSource; //注入主配置类中的主数据源@Resource@Qualifier("vendorProperties")private Map<String, Object> vendorProperties; //jpa加载的相关配置,去掉也可以@Bean(name = "entityManagerFactoryPrimary")@Primary //主数据源中要加这个public LocalContainerEntityManagerFactoryBean entityManagerFactory() {HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();vendorAdapter.setDatabase(Database.MYSQL);vendorAdapter.setShowSql(true);LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();factory.setJpaVendorAdapter(vendorAdapter);factory.setPackagesToScan("xxx.xxx.xxx.xxx"); //设置实体类包所在位置factory.setDataSource(firstDataSource); //指定数据源factory.setJpaPropertyMap(vendorProperties);return factory;}@Beanpublic JpaTransactionManager transactionManager() {JpaTransactionManager transactionManager = new JpaTransactionManager();transactionManager.setEntityManagerFactory(entityManagerFactory().getObject());return transactionManager;}}
这里需要注意的是,几个重要的注解,@Configuration、@EnableJpaRepositories与@Primary不能忘记。
下一步,建立第二个数据源的配置类,需要指定的东西与主数据源完全相同,只不过要去掉@Primary的注解
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef="entityManagerFactorySecondary",basePackages= { "=com.xxx.xxx.repo" })//设置dao(repo)所在位置
public class SecondaryDataSourceConfig {@Resource@Qualifier("secondDataSource")private DataSource secondDataSource; //注入第二个数据源@Resource@Qualifier("vendorProperties")private Map<String, Object> vendorProperties;@Bean(name = "entityManagerFactorySecondary")public LocalContainerEntityManagerFactoryBean entityManagerFactory () {HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();vendorAdapter.setDatabase(Database.MYSQL);vendorAdapter.setShowSql(true);LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();factory.setJpaVendorAdapter(vendorAdapter);factory.setPackagesToScan("com.xxx.xxx.entity"); //指定实体类所在包位置factory.setDataSource(secondDataSource); //指定数据源factory.setJpaPropertyMap(vendorProperties);return factory;}@Beanpublic JpaTransactionManager transactionManager() {JpaTransactionManager transactionManager = new JpaTransactionManager();transactionManager.setEntityManagerFactory(entityManagerFactory().getObject());return transactionManager;}}
基本配置已完成,不需要再做其他配置,也不需要修改其他层的代码,接下来就是编写测试代码。
首先建立两个数据源对应的实体类与持久层接口以及业务层接口及其实现,然后生成测试代码,查询库中表数据。
多数据源配置结束!
SpringBoot JPA配置多数据源(同类型库)教程相关推荐
- springboot jpa 配置多数据源
jpa 多数据源配置 多个 mysql 数据库配置 springboot jpa 配置多数据源其实也并不难,只需要在 properties 或者 yml中简单配置并在项目中引入配置即可. 下面以 ym ...
- springboot jpa 配置多数据源报错解决 Consider defining a bean named ‘entityManagerFactory‘
版本 springboot 2.6.x 现象 jpa配置多数据源后启动报错 Consider defining a bean named 'entityManagerFactory' 解决 方法1:将 ...
- springboot + JPA 配置双数据源
一.首先配置application.yml文件设置主从数据库 spring:servlet:multipart:max-file-size: 20MBmax-request-size: 20MBpro ...
- springboot+jpa配置多数据源(Oracle+SqlServer)
本贴主要讲解配置多数据源 springboot+jpa的整合需要自行准备好 1.maven中要导入Oracle和SqlServer的jar包 <dependency><groupId ...
- SpringBoot+ElasticSearch7.x+JPA配置多数据源
SpringBoot+ElasticSearch7.x+JPA配置多数据源 这里分为测试环境配置和正式环境配置,大体相差无几 ESTestConfig 1 @Configuration2 @Confi ...
- springboot+jpa+mybatis 多数据源支持
springboot+jpa+mybatis 多数据源支持 配置dataSource import org.springframework.beans.factory.annotation.Quali ...
- SpringBoot JPA 配置多个数据库
SpringBoot JPA 配置多个数据库 一.application.yml : 二.创建一个SpringBoot配置类 三.primary数据源的JPA配置 四.secondary数据源的JPA ...
- springboot2+JPA 配置多数据源(不同类型数据库)
注意:看此篇文章之前,springboot+jpa的配置环境应搭建好,不会搭可以自行百度.本文章主要讲述配置JPA多数据源. 1.数据源配置文件 application.properties # 数据 ...
- db2 springboot 整合_[SpringBoot]快速配置多数据源(整合MyBatis)
前言 由于业务需求,需要同时在SpringBoot中配置两套数据源(连接两个数据库),要求能做到service层在调用各数据库表的mapper时能够自动切换数据源,也就是mapper自动访问正确的数据 ...
最新文章
- 隔年的衣服发黄处理方法
- IDEA打包成war部署web项目
- java中的轮子是什么意思_后端的轮子(一) - java后端开发的个人空间 - OSCHINA - 中文开源技术交流社区...
- python练习题实例_Python 练习实例65
- Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused(MongoDB启动异常)
- 在Eclipse中导入dtd和xsd文件,使XML自动提示
- Ubuntu 12.04下安装Oracle Express 11gR2
- 正整数 n 所有可能的和式的组合
- 今天的快乐从何而来的飞鸽传书
- 演练 创建数据库MySchool 1007 sqlserver
- Windows Server 2012 +WDK7600.16385.1+VS2010驱动开发环境搭建
- 剑指offer之统计数组中出现次数超过一半的数字
- Spark 解析 : DAGScheduler中的DAG划分与提交
- CSS 子元素铺满整个父元素、CSS + JQuery 实现遮罩层
- Mac与Windows快捷键盘点
- 关于Android及iOS打包
- java各位数字补位,左边补0
- OpenCV:03图像的算数运算
- libmodbus协议栈4—— 总结
- 检测某个地图某个怪物的数量的脚本
热门文章
- 虚拟主机mysql报错no database selected
- 回归问题-Lasso回归
- 好用的python app_这15个好用的Python库,你都用过吗?
- shapefile java_有人知道Java中可以解析ESRI Shapefile的库吗?
- php 二维数组中查找,二维数组中的查找
- c语言复制文件夹xcopy,XCOPY——目录复制命令
- 世界上第一个计算机有鼠标,40年的经典,世界上第一个鼠标
- 计算机毕业设计 SSM+Vue药品超市系统 线上购药系统 药品信息管理新系统 药物库管理系统Java Vue MySQL数据库 远程调试 代码讲解
- java jaxb_JavaEE学习之JAXB
- 视觉SLAM十四讲(高翔版本),ch4章节部分笔记