本贴主要讲解配置多数据源

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)相关推荐

  1. springboot jpa 配置多数据源

    jpa 多数据源配置 多个 mysql 数据库配置 springboot jpa 配置多数据源其实也并不难,只需要在 properties 或者 yml中简单配置并在项目中引入配置即可. 下面以 ym ...

  2. SpringBoot JPA配置多数据源(同类型库)教程

    SpringBoot项目配置多数据源主要分为以下个步骤: 确定好所连接的数据库的资源(包括url username password) 将两个库的信息写入到配置文件中(application.yaml ...

  3. springboot jpa 配置多数据源报错解决 Consider defining a bean named ‘entityManagerFactory‘

    版本 springboot 2.6.x 现象 jpa配置多数据源后启动报错 Consider defining a bean named 'entityManagerFactory' 解决 方法1:将 ...

  4. springboot + JPA 配置双数据源

    一.首先配置application.yml文件设置主从数据库 spring:servlet:multipart:max-file-size: 20MBmax-request-size: 20MBpro ...

  5. SpringBoot配置多数据源(MySQL+SQLServer)

    最近刚学习springboot,为了以后的开发需要故搭建双数据源配置,本文中使用了MySQL+SQLServer,若想在换成oracle数据库,直接在此数据配置的基础上进行再增加一个类似的配置,项目主 ...

  6. SpringBoot+ElasticSearch7.x+JPA配置多数据源

    SpringBoot+ElasticSearch7.x+JPA配置多数据源 这里分为测试环境配置和正式环境配置,大体相差无几 ESTestConfig 1 @Configuration2 @Confi ...

  7. springboot+jpa+mybatis 多数据源支持

    springboot+jpa+mybatis 多数据源支持 配置dataSource import org.springframework.beans.factory.annotation.Quali ...

  8. SpringBoot JPA 配置多个数据库

    SpringBoot JPA 配置多个数据库 一.application.yml : 二.创建一个SpringBoot配置类 三.primary数据源的JPA配置 四.secondary数据源的JPA ...

  9. SpringBoot整合Jpa配置多数据源

    前言: 最近接手的SpringBoot项目,原项目数据存储在Oracle上,因后期新增功能考虑到数据量等问题,后期新加功能数据存放在Vertica上,项目中数据库这边主要是用Jpa去持久. 环境: S ...

最新文章

  1. [JavaScript] 探索JS中的函数秘密
  2. SQLSERVER2000同表数据复制(部分复制)
  3. for 循环迭代变量
  4. vector自动扩容如何实现_腾讯云ClickHouse如何实现自动化的数据均衡?
  5. Spring+MyBatis企业应用实战 - 笔记-简写词总结
  6. Clean Code 《代码整洁之道》前四章读书笔记
  7. Java SimpleDateFormat格式化时间不准确
  8. python中popitem_什么是python popitem函数?示例解析
  9. 对于相同Bean,在父应用上下文中定义的切面,在子应用上下文中会生效吗?
  10. Ubuntu安装ffmpeg教程
  11. Algorithm:数学建模大赛(CUMCM/NPMCM)之CUMCM之2006B之2006之B题《艾滋病疗法的评价及疗效的预测》
  12. Laravel框架简介与环境搭建
  13. Vue + JsBarcode 批量打印标签
  14. c++基础--另类的分支结构
  15. Java操作Excel表读取的数字变成科学计数法
  16. 动态指针时钟:利用pyqt5制作指针钟表显示实时时间
  17. 自用gnome桌面美化插件
  18. 如何优雅的整合定时批量任务(荣耀典藏版)
  19. PHP微信商户支付 - 企业付款到零钱功能(即提现)技术资料汇总
  20. 抖音xg8404 X-Gorgon算法 IOS苹果协议算法

热门文章

  1. java油画转换,java 图像特效之油画
  2. Andorid高仿淘宝商品详情滑动渐变标题栏
  3. Exynos_4412——IIC控制器和MPU6050
  4. 使用spring+html5实现安全传输随机数字密码键盘
  5. linux内网穿梭无法使用,教你在 Linux 下时光穿梭
  6. python用泰勒级数计算圆周率_用Python学微积分(4)---泰勒级数
  7. html语言面向对象,自学html5教程之JavaScript面向对象
  8. memset二维数组赋值问题
  9. 科普:自动驾驶预期功能安全(三)
  10. 图片异步加载之 Android-Universal-Image-Loader