Spring Boot学习(七)之Web应用使用jdbctemplate多数据源配置
2017-11-21 18:05
246 查看
上篇文章中说到单数据原连接访问,插入数据;但是往往随着业务量发展,我们通常会进行数据库拆分或是引入其他数据库,从而我们需要配置多个数据源,下面基于之前的JdbcTemplate和Spring-data-jpa例子分别介绍两种多数据源的配置方式。
先看pom文件引用的jar
多数据源配置
创建一个Spring配置类,定义两个DataSource用来读取application.properties中的不同配置。如下例子中,主数据源配置为spring.datasource.primary开头的配置,第二数据源配置为spring.datasource.secondary开头的配置。
对应的application.properties配置如下:
接下来通过测试用例来演示如何使用这两个针对不同数据源的JdbcTemplate:
运行截图:
先看pom文件引用的jar
<?xmlversion="1.0"encoding="UTF-8"?> <projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0>'target='_blank'>http://maven.apache.org/xsd/maven-4.0.0.xsd" ><modelVersion>4.0.0</modelVersion> <groupId>com.xiaojingg</groupId> <artifactId>springbootstudy-demo7-jdbctemplate-more</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>springbootstudy-demo7-jdbctemplate-more</name> <description>DemoprojectforSpringBoot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.8.RELEASE</version> <relativePath/><!--lookupparentfromrepository--> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.21</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
多数据源配置
创建一个Spring配置类,定义两个DataSource用来读取application.properties中的不同配置。如下例子中,主数据源配置为spring.datasource.primary开头的配置,第二数据源配置为spring.datasource.secondary开头的配置。
01 | package com.xiaojingg; |
02 |
03 | import org.springframework.beans.factory.annotation.Qualifier; |
04 | import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; |
05 | import org.springframework.boot.context.properties.ConfigurationProperties; |
06 | import org.springframework.context.annotation.Bean; |
07 | import org.springframework.context.annotation.Configuration; |
08 | import org.springframework.context.annotation.Primary; |
09 | import org.springframework.jdbc.core.JdbcTemplate; |
10 |
11 | import javax.sql.DataSource; |
12 |
13 | /** |
14 | * 筱进GG |
15 | */ |
16 | @Configuration |
17 | public class DataSourceConfig { |
18 |
19 | @Bean (name "primaryDataSource" ) |
20 | @Qualifier ( "primaryDataSource" ) |
21 | @ConfigurationProperties (prefix= "spring.datasource.primary" ) |
22 | public DataSource |
23 | return DataSourceBuilder.create().build(); |
24 | } |
25 |
26 | @Bean (name "secondaryDataSource" ) |
27 | @Qualifier ( "secondaryDataSource" ) |
28 | @Primary |
29 | @ConfigurationProperties (prefix= "spring.datasource.secondary" ) |
30 | public DataSource |
31 | return DataSourceBuilder.create().build(); |
32 | } |
33 |
34 | @Bean (name "primaryJdbcTemplate" ) |
35 | public JdbcTemplate primaryJdbcTemplate( |
36 | @Qualifier ( "primaryDataSource" ) |
37 | return new JdbcTemplate(dataSource); |
38 | } |
39 |
40 | @Bean (name "secondaryJdbcTemplate" ) |
41 | public JdbcTemplate secondaryJdbcTemplate( |
42 | @Qualifier ( "secondaryDataSource" ) |
43 | return new JdbcTemplate(dataSource); |
44 | } |
45 |
46 | } |
spring.datasource.primary.url=jdbc:mysql://localhost:3306/test1 spring.datasource.primary.username=root spring.datasource.primary.password=root spring.datasource.primary.driver-class-name=com.mysql.jdbc.Driver spring.datasource.secondary.url=jdbc:mysql://localhost:3306/test2 spring.datasource.secondary.username=root spring.datasource.secondary.password=root spring.datasource.secondary.driver-class-name=com.mysql.jdbc.Driver
接下来通过测试用例来演示如何使用这两个针对不同数据源的JdbcTemplate:
packagecom.xiaojingg;
importorg.junit.Assert;
importorg.junit.Before;
importorg.junit.Test;
importorg.junit.runner.RunWith;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.beans.factory.annotation.Qualifier;
importorg.springframework.boot.test.context.SpringBootTest;
importorg.springframework.jdbc.core.JdbcTemplate;
importorg.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
publicclassSpringbootstudyDemo7JdbctemplateMoreApplicationTests{
@Autowired
@Qualifier("primaryJdbcTemplate")
protectedJdbcTemplatejdbcTemplate1;
@Autowired
@Qualifier("secondaryJdbcTemplate")
protectedJdbcTemplatejdbcTemplate2;
@Before
publicvoidsetUp(){
jdbcTemplate1.update("DELETEFROMUSER");
jdbcTemplate2.update("DELETEFROMUSER");
}
@Test
publicvoidtest()throwsException{
//往第一个数据源中插入两条数据
jdbcTemplate1.update("insertintouser(id,name,age)values(?,?,?)",1,"aaa",20);
jdbcTemplate1.update("insertintouser(id,name,age)values(?,?,?)",2,"bbb",30);
//往第二个数据源中插入一条数据,若插入的是第一个数据源,则会主键冲突报错
jdbcTemplate2.update("insertintouser(id,name,age)values(?,?,?)",1,"aaa",20);
//查一下第一个数据源中是否有两条数据,验证插入是否成功
Assert.assertEquals("2",jdbcTemplate1.queryForObject("selectcount(1)fromuser",String.class));
//查一下第一个数据源中是否有两条数据,验证插入是否成功
Assert.assertEquals("1",jdbcTemplate2.queryForObject("selectcount(1)fromuser",String.class));
}
}
运行截图:
相关文章推荐
- SpringBoot进阶学习一(Web进阶)
- springboot 学习之路 15(集成shiro)
- springboot学习资料
- 深入学习微框架:Spring Boot
- Spring Boot 学习笔记【6】使用FreeMarker与BootStrap开发Web
- Spring Boot 学习(一)感慨
- 廖师兄springboot学习笔记二(增加IDEA单模块jsp和多模块jsp引入)
- Spring Boot学习第三篇:Spring Boot整合Mybatis、和其他
- SpringBoot+Shiro学习之数据库动态权限管理和Redis缓存
- Spring Boot 基础知识学习(一)——快速入门
- Spring Boot和Spring Cloud架构学习(一)--Spring介绍
- Spring Boot学习--使用本地/第三方jar
- 基于Springboot的Spring AOP学习记录
- spring boot学习笔记1-aop
- SpringBoot学习:IDEA中快速搭建springboot项目
- [spring学习] 之 spring-boot 默认配置
- SpringBoot学习笔记之mybatis分页插件集成
- spring boot 入门学习
- spring boot 学习--08---搭建ssmm-02
- BabyLog SpringBoot+MyBatis+Thymeleaf+Amaze UI 整合学习