• springboot+jpa配置多数据源(Oracle+SqlServer)


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

    springboot+jpa的整合需要自行准备好

    1.maven中要导入Oracle和SqlServer的jar包

    1. org.springframework.boot
    2. spring-boot-starter-data-jdbc
    3. org.springframework.boot
    4. spring-boot-starter-data-jpa
    5. com.oracle
    6. ojdbc6
    7. 11.2.0.3
    8. system
    9. ${xxx}/src/main/webapp/WEB-INF/lib/ojdbc6-11.2.0.3.jar
    10. com.oracle
    11. ojdbc6
    12. 11.1.0.7.0
    13. system
    14. ${xxx}/src/main/webapp/WEB-INF/lib/ojdbc6.jar
    15. com.oracle
    16. ojdbc5
    17. 11.1.0.7.0
    18. system
    19. ${xxx}/src/main/webapp/WEB-INF/lib/ojdbc5.jar
    20. com.microsoft.sqlserver
    21. sqljdbc4
    22. 4.0.0

    2.在yml文件中配置双数据源等信息

    1. spring:
    2. datasource:
    3. database1:
    4. # --------------- Oracle -----------------#
    5. driver-class-name: oracle.jdbc.OracleDriver
    6. url: jdbc:oracle:thin:@IP:端口:数据库
    7. username: xxxx
    8. password: xxxx
    9. database2:
    10. # --------------- SQL Server -----------------#
    11. driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    12. url: jdbc:sqlserver://localhost:1433;DatabaseName=数据库
    13. username: xxxx
    14. password: xxxx
    15. #配置 Jpa
    16. jpa:
    17. database: mysql
    18. show-sql: true
    19. hibernate:
    20. ddl-auto: update
    21. naming:
    22. physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
    23. database-platform: org.hibernate.dialect.MySQL5Dialect

    3.配置config文件

    3.1 创建DataSourceConfig文件

    1. import com.zaxxer.hikari.HikariDataSource;
    2. import lombok.extern.slf4j.Slf4j;
    3. import org.springframework.beans.factory.annotation.Autowired;
    4. import org.springframework.context.annotation.Bean;
    5. import org.springframework.context.annotation.Configuration;
    6. import org.springframework.context.annotation.Primary;
    7. import javax.sql.DataSource;
    8. /**
    9. * 多数据源连接
    10. */
    11. @Configuration
    12. @Slf4j
    13. public class DataSourceConfig {
    14. @Autowired
    15. private DataBase1Properties dataBase1Properties;
    16. @Autowired
    17. private DataBase2Properties dataBase2Properties;
    18. @Bean(name = "dataBase1DataSource")
    19. @Primary
    20. public DataSource dataBase1DataSource(){
    21. log.info("dataBase1DataSource初始化开始");
    22. HikariDataSource dataSource = new HikariDataSource();
    23. dataSource.setJdbcUrl(dataBase1Properties.getUrl());
    24. dataSource.setUsername(dataBase1Properties.getUsername());
    25. dataSource.setPassword(dataBase1Properties.getPassword());
    26. dataSource.setDriverClassName(dataBase1Properties.getDriverClassName());
    27. log.info("dataBase1DataSource初始化成功");
    28. return dataSource;
    29. }
    30. @Bean(name = "dataBase2DataSource")
    31. public DataSource dataBase2DataSource(){
    32. log.info("dataBase2DataSource初始化开始");
    33. HikariDataSource dataSource = new HikariDataSource();
    34. dataSource.setJdbcUrl(dataBase2Properties.getUrl());
    35. dataSource.setUsername(dataBase2Properties.getUsername());
    36. dataSource.setPassword(dataBase2Properties.getPassword());
    37. dataSource.setDriverClassName(dataBase2Properties.getDriverClassName());
    38. log.info("dataBase2DataSource初始化成功");
    39. return dataSource;
    40. }
    41. }

    3.2创建DataBase1Config

    1. import org.springframework.beans.factory.annotation.Autowired;
    2. import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
    3. import org.springframework.context.annotation.Bean;
    4. import org.springframework.context.annotation.Configuration;
    5. import org.springframework.context.annotation.Primary;
    6. import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
    7. import org.springframework.orm.jpa.JpaTransactionManager;
    8. import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
    9. import org.springframework.transaction.PlatformTransactionManager;
    10. import org.springframework.transaction.annotation.EnableTransactionManagement;
    11. import javax.sql.DataSource;
    12. @Configuration
    13. @EnableTransactionManagement
    14. @EnableJpaRepositories(
    15. entityManagerFactoryRef = "entityManagerFactoryDataBase1", // 配置连接工厂
    16. transactionManagerRef = "transactionManagerDatabase1", // 配置事物管理器
    17. basePackages = {"com.dao.primary"} // 设置dao所在位置
    18. )
    19. public class DataBase1Config {
    20. // 配置数据源
    21. @Autowired
    22. private DataSource dataBase1DataSource;
    23. @Primary
    24. @Bean(name = "entityManagerFactoryDataBase1")
    25. public LocalContainerEntityManagerFactoryBean entityManagerFactoryDataBase1(EntityManagerFactoryBuilder builder) {
    26. return builder
    27. // 设置数据源
    28. .dataSource(dataBase1DataSource)
    29. //设置实体类所在位置.扫描所有带有 @Entity 注解的类
    30. .packages("com.domain.entity.primary")
    31. // Spring会将EntityManagerFactory注入到Repository之中.有了 EntityManagerFactory之后,
    32. // Repository就能用它来创建 EntityManager 了,然后 EntityManager 就可以针对数据库执行操作
    33. .persistenceUnit("database1PersistenceUnit")
    34. .build();
    35. }
    36. /**
    37. * 配置事物管理器
    38. *
    39. * @param builder
    40. * @return
    41. */
    42. @Bean(name = "transactionManagerDatabase1")
    43. PlatformTransactionManager transactionManagerDatabase1(EntityManagerFactoryBuilder builder) {
    44. return new JpaTransactionManager(entityManagerFactoryDataBase1(builder).getObject());
    45. }
    46. }

    3.3创建DataBase2Config

    1. import org.springframework.beans.factory.annotation.Autowired;
    2. import org.springframework.beans.factory.annotation.Qualifier;
    3. import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
    4. import org.springframework.context.annotation.Bean;
    5. import org.springframework.context.annotation.Configuration;
    6. import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
    7. import org.springframework.orm.jpa.JpaTransactionManager;
    8. import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
    9. import org.springframework.transaction.PlatformTransactionManager;
    10. import org.springframework.transaction.annotation.EnableTransactionManagement;
    11. import javax.sql.DataSource;
    12. @Configuration
    13. @EnableTransactionManagement
    14. @EnableJpaRepositories(
    15. entityManagerFactoryRef = "entityManagerFactoryDataBase2", // 配置连接工厂
    16. transactionManagerRef = "transactionManagerDatabase2", // 配置事物管理器
    17. basePackages = {"com.dao.secondary"} // 设置dao所在位置
    18. )
    19. public class DataBase2Config {
    20. // 配置数据源
    21. @Autowired
    22. @Qualifier("dataBase2DataSource")
    23. private DataSource dataBase2DataSource;
    24. @Bean(name = "entityManagerFactoryDataBase2")
    25. public LocalContainerEntityManagerFactoryBean entityManagerFactoryDataBase2(EntityManagerFactoryBuilder builder) {
    26. return builder
    27. // 设置数据源
    28. .dataSource(dataBase2DataSource)
    29. //设置实体类所在位置.扫描所有带有 @Entity 注解的类
    30. .packages("com.domain.entity.secondary")
    31. // Spring会将EntityManagerFactory注入到Repository之中.有了 EntityManagerFactory之后,
    32. // Repository就能用它来创建 EntityManager 了,然后 EntityManager 就可以针对数据库执行操作
    33. .persistenceUnit("database2PersistenceUnit")
    34. .build();
    35. }
    36. /**
    37. * 配置事物管理器
    38. *
    39. * @param builder
    40. * @return
    41. */
    42. @Bean(name = "transactionManagerDatabase2")
    43. PlatformTransactionManager transactionManagerDatabase2(EntityManagerFactoryBuilder builder) {
    44. return new JpaTransactionManager(entityManagerFactoryDataBase2(builder).getObject());
    45. }
    46. }

    3.4创建DataBase1Properties

    1. import lombok.Data;
    2. import org.springframework.boot.context.properties.ConfigurationProperties;
    3. import org.springframework.stereotype.Component;
    4. @ConfigurationProperties(prefix = "spring.datasource.database1")
    5. @Component
    6. @Data
    7. public class DataBase1Properties {
    8. private String url;
    9. private String username;
    10. private String password;
    11. private String driverClassName;
    12. }

    3.5创建DataBase2Properties

    1. import lombok.Data;
    2. import org.springframework.boot.context.properties.ConfigurationProperties;
    3. import org.springframework.stereotype.Component;
    4. @ConfigurationProperties(prefix = "spring.datasource.database2")
    5. @Component
    6. @Data
    7. public class DataBase2Properties {
    8. private String url;
    9. private String username;
    10. private String password;
    11. private String driverClassName;
    12. }

    4.创建实体类(注意包名要跟DataBase1Config或DataBase2Config对应)

    例如

    1. package com.domain.entity.secondary;
    2. import lombok.Data;
    3. import javax.persistence.Column;
    4. import javax.persistence.Entity;
    5. import javax.persistence.Id;
    6. import javax.persistence.Table;
    7. import java.io.Serializable;
    8. @Data
    9. @Entity
    10. @Table(name="t_user")
    11. public class TUser implements Serializable, Cloneable {
    12. @Id
    13. @Column(name = "id")
    14. private Integer id;
    15. @Column(name = "name")
    16. private String name;
    17. }

    5.创建DAO类(注意包名要跟DataBase1Config或DataBase2Config对应)

    例如

    1. package com.dao.secondary;
    2. import org.springframework.data.jpa.repository.JpaRepository;
    3. import org.springframework.stereotype.Repository;
    4. import java.util.List;
    5. @Repository
    6. public class TUserDAO extends JpaRepository{
    7. @Query(value = "select * from aa where c_empoid = :empId", nativeQuery = true)
    8. List> get(String empId);
    9. }

    重点需要注意的是要把两个数据源的代码做好区分,例如

    数据源1的实体都放com.domain.entity.primary

    数据源2的实体都放com.domain.entity.secondary

    DAO层也是要做好区分

  • 相关阅读:
    Mysql SQL优化跟踪来看看是如何优化并决策使用哪个索引或者不适用索引
    HTML期末作业——基于html实现娱乐音乐资讯发布平台HTML模板(22页面)
    将 nginx 安装为 Windows 服务
    Android webview加载网页实时调试
    MySQL的MVCC多版本并发控制
    【数据库】将excel数据导入mysql数据库
    Java -基础知识之类的初始化顺序
    java计算机毕业设计网上宠物售卖平台源码+系统+mysql数据库+LW文档+部署文件
    阿里云主要产品有哪些?有什么用?
    在 Ubuntu 22 的基础上进行 Hadoop 伪分布式(HDFS)的搭建
  • 原文地址:https://blog.csdn.net/Amy_Victoria/article/details/126968958