mybatis基于注解形式的多数据源
最近在做一个系统管理项目,需要使用到多数据源,尝试了注解形式和xml形式的多数据源配置,以下是基于注解形式的Mybatis多数据源配置。
1.application.yml 配置文件
database-einstein:
driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://192.168.128.129:5432/einstein
username: postgres
password: 123456
config-location: mybatis-web-config.xml database-dataplatform:
driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://192.168.128.129:5432/DataPlatform_20180107
username: postgres
password: postgres
config-location: mybatis-web-config.xml server:
port: 8093
2.针对einstein数据库的配置类(配置多数据源一定要有主数据源,如类中所示,可以在主数据源的sessionFactory上加上注解@Primary)
package cn.antiy.weiqing.configutation; import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
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; /**
* @author miaoying
* @date 2/5/18
*/
@Configuration
@MapperScan(basePackages = {"cn.antiy.weiqing.mapper.einstein"}, sqlSessionFactoryRef = "einsteinSqlSessionFactory")
public class MybatisEinsteinDbConfig {
@Bean
@ConfigurationProperties(prefix = "database-einstein")
public DataSource dataSourceEinstein() {
return DataSourceBuilder.create().build();
} @Bean
@Primary
public SqlSessionFactory einsteinSqlSessionFactory() throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSourceEinstein());
return sqlSessionFactoryBean.getObject();
} @Bean
public SqlSessionTemplate einsteinSqlSessionTemplate() throws Exception {
SqlSessionTemplate template = new SqlSessionTemplate(einsteinSqlSessionFactory());
return template;
}
}
3.针对DataPlatform_20180107数据库的配置类
package cn.antiy.weiqing.configutation; import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; /**
* @author miaoying
* @date 2/5/18
*/
@Configuration
@MapperScan(basePackages = {"cn.antiy.weiqing.mapper.dataplatform"}, sqlSessionFactoryRef = "dataPlatformSqlSessionFactory")
public class MybatisDataPlatformDbConfig { @Bean
@ConfigurationProperties(prefix = "database-dataplatform")
public DataSource dataSourceDataPlatform() {
return DataSourceBuilder.create().build();
} @Bean
public SqlSessionFactory dataPlatformSqlSessionFactory() throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSourceDataPlatform());
return sqlSessionFactoryBean.getObject();
} @Bean
public SqlSessionTemplate dataPlatformSqlSessionTemplate() throws Exception {
SqlSessionTemplate template = new SqlSessionTemplate(dataPlatformSqlSessionFactory());
return template;
}
}
4.Application.java(由于Spring Boot默认单数据源,所以在启动类中需要使用注解去除该默认项,如下所示:@SpringBootApplication(exclude = DataSourceAutoConfiguration.class))
package cn.antiy.weiqing; import cn.antiy.weiqing.constants.SysConstants;
import cn.antiy.weiqing.utils.SpringContextUtils;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationListener; @SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class Application {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(Application.class);
application.addListeners(new AppStartListener());
application.addListeners();
application.run(args);
}
} class AppStartListener implements ApplicationListener<ApplicationReadyEvent> {
@Override
public void onApplicationEvent(ApplicationReadyEvent event) {
SpringContextUtils.setApplicationContext(event.getApplicationContext());
new SysConstants().init();
}
}
mybatis基于注解形式的多数据源的更多相关文章
- 基于注解的Spring多数据源配置和使用(非事务)
原文:基于注解的Spring多数据源配置和使用 1.创建DynamicDataSource类,继承AbstractRoutingDataSource package com.rps.dataSourc ...
- Spring7——开发基于注解形式的spring
开发基于注解形式的spring SpringIOC容器的2种形式: (1)xml配置文件:applicationContext.xml; 存bean:<bean> 取bean: Appli ...
- Spring+Mybatis基于注解整合Redis
基于这段时间折腾redis遇到了各种问题,想着整理一下.本文主要介绍基于Spring+Mybatis以注解的形式整合Redis.废话少说,进入正题. 首先准备Redis,我下的是Windows版,下载 ...
- SpringMvc+Spring+MyBatis 基于注解整合
最近在给学生们讲Spring+Mybatis整合,根据有的学生反映还是基于注解实现整合便于理解,毕竟在先前的工作中团队里还没有人完全舍弃配置文件进行项目开发,由于这两个原因,我索性参考spring官方 ...
- 基于注解的Spring多数据源配置和使用
前一段时间研究了一下spring多数据源的配置和使用,为了后期从多个数据源拉取数据定时进行数据分析和报表统计做准备.由于之前做过的项目都是单数据源的,没有遇到这种场景,所以也一直没有去了解过如何配置多 ...
- Mybatis基于注解开启使用二级缓存
关于Mybatis的一级缓存和二级缓存的概念以及理解可以参照前面文章的介绍.前文连接:https://www.cnblogs.com/hopeofthevillage/p/11427438.html, ...
- 基于注解实现SpringBoot多数据源配置
1.功能介绍 在实际的开发中,同一个项目中使用多个数据源是很常见的场景.最近在学习的过程中使用注解的方式实现了一个Springboot项目多数据源的功能.具体实现方式如下. 2.在applicatio ...
- springboot基于注解动态配置多数据源以及多数据源的事务统一
参考文档:https://www.cnblogs.com/zhangboyu/p/7622412.html https://blog.csdn.net/qq_34322777/article/deta ...
- spring boot整合mybatis基于注解开发以及动态sql的使用
让我们回忆一下上篇博客中mybatis是怎样发挥它的作用的,主要是三类文件,第一mapper接口,第二xml文件,第三全局配置文件(application.properties),而今天我们就是来简化 ...
随机推荐
- c语言中如何通过二级指针来操作二维数组
通过二级指针去访问二维数组需要先给二级指针分配等同于二维数组行数的一维数组指针,然后把二维数组的每行首地址赋值给对应位置的一维指针上.之后就可以通过二维指针直接访问了. 参考代码如下,可以看具体注释辅 ...
- deque/defaultdict/orderedict/collections.namedtuple()/collections.ChainMap() 笔记
关于deque的使用 collections.deque([list[, max_length]]) # 不限定长度,可随意添加没有上限 >>> from collections i ...
- 一个基于netty的websocket聊天demo
这里,仅仅是一个demo,模拟客户基于浏览器咨询卖家问题的场景,但是,这里的demo中,卖家不是人,是基于netty的程序(我就叫你uglyRobot吧),自动回复了客户问的问题. 项目特点如下: 1 ...
- java小程序(课堂作业03)
使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”. 思路:因为静态初始化块只运行一次,是一个很好的记录次数的方法,定义一 ...
- Delphi 的 Bit
我一直感觉 Delphi 下的Bit操作不是很好使, 所以一直屏蔽着这方面的学习.不过最近收集整理了一下代码. 原因是这样的. 由于某个需求被分解成 在 0~n(不定) 中,有几个数字被置换成了“tr ...
- P1072Hankson的趣味题
传送 这个题一本通上有,但是为了增强我们的创新精神,思维能力balabala,书上的满分程序不全,要优化一下,在此写一下第二种方法 #include<iostream> #include& ...
- kafka产生的数据通过Flume存到HDFS中
试验目标: 把kafka的生产者发出的数据流经由Flume放到HDFS来存储. 试验环境: java:1.8 kafka:2.11 flume:1.6 hadoop:2.8.5 试验流程: 1.进入z ...
- mysql查询优化之三:查询优化器提示(hint)
目录: <MySQL中的两种临时表>--强制使用临时表 SQL_BUFFER_RESULT <MySQL 多表关联更新及删除> <mysql查询优化之三:查询优化器提示( ...
- Hadoop+Hbas完全分布式安装部署
Hadoop安装部署基本步骤: 1.安装jdk,配置环境变量. jdk可以去网上自行下载,环境变量如下: 编辑 vim /etc/profile 文件,添加如下内容: export JAVA_HO ...
- 05-RARP: 逆地址解析协议
具有本地磁盘的系统引导时,一般是从磁盘上的配置文件中读取I P地址.但是无盘机,如X终端或无盘工作站,则需要采用其他方法来获得I P地址. 网络上的每个系统都具有唯一的硬件地址,它是由网络接口生产厂家 ...