springboot+jpa配置多数据源(Oracle+SqlServer)
本贴主要讲解配置多数据源
springboot+jpa的整合需要自行准备好
1.maven中要导入Oracle和SqlServer的jar包
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!--oracle驱动 --><dependency><groupId>com.oracle</groupId><artifactId>ojdbc6</artifactId><version>11.2.0.3</version><scope>system</scope><systemPath>${xxx}/src/main/webapp/WEB-INF/lib/ojdbc6-11.2.0.3.jar</systemPath></dependency><dependency><groupId>com.oracle</groupId><artifactId>ojdbc6</artifactId><version>11.1.0.7.0</version><scope>system</scope><systemPath>${xxx}/src/main/webapp/WEB-INF/lib/ojdbc6.jar</systemPath></dependency><dependency><groupId>com.oracle</groupId><artifactId>ojdbc5</artifactId><version>11.1.0.7.0</version><scope>system</scope><systemPath>${xxx}/src/main/webapp/WEB-INF/lib/ojdbc5.jar</systemPath></dependency><!--SQL server--><dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>sqljdbc4</artifactId><version>4.0.0</version></dependency>
2.在yml文件中配置双数据源等信息
spring:datasource:database1:# --------------- Oracle -----------------#driver-class-name: oracle.jdbc.OracleDriverurl: jdbc:oracle:thin:@IP:端口:数据库username: xxxxpassword: xxxxdatabase2:# --------------- SQL Server -----------------#driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriverurl: jdbc:sqlserver://localhost:1433;DatabaseName=数据库username: xxxxpassword: xxxx#配置 Jpajpa:database: mysqlshow-sql: truehibernate:ddl-auto: updatenaming:physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpldatabase-platform: org.hibernate.dialect.MySQL5Dialect
3.配置config文件
3.1 创建DataSourceConfig文件
import com.zaxxer.hikari.HikariDataSource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;import javax.sql.DataSource;/*** 多数据源连接*/
@Configuration
@Slf4j
public class DataSourceConfig {@Autowiredprivate DataBase1Properties dataBase1Properties;@Autowiredprivate DataBase2Properties dataBase2Properties;@Bean(name = "dataBase1DataSource")@Primarypublic DataSource dataBase1DataSource(){log.info("dataBase1DataSource初始化开始");HikariDataSource dataSource = new HikariDataSource();dataSource.setJdbcUrl(dataBase1Properties.getUrl());dataSource.setUsername(dataBase1Properties.getUsername());dataSource.setPassword(dataBase1Properties.getPassword());dataSource.setDriverClassName(dataBase1Properties.getDriverClassName());log.info("dataBase1DataSource初始化成功");return dataSource;}@Bean(name = "dataBase2DataSource")public DataSource dataBase2DataSource(){log.info("dataBase2DataSource初始化开始");HikariDataSource dataSource = new HikariDataSource();dataSource.setJdbcUrl(dataBase2Properties.getUrl());dataSource.setUsername(dataBase2Properties.getUsername());dataSource.setPassword(dataBase2Properties.getPassword());dataSource.setDriverClassName(dataBase2Properties.getDriverClassName());log.info("dataBase2DataSource初始化成功");return dataSource;}
}
3.2创建DataBase1Config
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "entityManagerFactoryDataBase1", // 配置连接工厂transactionManagerRef = "transactionManagerDatabase1", // 配置事物管理器basePackages = {"com.dao.primary"} // 设置dao所在位置)
public class DataBase1Config {// 配置数据源@Autowiredprivate DataSource dataBase1DataSource;@Primary@Bean(name = "entityManagerFactoryDataBase1")public LocalContainerEntityManagerFactoryBean entityManagerFactoryDataBase1(EntityManagerFactoryBuilder builder) {return builder// 设置数据源.dataSource(dataBase1DataSource)//设置实体类所在位置.扫描所有带有 @Entity 注解的类.packages("com.domain.entity.primary")// Spring会将EntityManagerFactory注入到Repository之中.有了 EntityManagerFactory之后,// Repository就能用它来创建 EntityManager 了,然后 EntityManager 就可以针对数据库执行操作.persistenceUnit("database1PersistenceUnit").build();}/*** 配置事物管理器** @param builder* @return*/@Bean(name = "transactionManagerDatabase1")PlatformTransactionManager transactionManagerDatabase1(EntityManagerFactoryBuilder builder) {return new JpaTransactionManager(entityManagerFactoryDataBase1(builder).getObject());}
}
3.3创建DataBase2Config
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "entityManagerFactoryDataBase2", // 配置连接工厂transactionManagerRef = "transactionManagerDatabase2", // 配置事物管理器basePackages = {"com.dao.secondary"} // 设置dao所在位置)
public class DataBase2Config {// 配置数据源@Autowired@Qualifier("dataBase2DataSource")private DataSource dataBase2DataSource;@Bean(name = "entityManagerFactoryDataBase2")public LocalContainerEntityManagerFactoryBean entityManagerFactoryDataBase2(EntityManagerFactoryBuilder builder) {return builder// 设置数据源.dataSource(dataBase2DataSource)//设置实体类所在位置.扫描所有带有 @Entity 注解的类.packages("com.domain.entity.secondary")// Spring会将EntityManagerFactory注入到Repository之中.有了 EntityManagerFactory之后,// Repository就能用它来创建 EntityManager 了,然后 EntityManager 就可以针对数据库执行操作.persistenceUnit("database2PersistenceUnit").build();}/*** 配置事物管理器** @param builder* @return*/@Bean(name = "transactionManagerDatabase2")PlatformTransactionManager transactionManagerDatabase2(EntityManagerFactoryBuilder builder) {return new JpaTransactionManager(entityManagerFactoryDataBase2(builder).getObject());}
}
3.4创建DataBase1Properties
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@ConfigurationProperties(prefix = "spring.datasource.database1")
@Component
@Data
public class DataBase1Properties {private String url;private String username;private String password;private String driverClassName;
}
3.5创建DataBase2Properties
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@ConfigurationProperties(prefix = "spring.datasource.database2")
@Component
@Data
public class DataBase2Properties {private String url;private String username;private String password;private String driverClassName;
}
4.创建实体类(注意包名要跟DataBase1Config或DataBase2Config对应)
例如
package com.domain.entity.secondary;import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;@Data
@Entity
@Table(name="t_user")
public class TUser implements Serializable, Cloneable {@Id@Column(name = "id")private Integer id;@Column(name = "name")private String name;}
5.创建DAO类(注意包名要跟DataBase1Config或DataBase2Config对应)
例如
package com.dao.secondary;import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;@Repository
public class TUserDAO extends JpaRepository<TUser, Integer>{@Query(value = "select * from aa where c_empoid = :empId", nativeQuery = true)List<Map<String, Object>> get(String empId);}
重点需要注意的是要把两个数据源的代码做好区分,例如
数据源1的实体都放com.domain.entity.primary
数据源2的实体都放com.domain.entity.secondary
DAO层也是要做好区分
springboot+jpa配置多数据源(Oracle+SqlServer)相关推荐
- springboot jpa 配置多数据源
jpa 多数据源配置 多个 mysql 数据库配置 springboot jpa 配置多数据源其实也并不难,只需要在 properties 或者 yml中简单配置并在项目中引入配置即可. 下面以 ym ...
- SpringBoot JPA配置多数据源(同类型库)教程
SpringBoot项目配置多数据源主要分为以下个步骤: 确定好所连接的数据库的资源(包括url username password) 将两个库的信息写入到配置文件中(application.yaml ...
- 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配置多数据源(MySQL+SQLServer)
最近刚学习springboot,为了以后的开发需要故搭建双数据源配置,本文中使用了MySQL+SQLServer,若想在换成oracle数据库,直接在此数据配置的基础上进行再增加一个类似的配置,项目主 ...
- 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 ...
- SpringBoot整合Jpa配置多数据源
前言: 最近接手的SpringBoot项目,原项目数据存储在Oracle上,因后期新增功能考虑到数据量等问题,后期新加功能数据存放在Vertica上,项目中数据库这边主要是用Jpa去持久. 环境: S ...
最新文章
- [JavaScript] 探索JS中的函数秘密
- SQLSERVER2000同表数据复制(部分复制)
- for 循环迭代变量
- vector自动扩容如何实现_腾讯云ClickHouse如何实现自动化的数据均衡?
- Spring+MyBatis企业应用实战 - 笔记-简写词总结
- Clean Code 《代码整洁之道》前四章读书笔记
- Java SimpleDateFormat格式化时间不准确
- python中popitem_什么是python popitem函数?示例解析
- 对于相同Bean,在父应用上下文中定义的切面,在子应用上下文中会生效吗?
- Ubuntu安装ffmpeg教程
- Algorithm:数学建模大赛(CUMCM/NPMCM)之CUMCM之2006B之2006之B题《艾滋病疗法的评价及疗效的预测》
- Laravel框架简介与环境搭建
- Vue + JsBarcode 批量打印标签
- c++基础--另类的分支结构
- Java操作Excel表读取的数字变成科学计数法
- 动态指针时钟:利用pyqt5制作指针钟表显示实时时间
- 自用gnome桌面美化插件
- 如何优雅的整合定时批量任务(荣耀典藏版)
- PHP微信商户支付 - 企业付款到零钱功能(即提现)技术资料汇总
- 抖音xg8404 X-Gorgon算法 IOS苹果协议算法
热门文章
- java油画转换,java 图像特效之油画
- Andorid高仿淘宝商品详情滑动渐变标题栏
- Exynos_4412——IIC控制器和MPU6050
- 使用spring+html5实现安全传输随机数字密码键盘
- linux内网穿梭无法使用,教你在 Linux 下时光穿梭
- python用泰勒级数计算圆周率_用Python学微积分(4)---泰勒级数
- html语言面向对象,自学html5教程之JavaScript面向对象
- memset二维数组赋值问题
- 科普:自动驾驶预期功能安全(三)
- 图片异步加载之 Android-Universal-Image-Loader