Spring多个数据源配置详解

前言

在上篇文章讲到了如何配置单数据源,但是在实际场景中,会有需要配置多个数据源的场景,比如说,我们在支付系统中,单笔操作(包含查询、插入、新增)中需要操作主库,在批量查询或者对账单查询等对实时性要求不高的场景,需要使用读库来操作,依次来减轻数据库的压力。那么我们如何配置多数据源?

这里还是基于springboot应用的情况下,我们看一下怎么配置。

因为SpringBoot会实现自动配置,但是SpringBoot并不知道我们的业务场景分别要使用哪一个数据源,因此我们需要把相关的自动配置关闭。

首先,生成项目骨架,引入相应的依赖

  <dependency>
 		<groupId>org.springframework.boot</groupId>
 		<artifactId>spring-boot-starter-jdbc</artifactId>
 	</dependency>
 	<dependency>
 		<groupId>org.springframework.boot</groupId>
 		<artifactId>spring-boot-starter-actuator</artifactId>
 	</dependency>
 	<dependency>
 		<groupId>org.springframework.boot</groupId>
 		<artifactId>spring-boot-starter-web</artifactId>
 	</dependency>

 	<dependency>
 		<groupId>com.h2database</groupId>
 		<artifactId>h2</artifactId>
 		<scope>runtime</scope>
 	</dependency>
 	<dependency>
 		<groupId>org.projectlombok</groupId>
 		<artifactId>lombok</artifactId>
 		<optional>true</optional>
 	</dependency>
 	<dependency>
 		<groupId>org.springframework.boot</groupId>
 		<artifactId>spring-boot-starter-test</artifactId>
 		<scope>test</scope>
 	</dependency>
 	```
**然后,在Application排除自动装配类**   

```java
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class,DataSourceTransactionManagerAutoConfiguration.class,JdbcTemplateAutoConfiguration.class})
@Slf4j
public class MultiDataSourceDemoApplication {
}

上面代码中,我们排除了DataSourceAutoConfiguration、DataSourceTransactionManagerAutoConfiguration、JdbcTemplateAutoConfiguration三个类,然后就可以自己定义DataSource了。

配置数据源

//第一个数据源
	@Bean
	@ConfigurationProperties("first.datasource")
	public DataSource firstDataSource() {
		return DataSourceBuilder.create().build();
	}

	@Bean
	public JdbcTemplate firstJdbcTemplate() {
		return new JdbcTemplate(firstDataSource());
	}

	@Bean
	@Resource
	public PlatformTransactionManager firstTxManager(DataSource firstDataSource) {
		return new DataSourceTransactionManager(firstDataSource);
	}

	//第二个数据源
	@Bean
	@ConfigurationProperties("second.datasource")
	public DataSource secondDataSource() {
		return DataSourceBuilder.create().build();
	}

	@Bean
	public JdbcTemplate secondJdbcTemplate() {
		return new JdbcTemplate(secondDataSource());
	}

	@Bean
	@Resource
	public PlatformTransactionManager secondTxManager(DataSource secondDataSource) {
		return new DataSourceTransactionManager(secondDataSource);
	}

application.properties的配置项信息

management.endpoints.web.exposure.include=*
spring.output.ansi.enabled=ALWAYS

first.datasource.jdbc-url=jdbc:mysql://localhost:3306/first
first.datasource.username=root
first.datasource.password=xxx
second.datasource.jdbc-url=jdbc:mysql://localhost:3306/second
second.datasource.username=root
second.datasource.password=xxx

看一下表结构和数据

运行测试代码:

@Test
	public void testMutilDataSource(){
		firstJdbcTemplate.queryForList("SELECT * FROM test1")
				.forEach(row -> log.info("记录:"+row.toString()));

		secondJdbcTemplate.queryForList("SELECT * FROM test2")
				.forEach(row -> log.info("记录:"+row.toString()));
	}

我们看一下运行效果:

我们可以看到,两个数据源都初始化成功了,并且各自数据源执行的结果准确。

上面的方式没有集成Mybatis,使用的是jdbcTemplate,网络上还有很多配置方式,比如动态选择数据源,大同小异,不过笔者还是建议不同的业务单独指定数据源,容易维护。

我们已经演示了简单的单数据源和多数据源的配置方式,我们下一篇文章将讲一下,SpringBoot默认的连接池HikariCP。

到此这篇关于Spring多个数据源配置详解的文章就介绍到这了,更多相关Spring多数据源配置内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 如何在Java SpringBoot项目中配置动态数据源你知道吗

    目录 首先需要引入第三方依赖 只需要在配置文件中按照如下配置 创建如下两个数据库 entity mapper.xml mapper层 Service层 下面是两个测试方法 下面可以来看一下测试结果: 在我们工作中涉及到一些场景需要我们配置多数据源的操作,之前来说我们配置数据源需要写繁琐的配置类来配置我们的数据源,哪个是默认数据源等等,而现在我们可以使用"苞米豆"为我们提供的提供的第三方工具,只需要简单配置就可以实现多数据源之间的灵活切换了! 首先需要引入第三方依赖 <depend

  • 利用SpringBoot实现多数据源的两种方式总结

    目录 前言 基于dynamic-datasource实现多数据源 dynamic-datasource介绍 dynamic-datasource的相关约定 引入dynamic-datasource依赖 配置数据源 使用 @DS 切换数据源 基于AOP手动实现多数据源 项目工程结构 项目依赖 配置文件 自定义注解 编写DataSourceConstants 动态数据源名称上下文处理 获取当前动态数据源方法 动态数据源配置 AOP切面 编写TestUser实体 TestUserMapper Test

  • 方便快捷实现springboot 后端配置多个数据源、Mysql数据库

    目录 1)Test1DataSourceConfig.java 2)Test2DataSourceConfig.java 1.修改application.properties 新建 Mapper.实体类 相应的文件夹,将不同数据源的文件保存到对应的文件夹下 # test1 数据库的配置 test1.spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver test1.spring.datasource.jdbc-url=jdbc:m

  • Spring单数据源的配置详解

    目录 前言 一.生成项目骨架(SpringBoot),运行一个简单的程序 二.选择原生Spring方式配置数据源 前言 spring数据源的配置网络上有很多例子,这里我也来介绍一下单数据源配置的例子,基于SpringBoot的方式和原生的Spring的方式. 一.生成项目骨架(SpringBoot),运行一个简单的程序 访问:https://start.spring.io/ ,选择必要的依赖 下面我们先看下Application类的代码: @SpringBootApplication @Slf4

  • Spring Jpa多数据源工程配置过程解析

    工程创建 首先是创建一个Spring Boot工程,创建时添加基本的Web.Jpa以及MySQL依赖,如下: 创建完成后,添加Druid依赖,这里和前文的要求一样,要使用专为Spring Boot打造的Druid,大伙可能发现了,如果整合多数据源一定要使用这个依赖,因为这个依赖中才有DruidDataSourceBuilder,最后还要记得锁定数据库依赖的版本,因为可能大部分人用的还是5.x的MySQL而不是8.x.完整依赖如下: <dependency> <groupId>org

  • Java Spring详解如何配置数据源注解开发以及整合Junit

    目录 Spring数据源的配置 数据源(连接池)的作用 数据源的开发步骤 手动创建数据源 Spring注解开发 Spring原始注解 Spring新注解 Spring整合Junit Spring集成Junit步骤 Spring数据源的配置 数据源(连接池)的作用 数据源(连接池)是提高程序性能如出现的 事先实例化数据源,初始化部分连接资源 使用连接资源时从数据源中获取 使用完毕后将连接资源归还给数据源 常见的数据源(连接池):DBCP.C3PO.BoneCP.Druid等 数据源的开发步骤 1.

  • Spring多个数据源配置详解

    前言 在上篇文章讲到了如何配置单数据源,但是在实际场景中,会有需要配置多个数据源的场景,比如说,我们在支付系统中,单笔操作(包含查询.插入.新增)中需要操作主库,在批量查询或者对账单查询等对实时性要求不高的场景,需要使用读库来操作,依次来减轻数据库的压力.那么我们如何配置多数据源? 这里还是基于springboot应用的情况下,我们看一下怎么配置. 因为SpringBoot会实现自动配置,但是SpringBoot并不知道我们的业务场景分别要使用哪一个数据源,因此我们需要把相关的自动配置关闭. 首

  • Springboot集成mybatis实现多数据源配置详解流程

    新建springboot工程,引入web.mysql.mybatis依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</

  • Spring之WEB模块配置详解

    Spring框架七大模块简单介绍 Spring中MVC模块代码详解 Spring的WEB模块用于整合Web框架,例如Struts1.Struts2.JSF等 整合Struts1 继承方式 Spring框架提供了ActionSupport类支持Struts1的Action.继承了ActionSupport后就能获取Spring的BeanFactory,从而获得各种Spring容器内的各种资源 import org.springframework.web.struts.ActionSupport;

  • spring mybatis多数据源实例详解

    同一个项目有时会涉及到多个数据库,也就是多数据源.多数据源又可以分为两种情况: 1)两个或多个数据库没有相关性,各自独立,其实这种可以作为两个项目来开发.比如在游戏开发中一个数据库是平台数据库,其它还有平台下的游戏对应的数据库: 2)两个或多个数据库是master-slave的关系,比如有mysql搭建一个 master-master,其后又带有多个slave:或者采用MHA搭建的master-slave复制: 目前我所知道的 Spring 多数据源的搭建大概有两种方式,可以根据多数据源的情况进

  • spring  mybatis多数据源实例详解

    同一个项目有时会涉及到多个数据库,也就是多数据源.多数据源又可以分为两种情况: 1)两个或多个数据库没有相关性,各自独立,其实这种可以作为两个项目来开发.比如在游戏开发中一个数据库是平台数据库,其它还有平台下的游戏对应的数据库: 2)两个或多个数据库是master-slave的关系,比如有mysql搭建一个 master-master,其后又带有多个slave:或者采用MHA搭建的master-slave复制: 目前我所知道的 Spring 多数据源的搭建大概有两种方式,可以根据多数据源的情况进

  • spring基于通用Dao的多数据源配置详解

    有时候在一个项目中会连接多个数据库,需要在spring中配置多个数据源,最近就遇到了这个问题,由于我的项目之前是基于通用Dao的,配置的时候问题不断,这种方式和资源文件冲突:扫描映射文件的话,SqlSessionFactory的bean名字必须是sqlSessionFactory 他读不到sqlSessioNFactory2或者其他名字,最终解决方法如下: 1.在项目中加入如下类MultipleDataSource.java package com.etoak.util; import org.

  • spring boot整合CAS配置详解

    在下不才,以下是我花了好几天的时间才整合出来的在spring boot里面的CAS配置整合 为了帮助没搞定的人,毕竟自己踩了很多坑,一步一步爬过来的,有什么不足之处可以给建议  谢谢(小部分代码是整合他人的) 1.不多废话,直接上最重要的代码,以下代码整合cas的重要过程 import org.jasig.cas.client.authentication.AuthenticationFilter; import org.jasig.cas.client.session.SingleSignOu

  • spring MVC搭建及配置详解

    现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了.不过要想灵活运用Spring MVC来应对大多数的Web开发,就必须要掌握它的配置及原理. 一.Spring MVC环境搭建:(Spring 2.5.6 + Hibernate 3.2.0) 1. jar包引入 Spring 2.5.6:spring.jar.spring-webmvc.jar.comm

  • Spring Boot Redis 集成配置详解

    spring Boot 熟悉后,集成一个外部扩展是一件很容易的事,集成Redis也很简单,看下面步骤配置: 一.添加pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> </dependency> 二.创建 RedisClient.java 注意该类存放的pack

  • Spring Boot的Profile配置详解

    Profile 是Spring Boot用来针对不同的环境对不同的配置提供的支持,全局Profile配置使用application-{profile}.properties,如: application-dev.properties 可以表示为开发环境. 然后通过application.properties文件中的spring.profiles.active=dev来设置 在src/main/resources下面新建 application-dev.properties和application

随机推荐