龙空技术网

Spring系列之多个数据源配置

充满元气的java爱好者 594

前言:

眼前朋友们对“spring 数据源配置”大约比较珍视,咱们都想要学习一些“spring 数据源配置”的相关内容。那么小编也在网摘上网罗了一些关于“spring 数据源配置””的相关文章,希望大家能喜欢,小伙伴们快快来了解一下吧!

前言#

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

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

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

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

Copy Line-numbers language-xml  <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})@Slf4jpublic class MultiDataSourceDemoApplication {}

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

配置数据源

Copy Line-numbers language-java	//第一个数据源	@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的配置项信息

Copy Line-numbers language-xmlmanagement.endpoints.web.exposure.include=*spring.output.ansi.enabled=ALWAYSfirst.datasource.jdbc-url=jdbc:mysql://localhost:3306/firstfirst.datasource.username=rootfirst.datasource.password=xxxsecond.datasource.jdbc-url=jdbc:mysql://localhost:3306/secondsecond.datasource.username=rootsecond.datasource.password=xxx

看一下表结构和数据

运行测试代码:

Copy Line-numbers language-java	@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()));	}

我们看一下运行效果:

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

原文链接:

标签: #spring 数据源配置 #spring数据源配置 #spring配置数据源的几种方式