SprinBoot 系列文章:
Spring Boot入门之Hello Spring Boot
SpringBoot 配置多个JdbcTemplate
SpringBoot 整合Mybatis
CAS统一登录认证(3): CAS 客户端接入实践
SpringBoot 整合Mail实现邮件发送
数据库连接池优化配置(druid,dbcp,c3p0)
SpringBoot+SpringSecurity+mysql实现认证与授
SpringBoot+Spring Security基于内存用户认证
SpringBoot+WebSocket在线聊天室、消息推送
SpringBoot+SpringData JPA操作Mysql数据库
SpringBoot热部署值devtools配置
Spring Boot 资源文件属性配置
Spring Boot Server等内容的配置
Spring Boot + FreeMarker模板
SpringBoot+thymeleaf模板
SpringBoot +JDBC连接Mysql数据库
Zipkin分布式任务追踪
SpringBoot应用部署到外置Tomcat
Spring Boot + Swagger2 自动生成api接口文档
SpringBoot整合Shiro安全框架
SpringBoot+CAS Client 实现单点登录
SpringBoot 整合MyBatis-Plus
SpringBoot + validation 接口参数校验
Springboot+Redis 实现API接口防刷限流
ShardingSphere-ShardingJdbc 数据分片(分库、分表)
ShardingSphere-ShardingJdbc 读写分离
ShardingSphere-ShardingJdbc 数据脱敏
springboot+sms 集成腾讯云短信平台
SpringBoot+RabbitMQ 实现消息队列
快速从零搭建一个SpringBoot Web项目
从零快速搭建一个SpringBoot Web项目
SpringBoot+ElasticSearch 实现全文检索
访问ElasticSearch的几种方式
SpringBoot + Activiti 工作流引擎(一、基本概念与环境搭建)
SpringBoot + Activiti 工作流引擎(二、流程&任务操作)
SpringBoot 定时任务 实现方式
SpringBoot + EhCache实现本地缓存
SpringBoot + Redis 实现分布式缓存
SpringBoot 配置多个JdbcTemplate
前言
开发中使用多数据源配置是一个非常常见的需求。Spring和SpringBoot中,对此都有相应的解决方案。
多数据源的首选分布式数据库中间件MyCat或者Sharing-Jdbc去解决相关问题。使用MyCat,然后分表策略使用sharding-by-intfile。
本文我们只讨论如何在SpringBoot中简单配置多个JdbcTemplate。
一、创建一个SpringBoot 项目,并引入如下依赖
<!--web应用-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--jdbc -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
</dependency>
<!--单元测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
二、在application.properties中添加数据源配置
spring.datasource.one.url=jdbc:mysql://localhost:3306/oy1?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.one.jdbcUrl=jdbc:mysql://localhost:3306/oy1?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.one.username=***
spring.datasource.one.password=***
spring.datasource.one.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.two.url=jdbc:mysql://localhost:3306/oy2?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.two.jdbcUrl=jdbc:mysql://localhost:3306/oy2?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.two.username=***
spring.datasource.two.password=***
spring.datasource.two.driver-class-name=com.mysql.cj.jdbc.Driver
三、新增DadaSourceConfig.java配置多个数据源以及JdbcTemplate,代码如下:
package com.bestoyc.jdbctemplatedemo;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
/**
* @author oyc
* @Title: DataSourceConfig
* @ProjectName jdbctemplatedemo
* @Description: TODO
* @date 2019/9/22 0:47
*/
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.one")
@Qualifier("oneDataSource")
DataSource dsOne() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.two")
@Qualifier("twoDataSource")
DataSource dsTwo() {
return DataSourceBuilder.create().build();
}
@Bean(name = "oneJdbcTemplate")
public JdbcTemplate primaryJdbcTemplate(
@Qualifier("oneDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
@Bean(name = "twoJdbcTemplate")
public JdbcTemplate secondaryJdbcTemplate(
@Qualifier("twoDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
四、多个JdbcTemplate使用
@Autowired
@Qualifier("oneJdbcTemplate")
private JdbcTemplate oneJdbcTemplate;
@Autowired
@Qualifier("twoJdbcTemplate")
private JdbcTemplate twoJdbcTemplate;
@RequestMapping("/createUser1")
public String createUser1() {
oneJdbcTemplate.update("INSERT INTO `user`(`id`, `name`, `age`) VALUES (?,?,?);", null,"ouyang", 12);
return "success";
}
@RequestMapping("/createUser2")
public String createUser2() {
twoJdbcTemplate.update("INSERT INTO `user`(`id`, `name`, `age`) VALUES (?,?,?);", null,"ouyang", 12);
return "success";
}
这里只是简单使用,读者可以根据自己的业务需要添加相应的AOP用户数据源的切换。