*/

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多数据源配置,记录下我磕磕碰碰的三个月找工作经历相关推荐

  1. 记录下我磕磕碰碰的三个月找工作经历,完整PDF

    前言 准备面试其实已经准备了挺久了,当时打算面试准备了差不多以后,跟公司谈谈涨薪的事情,谈不拢的话,就年后直接找其他的公司.谁想到婚假还没休完,老板就在公司宣布了撤出上海的决定,愿意去深圳的就去,不愿 ...

  2. 记录下我磕磕碰碰的三个月找工作经历,最强技术实现

    为什么越来越多的年轻人感觉工作没有动力.职业发展没有希望,迷茫和中年危机等现象普遍发生? 人常说,安居才能乐业. 前些年,房价虽然也不低,但刚工作的年轻人,努力奋斗,攒上几年钱,再借点,踮踮脚,还是能 ...

  3. 记录下我磕磕碰碰的三个月找工作经历,绝对干货

    一.掀起Spring的盖头来 Spring框架的由来 Spring框架概述 二.Spring的IoC容器 重头开始认识loC的基本概念:(构造方法注入+scttcr方法注入+接口注入) 运筹帷幄的秘密 ...

  4. Android面试必问!记录下我磕磕碰碰的三个月找工作经历,面试心得体会

    关于Android的近况 大家都知道,今年移动开发不那么火热了,完全没有了前两年Android开发那种火热的势头,如此同时,AI热火朝天,很多言论都说Android不行了.其实不光是Android,i ...

  5. 全网疯传!记录下我磕磕碰碰的三个月找工作经历

    首先我们先来看看这份Spring源码分析笔记 Spring源码分类的一览无余,详细清晰明了!让你分分钟把握! Spring源码分析笔记手册内容,共七个部分 第一部分Spring概述 Spring 简介 ...

  6. 太爽了!记录下我磕磕碰碰的三个月找工作经历

    前言 消息中间件是分布式系统中的重要组件,在实际工作中常用消息中间件进行系统间数据交换,从而解决应用解耦.异步消息.流量削峰等问题,实现高性能.高可用.可伸缩和最终一致性架构.目前市面上可供选择的消息 ...

  7. 记录下我磕磕碰碰的三个月找工作经历,offer拿到手软

    写在开头: 说下我的经历吧.湖南大学毕业,学的是软件工程,那时候比较贪玩,专业知识学的不是很扎实,毕业后就在长沙本地找了家互联网公司工作了. 到今年六月份的话刚好毕业了五年了,同期和我一起出来的同学们 ...

  8. 2022高级Android笔试总结,记录下我磕磕碰碰的三个月找工作经历

    前言 近几年,Android 开发的套路日趋成熟,越来越多的 Android 工程师获得了「高级」的称号,也有不少人在参与公司的 App 从无到有再到火爆的整个开发过程中,顺理成章地拿到了 Leade ...

  9. 记录下我磕磕碰碰的三个月找工作经历,好文推荐

    开头 今天在浏览技术新闻的时候,发现腾讯就在今天开源了一套 Android 原生的 UI 框架.你们有没有发现,腾讯特别喜欢干这种事,哪一种事呢?喜欢开源 UI 框架,小程序也是这样的. 我看到这个新 ...

最新文章

  1. Mathematica数据处理(11)--标签
  2. Centos7环境安装Kibana5.2.2
  3. crontab清理日志
  4. 前端学习(1936)vue之电商管理系统电商系统之再关闭对话框defkeys
  5. 简单粗暴 我再送一波教程资料,Vue、大数据、AI都有
  6. Docker:尝试篇
  7. 群发功能java_利用java实现邮箱群发功能
  8. python读取不到文件怎么办_Python从子目录中找不到的目录文件读取文件(在那里)...
  9. mysql进程多_MySQL进程列表的进程太多。正常吗?
  10. 软件测试面试自我介绍
  11. 【专题】拉格朗日中值定理求极限
  12. PDF连接服务器信息,远程连接服务器.pdf
  13. windows11虚拟机安装失败解决办法
  14. 日本日野汽车因尾气数据造假问题受到调查
  15. 【中级软考—软件设计师】2操作系统2.6段页式存储【**】:2.6.1页式存储
  16. 评测三款最流行的txt阅读器(windows适用)
  17. 原生js实现运维小姐姐的九宫格抽奖活动、心跳快了
  18. 手机控制电脑远程开机,笔记本与老电脑都能实现
  19. js算法题:驼峰命名法转下划线命名法
  20. 入行大数据,需要学习哪些基础知识?

热门文章

  1. 使用nw.js将网址打包生成exe可安装程序支持xp系统
  2. oracle括号不区分中英,oracle查询不含括号及不含指定字符的方法
  3. CTF学习-逆向解题思路
  4. 【GameMaker 极速入门】#1环境配置
  5. Android判断是模拟器还是真机
  6. 数据可视化项目学习思维导图
  7. 解决电脑无法运行 Mscomctl.ocx控件 常见的4个问题
  8. ue4 后期处理景深_Unreal Engine4 后期处理特效 VOL1
  9. Office2016 64位安装包+只安装3件套
  10. 晚上可以挣钱的副业,这6个赶紧收藏吧!