Spring JdbcTemplate JpaRepository 数据库配置多个数据源连接、查询

本文主要是介绍Spring JdbcTemplate JpaRepository 数据库配置多个数据源连接、查询,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  所谓多数据源,就是一个项目中采用了不同数据库实例中的多个库,或者同一个数据库实例中多个不同的库。比如实现数据库读写分离、分库分表、备份等操作。
  JdbcTemplate多数据源的配置是比较简单的,因为一个JdbcTemplate对应一个DataSource,开发者只需要手动提供多个DataSource,再手动配置JdbcTemplate即可。
  JPA多数据源的配置需要指定对应的Entity实体和Repository定义的位置,用@Primary来区分主数据源。

一、配置yml文件

server:port: 8080
spring:profiles:active: devjackson:time-zone: GMT+8  # 这里是我们的数据库配置地方    
datasource:first:  #这里是数据库一driverClassName: com.mysql.cj.jdbc.Driverurl: jdbc:sqlserver://localhost:1433;DatabaseName=name1username: ***password: ***type: com.alibaba.druid.pool.DruidDataSourcesecond:  #这里是数据库二driverClassName: com.mysql.cj.jdbc.Driverurl: jdbc:sqlserver://localhost:1433;DatabaseName=name2username: ***password: ***type: com.alibaba.druid.pool.DruidDataSource

二、创建数据源配置类 DatasourceConfig .class

定义两个DataSource来读取application.yml中的不同配置。

@Configuration
public class DataSourceConfig {@Primary //标记一个主数据库@Bean(name = "firstDataSource")@Qualifier("firstDataSource")@ConfigurationProperties(prefix = "spring.datasource.first")public DataSource firstDataSource() {return DataSourceBuilder.create().build();}@Bean(name = "secondDataSource")@Qualifier("secondDataSource")@ConfigurationProperties(prefix="spring.datasource.second")public DataSource secondDataSource() {return DataSourceBuilder.create().build();}}

三、配置 JdbcTemplate Config 或JPA Config

1. 配置 JdbcTemplateConfig

(1)项目只要引入了 spring-jdbc 依赖,如果开发者没有提供 JdbcTemplate 实例时,Spring Boot 默认会提供一个 JdbcTemplate 实例。
(2)如果配置多数据源时,由开发者自己提供 JdbcTemplate 实例,代码如下:

JdbcTemplateConfig .class

@Configuration
public class JdbcTemplateConfig {@Primary@Bean("firstJdbcTemplate")public JdbcTemplate firstJdbcTemplate(@Qualifier("firstDataSource")DataSource dataSource){return new JdbcTemplate(dataSource);}@Bean("secondJdbcTemplate")public JdbcTemplate secondJdbcTemplate(@Qualifier("secondDataSource")DataSource dataSource){return new JdbcTemplate(dataSource);}
}
2. 配置 JPA Config

  JPA指定数据源需要指定对应的Entity实体和Repository定义的位置,用@Primary来区分主数据源。

(1)first数据源的JPA配置 (FirstDataBaseConfig.class

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(// 配置连接工厂entityManagerFactoryRef = "firstFactory",// 配置事物管理器transactionManagerRef = "firstTransaction",// 设置Jpa first数据源的 repository所在位置basePackages = {"com.xx.xx.xx.**.repository"}
)public class FirstDataBaseConfig {@Autowired@Qualifier("firstDataSource")private DataSource firstDataSource;@Autowiredprivate JpaProperties jpaProperties;@Autowiredprivate HibernateProperties properties;// 以下是jpa的配置/*** 连接工厂* @param builder 创建工具* @return 结果*/@Bean(name = "firstFactory")public LocalContainerEntityManagerFactoryBean firstFactory(EntityManagerFactoryBuilder builder) {return builder// 设置数据源.dataSource(firstDataSource)//设置实体类所在位置.扫描所有带有 @Entity 注解的类.packages("xx.xx.xx.first.**.entity")// Spring会将EntityManagerFactory注入到Repository之中.有了 EntityManagerFactory之后,// Repository就能用它来创建 EntityManager 了,然后 EntityManager 就可以针对数据库执行操作.persistenceUnit("first")// 为了加载yml中jpa下hibernate的相关配置.properties(properties.determineHibernateProperties(jpaProperties.getProperties(), new HibernateSettings())).build();}/*** 配置事物管理器** @param builder 创建工具* @return 结果*/@Bean(name = "firstTransaction")PlatformTransactionManager firstTransaction(EntityManagerFactoryBuilder builder) {return new JpaTransactionManager(Objects.requireNonNull(firstFactory(builder).getObject()));}

(2)second数据源的JPA配置( SecondDataBaseConfig.class

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(// 配置连接工厂entityManagerFactoryRef = "secondFactory",// 配置事物管理器transactionManagerRef = "secondTransaction",// 设置Jpa second数据源的 repository所在位置basePackages = {"com.xx.xx.xx.**.repository"}
)public class SecondDataBaseConfig {@Autowired@Qualifier("secondDataSource")private DataSource secondDataSource;@Autowiredprivate JpaProperties jpaProperties;@Autowiredprivate HibernateProperties properties;// 以下是jpa的配置/*** 连接工厂* @param builder 创建工具* @return 结果*/@Bean(name = "secondFactory")public LocalContainerEntityManagerFactoryBean secondFactory(EntityManagerFactoryBuilder builder) {return builder// 设置数据源.dataSource(secondDataSource)//设置实体类所在位置.扫描所有带有 @Entity 注解的类.packages("xx.xx.xx.second.**.entity")// Spring会将EntityManagerFactory注入到Repository之中.有了 EntityManagerFactory之后,// Repository就能用它来创建 EntityManager 了,然后 EntityManager 就可以针对数据库执行操作.persistenceUnit("second")// 为了加载yml中jpa下hibernate的相关配置.properties(properties.determineHibernateProperties(jpaProperties.getProperties(), new HibernateSettings())).build();}/*** 配置事物管理器** @param builder 创建工具* @return 结果*/@Bean(name = "secondTransaction")PlatformTransactionManager secondTransaction(EntityManagerFactoryBuilder builder) {return new JpaTransactionManager(Objects.requireNonNull(secondFactory(builder).getObject()));}

四、实例化使用

(1)JdbcTemplate实例化

@RestController
public class Controller {@Resource(name = "firstJdbcTemplate")private JdbcTemplate firstJdbcTemplate;@Resource(name = "secondJdbcTemplate")private JdbcTemplate secondJdbcTemplate;@PostMapping("/testSave")public String test(){// SQL查询数据库1String SQL1 = "SELECT * FROM dataBaseName1";List<> list1 = firstJdbcTemplate.queryForList(SQL1);// SQL查询数据库2String SQL2 = "SELECT * FROM dataBaseName2";List<> list2 = secondJdbcTemplate.queryForList(SQL2);}
}

(2)JPA只需要将不同数据源的Entity实体和Repository定义放到对应的位置,直接使用。

这篇关于Spring JdbcTemplate JpaRepository 数据库配置多个数据源连接、查询的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/784798

相关文章

Spring boot整合dubbo+zookeeper的详细过程

《Springboot整合dubbo+zookeeper的详细过程》本文讲解SpringBoot整合Dubbo与Zookeeper实现API、Provider、Consumer模式,包含依赖配置、... 目录Spring boot整合dubbo+zookeeper1.创建父工程2.父工程引入依赖3.创建ap

SQL server数据库如何下载和安装

《SQLserver数据库如何下载和安装》本文指导如何下载安装SQLServer2022评估版及SSMS工具,涵盖安装配置、连接字符串设置、C#连接数据库方法和安全注意事项,如混合验证、参数化查... 目录第一步:打开官网下载对应文件第二步:程序安装配置第三部:安装工具SQL Server Manageme

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu