SpringBoot mybatis多数据源配置,记录下我磕磕碰碰的三个月找工作经历
*/
public class DynamicDataSource extends AbstractRoutingDataSource {
/**
取得当前使用哪个数据源
@return
*/
@Override
protected Object determineCurrentLookupKey() {
return DbContextHolder.getDbType();
}
}
MybatisPlusConfig
package com.warm.config.mybatis;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import com.baomidou.mybatisplus.MybatisConfiguration;
import com.baomidou.mybatisplus.entity.GlobalConfiguration;
import com.baomidou.mybatisplus.mapper.LogicSqlInjector;
import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.plugins.PerformanceInterceptor;
import com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean;
import com.warm.common.DBTypeEnum;
import com.warm.common.DynamicDataSource;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.type.JdbcType;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
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;
import java.util.HashMap;
import java.util.Map;
/**
@Author DGD
@date 2018/2/6.
*/
@Configuration
@MapperScan({“com.warm.system.mapper*”})
public class MybatisPlusConfig {
/**
mybatis-plus分页插件
文档:http://mp.baomidou.com
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
//paginationInterceptor.setLocalPage(true);// 开启 PageHelper 的支持
return paginationInterceptor;
}
/**
- mybatis-plus SQL执行效率插件【生产环境可以关闭】
*/
@Bean
public PerformanceInterceptor performanceInterceptor() {
return new PerformanceInterceptor();
}
@Bean(name = “db1”)
@ConfigurationProperties(prefix = “spring.datasource.druid.db1” )
public DataSource db1 () {
return DruidDataSourceBuilder.create().build();
}
@Bean(name = “db2”)
@ConfigurationProperties(prefix = “spring.datasource.druid.db2” )
public DataSource db2 () {
return DruidDataSourceBuilder.create().build();
}
/**
动态数据源配置
@return
*/
@Bean
@Primary
public DataSource multipleDataSource (@Qualifier(“db1”) DataSource db1,
@Qualifier(“db2”) DataSource db2 ) {
DynamicDataSource dynamicDataSource = new DynamicDataSource();
Map< Object, Object > targetDataSources = new HashMap<>();
targetDataSources.put(DBTypeEnum.db1.getValue(), db1 );
targetDataSources.put(DBTypeEnum.db2.getValue(), db2);
dynamicDataSource.setTargetDataSources(targetDataSources);
dynamicDataSource.setDefaultTargetDataSource(db1);
return dynamicDataSource;
}
@Bean(“sqlSessionFactory”)
public SqlSessionFactory sqlSessionFactory() throws Exception {
MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
sqlSessionFactory.setDataSource(multipleDataSource(db1(),db2()));
//sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(“classpath:/mapper/*/*Mapper.xml”));
MybatisConfiguration configuration = new MybatisConfiguration();
//configuration.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);
configuration.setJdbcTypeForNull(JdbcType.NULL);
configuration.setMapUnderscoreToCamelCase(true);
configuration.setCacheEnabled(false);
sqlSessionFactory.setConfiguration(configuration);
sqlSessionFactory.setPlugins(new Interceptor[]{ //PerformanceInterceptor(),OptimisticLockerInterceptor()
paginationInterceptor()
});
sqlSessionFactory.setGlobalConfig(globalConfiguration());
return sqlSessionFactory.getObject();
}
@Bean
public GlobalConfiguration globalConfiguration() {
GlobalConfiguration conf = new GlobalConfiguration(new LogicSqlInjector());
conf.setLogicDeleteValue("-1");
conf.setLogicNotDeleteValue(“1”);
conf.setIdType(0);
conf.setMetaObjectHandler(new MyMetaObjectHandler());
conf.setDbColumnUnderline(true);
conf.setRefresh(true);
return conf;
}
}
MyMetaObjectHandler
package com.warm.config.mybatis;
import com.baomidou.mybatisplus.mapper.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import java.sql.Timestamp;
/**
@Author DGD
@date 2018/2/6.
*/
public class MyMetaObjectHandler extends MetaObjectHandler {
/**
- 字段为空自动填充,如果要使填充生效,一定在在实体类对应的字段上设置fill = FieldFill.INSERT字段!
*/
public void insertFill(MetaObject metaObject) {
// 更多查看源码测试用例
System.out.println("*************************");
System.out.println(“insert fill”);
System.out.println("*************************");
Object createTime = getFieldValByName(“createTime”, metaObject);//mybatis-plus版本2.0.9+
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
if (createTime == null) {
setFieldValByName(“createTime”, timestamp, metaObject);//mybatis-plus版本2.0.9+
}
}
@Override
public void updateFill(MetaObject metaObject) {
//更新填充
System.out.println("*************************");
System.out.println(“update fill”);
System.out.println("*************************");
//mybatis-plus版本2.0.9+
setFieldValByName(“modifyTime”, new Timestamp(System.currentTimeMillis()), metaObject);
}
}
UserServiceImpl
package com.warm.system.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.warm.common.DBTypeEnum;
import com.warm.common.DataSourceSwitch;
import com.warm.system.entity.User;
import com.warm.system.mapper.OrderMapper;
import com.warm.system.mapper.UserMapper;
import com.warm.system.service.db1.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ste
《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》
【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享
reotype.Service;
import java.math.BigDecimal;
import java.util.List;
/**
服务实现类
@author dgd123
@since 2018-02-10
*/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@Autowired
private OrderMapper orderMapper;
@Override
public List getUserList() {
return selectList(null);
}
@DataSourceSwitch(DBTypeEnum.db2)
@Override
public BigDecimal getOrderPriceByUserId(Integer userId) {
return orderMapper.getPriceByUserId(userId);
}
}
application-dev.yml
server:
port: 8080
spring:
aop:
proxy-target-class: true
auto: true
datasource:
druid:
数据库 1
db1:
url: jdbc:mysql://120.78.5.210:3306/rosamdb?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
initialSize: 5
minIdle: 5
maxActive: 20
数据库 2
db2:
url: jdbc:mysql://localhost:3305/rosamdb?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
initialSize: 5
minIdle: 5
maxActive: 20
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns=“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 http://maven.apache.org/xsd/maven-4.0.0.xsd”>
4.0.0
com.warm
dynamic-datasource
0.0.1-SNAPSHOT
jar
dynamic-datasource
Demo project for dynamic datasource
org.springframework.boot
spring-boot-starter-parent
1.5.10.RELEASE
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<mybatisplus-spring-boot-starter.version>1.0.4</mybatisplus-spring-boot-starter.version>
<mybatisplus.version>2.1.8</mybatisplus.version>
<druid.version>1.1.3</druid.version>
<lombok.version>1.16.14</lombok.version>
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-aop
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-starter-jdbc
com.baomidou
mybatisplus-spring-boot-starter
${mybatisplus-spring-boot-starter.version}
com.baomidou
mybatis-plus
${mybatisplus.version}
com.alibaba
druid
${druid.version}
com.alibaba
druid-spring-boot-starter
${druid.version}
mysql
mysql-connector-java
runtime
org.apache.velocity
velocity
1.7
org.projectlombok
lombok
${lombok.version}
org.springframework.boot
spring-boot-maven-plugin
SpringBoot mybatis多数据源配置,记录下我磕磕碰碰的三个月找工作经历相关推荐
- 记录下我磕磕碰碰的三个月找工作经历,完整PDF
前言 准备面试其实已经准备了挺久了,当时打算面试准备了差不多以后,跟公司谈谈涨薪的事情,谈不拢的话,就年后直接找其他的公司.谁想到婚假还没休完,老板就在公司宣布了撤出上海的决定,愿意去深圳的就去,不愿 ...
- 记录下我磕磕碰碰的三个月找工作经历,最强技术实现
为什么越来越多的年轻人感觉工作没有动力.职业发展没有希望,迷茫和中年危机等现象普遍发生? 人常说,安居才能乐业. 前些年,房价虽然也不低,但刚工作的年轻人,努力奋斗,攒上几年钱,再借点,踮踮脚,还是能 ...
- 记录下我磕磕碰碰的三个月找工作经历,绝对干货
一.掀起Spring的盖头来 Spring框架的由来 Spring框架概述 二.Spring的IoC容器 重头开始认识loC的基本概念:(构造方法注入+scttcr方法注入+接口注入) 运筹帷幄的秘密 ...
- Android面试必问!记录下我磕磕碰碰的三个月找工作经历,面试心得体会
关于Android的近况 大家都知道,今年移动开发不那么火热了,完全没有了前两年Android开发那种火热的势头,如此同时,AI热火朝天,很多言论都说Android不行了.其实不光是Android,i ...
- 全网疯传!记录下我磕磕碰碰的三个月找工作经历
首先我们先来看看这份Spring源码分析笔记 Spring源码分类的一览无余,详细清晰明了!让你分分钟把握! Spring源码分析笔记手册内容,共七个部分 第一部分Spring概述 Spring 简介 ...
- 太爽了!记录下我磕磕碰碰的三个月找工作经历
前言 消息中间件是分布式系统中的重要组件,在实际工作中常用消息中间件进行系统间数据交换,从而解决应用解耦.异步消息.流量削峰等问题,实现高性能.高可用.可伸缩和最终一致性架构.目前市面上可供选择的消息 ...
- 记录下我磕磕碰碰的三个月找工作经历,offer拿到手软
写在开头: 说下我的经历吧.湖南大学毕业,学的是软件工程,那时候比较贪玩,专业知识学的不是很扎实,毕业后就在长沙本地找了家互联网公司工作了. 到今年六月份的话刚好毕业了五年了,同期和我一起出来的同学们 ...
- 2022高级Android笔试总结,记录下我磕磕碰碰的三个月找工作经历
前言 近几年,Android 开发的套路日趋成熟,越来越多的 Android 工程师获得了「高级」的称号,也有不少人在参与公司的 App 从无到有再到火爆的整个开发过程中,顺理成章地拿到了 Leade ...
- 记录下我磕磕碰碰的三个月找工作经历,好文推荐
开头 今天在浏览技术新闻的时候,发现腾讯就在今天开源了一套 Android 原生的 UI 框架.你们有没有发现,腾讯特别喜欢干这种事,哪一种事呢?喜欢开源 UI 框架,小程序也是这样的. 我看到这个新 ...
最新文章
- Mathematica数据处理(11)--标签
- Centos7环境安装Kibana5.2.2
- crontab清理日志
- 前端学习(1936)vue之电商管理系统电商系统之再关闭对话框defkeys
- 简单粗暴 我再送一波教程资料,Vue、大数据、AI都有
- Docker:尝试篇
- 群发功能java_利用java实现邮箱群发功能
- python读取不到文件怎么办_Python从子目录中找不到的目录文件读取文件(在那里)...
- mysql进程多_MySQL进程列表的进程太多。正常吗?
- 软件测试面试自我介绍
- 【专题】拉格朗日中值定理求极限
- PDF连接服务器信息,远程连接服务器.pdf
- windows11虚拟机安装失败解决办法
- 日本日野汽车因尾气数据造假问题受到调查
- 【中级软考—软件设计师】2操作系统2.6段页式存储【**】:2.6.1页式存储
- 评测三款最流行的txt阅读器(windows适用)
- 原生js实现运维小姐姐的九宫格抽奖活动、心跳快了
- 手机控制电脑远程开机,笔记本与老电脑都能实现
- js算法题:驼峰命名法转下划线命名法
- 入行大数据,需要学习哪些基础知识?