所谓多数据源,就是一个Java EE项目中采用了不同数据库实例中的多个库,或者同一个数据库实例中多个不同的库。一般来说,采用MyCat等分布式数据库中间件是比较好的解决方案,这样可以把数据库读写分离、分库分表、备份等操作交给中间件去做,Java代码只需要专注于业务即可。不过,这并不意味着无法使用Java代码解决类似的问题,在Spring Framework中就可以配置多数据源,Spring Boot继承其衣钵,只不过配置方式有所变化。
因为一个JdbcTemplate对应一个DataSource,开发者只需要手动提供多个DataSource,再手动配置JdbcTemplate即可。
任务描述
任务要求
使用IDEA开发工具构建一个项目多模块工程。study-springboot-chapter05学习关于Springboot如何使用数据源
- 基于study-springboot工程,新建一个Maven空项目,坐标groupId(com.cbitedu)、artifactId(study-springboot-chapter06),其他默认
- 继承study-springboot工程依赖
- 详细学习数据源知识和如何在项目中应用和调整数据源相应参数。
- 多数据源如何实现
任务收获
- 如何集成第三方持久化技术数据源HikariCP号称性能最好的数据库连接池和 Druid ,为监控而生的数据库连接池。
- 如何引入MySQL数据库依赖
- Spring Boot中整合多数据源:主要是以spring jdbc为例来演示Druid多数据源的应用
- 学会使用JUnit完成单元测试
- 掌握数据源在项目中的应用
- 多数据源如何应用
任务准备
环境要求
- JDK1.8+
- MySQL8.0.27+
- Maven 3.6.1+
- IDEA/VSCode
数据库准备
创建数据库platform 和creatorblue-stp,并创建用户表和初始化用户表数据。
- platform数据库对应的表t_sys_userinfo插入一条用户数据
- creatorblue-stp对应的表t_sys_userinfo插入多条用户数据
/*
Navicat Premium Data Transfer
Source Server : localhost_3306
Source Server Type : MySQL
Source Server Version : 80029
Source Host : localhost:3306
Source Schema : platform
Target Server Type : MySQL
Target Server Version : 80029
File Encoding : 65001
Date: 20/08/2022 14:13:09
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for t_sys_userinfo
-- ----------------------------
DROP TABLE IF EXISTS t_sys_userinfo;
CREATE TABLE t_sys_userinfo (
user_id varchar(32) NOT NULL,
username varchar(50) NOT NULL COMMENT '用户名',
password varchar(100) DEFAULT NULL COMMENT '密码',
salt varchar(20) DEFAULT NULL COMMENT '盐',
email varchar(100) DEFAULT NULL COMMENT '邮箱',
mobile varchar(100) DEFAULT NULL COMMENT '手机号',
status tinyint DEFAULT NULL COMMENT '状态 0:禁用 1:正常',
create_user_id varchar(32) NULL DEFAULT NULL COMMENT '创建者ID',
create_time varchar(32) DEFAULT NULL COMMENT '创建时间',
userimg varchar(255) DEFAULT NULL COMMENT '用户头像',
zip varchar(10) DEFAULT NULL COMMENT '邮政编码',
sort_num int DEFAULT NULL COMMENT '排序号',
user_type varchar(10) DEFAULT NULL COMMENT '用户类型',
post_id varchar(32) DEFAULT NULL COMMENT '所属岗位',
sex varchar(4) DEFAULT NULL COMMENT '性别',
USER_REALNAME varchar(50) DEFAULT NULL COMMENT '真实姓名',
user_theme varchar(255) DEFAULT NULL COMMENT '用户选择皮肤',
user_card varchar(18) DEFAULT NULL COMMENT '身份证号码',
birthday varchar(20) DEFAULT NULL COMMENT '出生年月',
native_place varchar(255) DEFAULT NULL COMMENT '家庭住址',
nation varchar(255) DEFAULT NULL COMMENT '民族',
update_user_id varchar(32) DEFAULT NULL COMMENT '创建者ID',
update_time varchar(32) DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (user_id) USING BTREE,
UNIQUE INDEX username(username ASC) USING BTREE
) COMMENT = '系统用户' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of t_sys_userinfo
-- ----------------------------
INSERT INTO t_sys_userinfo VALUES ('1', 'admin', '9ec9750e709431dad22365cabc5c625482e574c74adaebba7dd02f1129e4ce1d', 'YzcmCZNvbXocrsz9dm8e', 'cc@bluefairy.com', '18929423839', 1, '1', '2016-11-11 11:11:11', NULL, NULL, NULL, NULL, NULL, NULL, '系统管理员', 'green', NULL, NULL, NULL, NULL, NULL, NULL);
SET FOREIGN_KEY_CHECKS = 1;
creatorblue-stp的用户初始下数据
-- ----------------------------
-- Records of t_sys_userinfo
-- ----------------------------
INSERT INTO `t_sys_userinfo` VALUES ('01c91e37153c40f283d1ee6abd55ea74', 'zhuq', '3c76e2a1fb8fc6024c62dd4e7772a75f', NULL, '', '13760815932', 1, '1', '2019-08-31 11:46:55', '1a727c2e-1cee-42a1-a166-207ce7a27a79.jpeg', '', 3, '0', NULL, '0', '朱强', '', '', '', '', '', NULL, '2019-08-31 11:46:55');
INSERT INTO `t_sys_userinfo` VALUES ('041557a5c937496f861322e3f86b449f', '13128907453', '3c76e2a1fb8fc6024c62dd4e7772a75f', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '0', NULL, '1', '黄扬呈', 'black', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `t_sys_userinfo` VALUES ('0c6fed7050f94891bec5c8cd4f75effe', '213', '3c76e2a1fb8fc6024c62dd4e7772a75f', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '0', NULL, '1', '132', 'black', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `t_sys_userinfo` VALUES ('0d9572fca4e24453b771aa221e051f76', '15999610130', '3c76e2a1fb8fc6024c62dd4e7772a75f', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '0', NULL, '1', '苏章程', 'black', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `t_sys_userinfo` VALUES ('1', 'admin', 'f87c507924b99d1637afd8cfd2c77ab9', NULL, 'zhujianwu@creatorblue.com', '18229923839', 1, '1', '2016-11-11 11:11:11', '3e0340b0-182c-4fb6-98da-f5f1d97e32e4.jpeg', '123123', 1, '1', NULL, '1', '系统管理员', 'green', '430602199808147532', '2019-06-05', '天津1112222', '汉', '1', '2020-10-24 19:47:36');
INSERT INTO `t_sys_userinfo` VALUES ('278174c1a0024770aad1429d7dc842e9', '15078307127', '3c76e2a1fb8fc6024c62dd4e7772a75f', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '0', NULL, '1', '欧阳庆', 'black', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `t_sys_userinfo` VALUES ('39fda9d155354277a869bd4e11dc6d42', '15111275308', '3c76e2a1fb8fc6024c62dd4e7772a75f', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '0', NULL, '1', '严老师', 'black', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `t_sys_userinfo` VALUES ('3be7c1946c9d4e0f82e5d7bd4357fee1', 'zhujw', '172c0b5a64808005c9db5d22c4855efa', NULL, '28449472@qq.com', '18229923839', 1, '1', '2019-06-21 11:29:27', '36ea2536-2745-477b-91a4-039f9a40f1d5.jpeg', '410017', 1, '0', NULL, '0', '朱建武', '', '430223197905094573', '2019-06-04', '湖南省长沙市岳麓区中南一号院', '汉族', '1', '2021-12-15 14:18:55');
INSERT INTO `t_sys_userinfo` VALUES ('41f81322d695401d83816b0bde79425c', '15073593729', '3c76e2a1fb8fc6024c62dd4e7772a75f', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '0', NULL, '1', '黄君', 'black', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `t_sys_userinfo` VALUES ('61cc4174e96d41fc8068704e42980338', 'zhouyl', '3c76e2a1fb8fc6024c62dd4e7772a75f', NULL, '', '14683213567', 1, '1', '2022-01-20 17:44:34', '', '', 16, '0', NULL, '0', '周云龙', '', '', '', '', '', NULL, '2022-01-20 17:44:34');
INSERT INTO `t_sys_userinfo` VALUES ('75b4151caa4643d185044387773329f2', '13786199187', '3c76e2a1fb8fc6024c62dd4e7772a75f', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '0', NULL, '1', '卢虹', 'black', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `t_sys_userinfo` VALUES ('8562da9ffa3246b4a87f5c5125322851', 'test', '3c76e2a1fb8fc6024c62dd4e7772a75f', NULL, '', '13212312376', 1, '1', '2019-06-28 16:46:17', 'bf39bd09-d7b3-452c-bd4e-33a164240b86.jpeg', '', 9, '内部', NULL, '男', 'test', '', '', '', '', '', '1', '2019-06-28 17:25:30');
INSERT INTO `t_sys_userinfo` VALUES ('98dbd8e7e8344f4fb2bd42b9d6082334', '1', '3c76e2a1fb8fc6024c62dd4e7772a75f', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '0', NULL, '1', '测试', 'black', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `t_sys_userinfo` VALUES ('9ed88a8f6e7e4a9292011219fb75657f', '18874237001', '3c76e2a1fb8fc6024c62dd4e7772a75f', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '0', NULL, '1', '张文君', 'black', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `t_sys_userinfo` VALUES ('b0d0fdbb038f43d284612fbb662806ed', 'ouyq', '3c76e2a1fb8fc6024c62dd4e7772a75f', NULL, '', '13734567890', 1, '1', '2019-08-31 11:44:06', '53eaed41-7e97-4588-a621-3ae560e2c0bb.jpeg', '', 10, '0', NULL, '0', '欧阳庆', '', '', '', '', '', NULL, '2019-08-31 14:24:54');
INSERT INTO `t_sys_userinfo` VALUES ('be0d1ff764e44bcabbd4f7f306c516c3', '1329748210', '3c76e2a1fb8fc6024c62dd4e7772a75f', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '0', NULL, '1', '朱强', 'black', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `t_sys_userinfo` VALUES ('c597c860edf74412977260d9a3e0e71b', '15200539804', '3c76e2a1fb8fc6024c62dd4e7772a75f', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '0', NULL, '1', '胡俊', 'black', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `t_sys_userinfo` VALUES ('c819c00112e14860a526891c7e3e118c', 'zhangnn', '3c76e2a1fb8fc6024c62dd4e7772a75f', NULL, '', '16675554538', 1, '1', '2019-08-31 11:52:34', 'f9606e74-e13d-4a3c-8071-1b6d878cf7b2.jpeg', '', 12, '0', NULL, '0', '张娜娜', '', '', '', '', '', NULL, '2019-08-31 11:52:34');
INSERT INTO `t_sys_userinfo` VALUES ('ccb00ba0cb4f49d9a5f95b89a4d70eea', '13312312312', '3c76e2a1fb8fc6024c62dd4e7772a75f', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '0', NULL, '1', 'test', 'black', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `t_sys_userinfo` VALUES ('d24c1a3f5f214a709c01cd4e4017578b', 'wangzh', '3c76e2a1fb8fc6024c62dd4e7772a75f', NULL, '', '15673144166', 1, '1', '2019-08-31 11:54:25', 'd0cfa645-7d5f-4398-b2de-84697644cbb0.png', '', 13, '0', NULL, '0', '王子豪', '', '', '', '', '', NULL, '2019-08-31 14:22:26');
INSERT INTO `t_sys_userinfo` VALUES ('d3bd31c6a5ab47efb5f5c5b7abee0c33', 'suzc', '3c76e2a1fb8fc6024c62dd4e7772a75f', NULL, '', '18229923467', 1, '1', '2019-08-31 11:57:23', '9f6c369a-6532-4078-8394-3c8888f26d6a.jpeg', '', 1, '0', NULL, '0', '苏章程', '', '', '', '', '', NULL, '2019-08-31 11:57:23');
INSERT INTO `t_sys_userinfo` VALUES ('d534886edbfe40489c77061fe06ae27e', 'huangyl', '3c76e2a1fb8fc6024c62dd4e7772a75f', NULL, '', '18229923833', 1, '1', '2019-08-31 11:55:06', '78cee3bb-3208-4464-ad74-15b913b1c247.jpeg', '', 14, '0', NULL, '0', '黄玉兰', '', '', '', '', '', NULL, '2019-08-31 14:23:47');
INSERT INTO `t_sys_userinfo` VALUES ('d5eb8731b1274f6b90a59dcbe333cfdf', '1507830712', '3c76e2a1fb8fc6024c62dd4e7772a75f', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '0', NULL, '1', '欧阳庆', 'black', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `t_sys_userinfo` VALUES ('ec7a75b6122d4f9b8c7b08459b3c4b3f', 'huj', '3c76e2a1fb8fc6024c62dd4e7772a75f', NULL, 'hujun@creatorblue.com', '15200539804', 1, '1', '2019-08-31 11:50:54', '49e3f7a4-db23-4117-bd31-0c1c45c852a1.jpeg', '', 11, '0', NULL, '0', '胡俊', '', '', '', '', '', NULL, '2019-09-02 11:59:44');
INSERT INTO `t_sys_userinfo` VALUES ('f5b7a273c3844cadbdc41a68cc7dd5fb', 'lux', '3c76e2a1fb8fc6024c62dd4e7772a75f', NULL, '', '18229923876', 1, '1', '2022-01-20 17:43:09', '', '', 15, '0', NULL, '1', '卢逊', '', '', '', '', '', NULL, '2022-01-20 17:43:09');
INSERT INTO `t_sys_userinfo` VALUES ('fe182f1277a24b66a7cb6cc386c2c47f', '18229923479', '3c76e2a1fb8fc6024c62dd4e7772a75f', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '0', NULL, '1', '王芳', 'black', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `t_sys_userinfo` VALUES ('fe4b856d6e984ad4a07470fb404c267c', '15886345118', '3c76e2a1fb8fc6024c62dd4e7772a75f', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '0', NULL, '1', '刘曦婷', 'black', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `t_sys_userinfo` VALUES ('fe9950dac4df41008caacae3ea560bf6', '16675554538', '3c76e2a1fb8fc6024c62dd4e7772a75f', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '0', NULL, '1', '张娜娜', 'black', NULL, NULL, NULL, NULL, NULL, NULL);
SET FOREIGN_KEY_CHECKS = 1;
工程目录要求
新建一个空的Maven项目:study-springboot-chapter06
数据源(Data Source),以及Spring Boot中对数据源的创建与配置。
任务实施
学习在Spring Boot中最基本的数据访问工具:JdbcTemplate。
首先,为了连接数据库需要引入jdbc支持,在pom.xml中引入如下配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
以MySQL数据库为例,先引入MySQL连接的依赖包,在pom.xml中加入:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
在src/main/resources/application-dev.yml中配置多个数据源信息
server:
port: 8081
logging:
level:
com.cbitedu.springboot: debug
org.springframework.web: info
spring:
# datasource 数据源配置内容
datasource:
# 订单数据源配置
oneds:
url: jdbc:mysql://127.0.0.1:3306/platform?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: root
type: com.alibaba.druid.pool.DruidDataSource # 设置类型为 DruidDataSource
# Druid 自定义配置,对应 DruidDataSource 中的 setting 方法的属性
min-idle: 0 # 池中维护的最小空闲连接数,默认为 0 个。
max-active: 20 # 池中最大连接数,包括闲置和使用中的连接,默认为 8 个。
# 用户数据源配置
twods:
url: jdbc:mysql://127.0.0.1:3306/creatorblue-stp?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: root
type: com.alibaba.druid.pool.DruidDataSource # 设置类型为 DruidDataSource
# Druid 自定义配置,对应 DruidDataSource 中的 setting 方法的属性
min-idle: 0 # 池中维护的最小空闲连接数,默认为 0 个。
max-active: 20 # 池中最大连接数,包括闲置和使用中的连接,默认为 8 个。
# Druid 自定已配置
druid:
# 过滤器配置
filter:
stat: # 配置 StatFilter
log-slow-sql: true # 开启慢查询记录
slow-sql-millis: 5000 # 慢 SQL 的标准,单位:毫秒
# StatViewServlet 配置
stat-view-servlet: # 配置 StatViewServlet
enabled: true # 是否开启 StatViewServlet
login-username: admin # 账号
login-password: admin # 密码
注意:因为Spring Boot 2.1.x默认使用了MySQL 8.0的驱动,所以这里采用com.mysql.cj.jdbc.Driver,而不是老的com.mysql.jdbc.Driver。
spring容器中注入数据源
package com.cbitedu.springboot.datasource;
// DataSourceConfig.java
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import javax.sql.DataSource;
@Configuration
public class DataSourceConfig {
/**
* 创建 orders 数据源
*/
@Primary
@Bean(name = "oneDataSource")
@ConfigurationProperties(prefix = "spring.datasource.oneds")
public DataSource oneDataSource() {
return DruidDataSourceBuilder.create().build();
}
/**
* 创建 users 数据源
*/
@Bean(name = "twoDataSource")
@ConfigurationProperties(prefix = "spring.datasource.twods")
public DataSource twoDataSource() {
return DruidDataSourceBuilder.create().build();
}
}
使用JdbcTemplate操作数据库
开发者没有提供JdbcTemplate实例时,Spring Boot默认会提供一个JdbcTemplate实例。现在配置多数据源时,由开发者自己提供JdbcTemplate实例
package com.cbitedu.springboot.datasource;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
@Configuration
public class JdbcTemplateConfig {
@Primary
@Bean
JdbcTemplate jdbcTemplateOne(@Qualifier("oneDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
@Bean
JdbcTemplate jdbcTemplateTwo(@Qualifier("twoDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
下面就来一起完成一个增删改查的例子:
1、准备数据库platform、creatorblue-stop和表t_sys_userinfo
2、编写实体对象Domain Object
根据数据库中创建的t_sys_userinfo表,创建领域对象:com.cbitedu.springboot.entity.TsysUserinfo
package com.cbitedu.springboot.entity;
import java.io.Serializable;
import java.util.List;
/**
* 用户信息
* @author
*
*/
public class TsysUserinfo implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 用户ID
*/
private String userId;
/**
* 用户名
*/
private String username;
/**
* 密码
*/
private String password;
/**
* 盐
*/
private String salt;
/**
* 邮箱
*/
private String email;
/**
* 手机号
*/
private String mobile;
@Override
public String toString() {
return "TsysUserinfo{" +
"userId='" + userId + ''' +
", username='" + username + ''' +
", password='" + password + ''' +
", salt='" + salt + ''' +
", email='" + email + ''' +
", mobile='" + mobile + ''' +
", status='" + status + ''' +
", roleIdList=" + roleIdList +
", orgIdList=" + orgIdList +
", orgId='" + orgId + ''' +
", userRealname='" + userRealname + ''' +
", orgnames='" + orgnames + ''' +
", userimg='" + userimg + ''' +
", zip='" + zip + ''' +
", sortNum=" + sortNum +
", userType='" + userType + ''' +
", postIdList=" + postIdList +
", sex='" + sex + ''' +
", userTheme='" + userTheme + ''' +
", userCard='" + userCard + ''' +
", birthday='" + birthday + ''' +
", nativePlace='" + nativePlace + ''' +
", nation='" + nation + ''' +
'}';
}
/**
* 状态 0:禁用 1:正常
*/
private String status;
/**
* 角色ID列表
*/
private List<String> roleIdList;
private List<String> orgIdList;
/**
* 所属机构
*/
private String orgId;
/**
* 用户真实姓名
*/
private String userRealname;
/**
* 所属机构
*/
private String orgnames;
/**
* 用户头像
*/
private String userimg;
/**
* 邮政编码
*/
private String zip;
/**
* 排序号
*/
private Integer sortNum;
/**
* 用户类型
*/
private String userType;
/**
* 所属岗位
*/
private List<String> postIdList;
/**
* 性别
*/
private String sex;
private String userTheme;
/**
* 身份证号码 db_column: user_card
*/
private String userCard;
/**
* 出生年月 db_column: birthday
*/
private String birthday;
/**
* 家庭住址 db_column: native_place
*/
private String nativePlace;
/**
* 民族 db_column: nation
*/
private String nation;
public String getUserTheme() {
return userTheme;
}
public void setUserTheme(String userTheme) {
this.userTheme = userTheme;
}
public String getUserCard() {
return userCard;
}
public void setUserCard(String userCard) {
this.userCard = userCard;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public String getNativePlace() {
return nativePlace;
}
public void setNativePlace(String nativePlace) {
this.nativePlace = nativePlace;
}
public String getNation() {
return nation;
}
public void setNation(String nation) {
this.nation = nation;
}
/**
* 设置:
*
* @param userId
*/
public void setUserId(String userId) {
this.userId = userId;
}
/**
* 获取:
*
* @return String
*/
public String getUserId() {
return userId;
}
/**
* 设置:用户名
*
* @param username
* 用户名
*/
public void setUsername(String username) {
this.username = username;
}
/**
* 获取:用户名
*
* @return String
*/
public String getUsername() {
return username;
}
/**
* 设置:密码
*
* @param password
* 密码
*/
public void setPassword(String password) {
this.password = password;
}
/**
* 获取:密码
*
* @return String
*/
public String getPassword() {
return password;
}
/**
* 设置:邮箱
*
* @param email
* 邮箱
*/
public void setEmail(String email) {
this.email = email;
}
/**
* 获取:邮箱
*
* @return String
*/
public String getEmail() {
return email;
}
/**
* 设置:手机号
*
* @param mobile
* 手机号
*/
public void setMobile(String mobile) {
this.mobile = mobile;
}
/**
* 获取:手机号
*
* @return String
*/
public String getMobile() {
return mobile;
}
/**
* 设置:状态 0:禁用 1:正常
*
* @param status
* 状态 0:禁用 1:正常
*/
public void setStatus(String status) {
this.status = status;
}
/**
* 获取:状态 0:禁用 1:正常
*
* @return Integer
*/
public String getStatus() {
return status;
}
public List<String> getRoleIdList() {
return roleIdList;
}
public void setRoleIdList(List<String> roleIdList) {
this.roleIdList = roleIdList;
}
public String getSalt() {
return salt;
}
public void setSalt(String salt) {
this.salt = salt;
}
public List<String> getOrgIdList() {
return orgIdList;
}
/**
* 设置:机构ID列表
*
* @param orgIdList
* 机构ID列表
*/
public void setOrgIdList(List<String> orgIdList) {
this.orgIdList = orgIdList;
}
public String getOrgnames() {
return orgnames;
}
/**
* 设置:机构名称
*
* @param orgnames
* 机构名称
*/
public void setOrgnames(String orgnames) {
this.orgnames = orgnames;
}
public String getUserimg() {
return userimg;
}
/**
* 设置:用户头像
* @param userimg 用户头像
*/
public void setUserimg(String userimg) {
this.userimg = userimg;
}
public String getZip() {
return zip;
}
/**
* 设置:邮政编码
* @param zip 邮政编码
*/
public void setZip(String zip) {
this.zip = zip;
}
public Integer getSortNum() {
return sortNum;
}
/**
* 设置:排序号
* @param sort_num 排序号
*/
public void setSortNum(Integer sortNum) {
this.sortNum = sortNum;
}
public String getUserType() {
return userType;
}
/**
* 设置:用户类型
* @param user_type:内部用户、第三方用户、外部用户
*/
public void setUserType(String userType) {
this.userType = userType;
}
public List<String> getPostIdList() {
return postIdList;
}
/**
* 设置:所属岗位
* @param post_id 所属岗位
*/
public void setPostIdList(List<String> postIdList) {
this.postIdList = postIdList;
}
public String getSex() {
return sex;
}
/**
* 设置:性别
* @param sex 性别
*/
public void setSex(String sex) {
this.sex = sex;
}
public String getUserRealname() {
return userRealname;
}
/**
* 设置:用户真实姓名
* @param user_realname 用户真实姓名
*/
public void setUserRealname(String userRealname) {
this.userRealname = userRealname;
}
public String getOrgId() {
return orgId;
}
/**
* 设置:所属机构
* @param orgId 所属机构
*/
public void setOrgId(String orgId) {
this.orgId = orgId;
}
}
3、编写数据访问接口服务和服务实现类com.cbitedu.springboot.service.IUserService
package com.cbitedu.springboot.service;
import com.cbitedu.springboot.entity.TsysUserinfo;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface IUserService {
/**
* 获取用户
*/
List<TsysUserinfo> getAllUsersByOneDS();
List<TsysUserinfo> getAllUsersByTwoDS();
}
4、通过JdbcTemplate实现UserService中定义的数据访问操作:UserServiceImpl
package com.cbitedu.springboot.service;
import com.cbitedu.springboot.entity.TsysUserinfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.annotation.Resource;
import java.util.List;
public class UserServiceImpl implements IUserService{
@Resource(name = "jdbcTemplateOne")
JdbcTemplate jdbcTemplateone;
@Autowired
@Qualifier("jdbcTemplateTwo")
JdbcTemplate jdbcTemplateTwo;
@Override
public List<TsysUserinfo> getAllUsersByOneDS() {
return jdbcTemplateone.query("select * from t_sys_userinfo", new BeanPropertyRowMapper<>(TsysUserinfo.class));
}
@Override
public List<TsysUserinfo> getAllUsersByTwoDS() {
return jdbcTemplateTwo.query("select * from t_sys_userinfo", new BeanPropertyRowMapper<>(TsysUserinfo.class));
}
}
5、编写UserController用于测试分别测试不同数据库中查询出来的用户数据
package com.cbitedu.springboot.controller;
import com.cbitedu.springboot.entity.TsysUserinfo;
import com.cbitedu.springboot.service.IUserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @author zhujw
* @date 2020/8/1
*/
@RequestMapping(value = "/")
@RestController
public class UserController {
@Autowired
IUserService iUserService;
Logger logger = LoggerFactory.getLogger(UserController.class);
@GetMapping("/users")
public void test1() {
List<TsysUserinfo> user1 = iUserService.getAllUsersByOneDS();
List<TsysUserinfo> user2 = iUserService.getAllUsersByTwoDS();
logger.info("user1:" + user1);
logger.info("user2:" + user2);
}
}
6、启动StudySpringbootChapter06Application浏览器中输入http://localhost:8081/users
查看控制台的打印信息:不同的数据源查询出的用户数据也是不相同。
实验实训
1、Springboot 配置多数据源如何实现数据库读写分离