精通SpringBoot——第十三篇:整合Mybatis多数据源
久违了,最近度过了一段倦怠期,这段时间干什么都没有动力,拖延症复发。好在我回来了.... ——From me .
进入今天的主题——在Spring Boot 项目中整合mybatis多数据源,其实很简单,其实并不难。
整体项目结构以及数据源配置application.yml:
看代码吧.
第一个数据源配置(作为主数据源)
/**
* @author Lensen
* @desc
* @since 2018/9/19 10:22
*/
@Configuration
@MapperScan(basePackages = PrimaryDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "primarySqlSessionFactory")
public class PrimaryDataSourceConfig {
static final String PACKAGE = "com.developlee.multipartmybatisdatasource.dao.primary";
static final String MAPPER_LOCATION = "classpath:mapper/primary/*.xml";
@Value("${primary.datasource.url}")
private String url;
@Value("${primary.datasource.username}")
private String user;
@Value("${primary.datasource.password}")
private String password;
@Value("${primary.datasource.driverClassName}")
private String driverClass;
@Bean(name = "primaryDataSource")
@Primary
public DataSource primaryDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(password);
return dataSource;
}
@Bean(name = "primaryTransactionManager")
@Primary
public DataSourceTransactionManager primaryTransactionManager() {
return new DataSourceTransactionManager(primaryDataSource());
}
@Bean(name = "primarySqlSessionFactory")
@Primary
public SqlSessionFactory primarySqlSessionFactory(@Qualifier("primaryDataSource") DataSource primaryDataSource)
throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(primaryDataSource);
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources(PrimaryDataSourceConfig.MAPPER_LOCATION));
return sessionFactory.getObject();
}
}
第二个数据源配置
/**
* @author Lensen
* @desc
* @since 2018/9/19 10:22
*/
@Configuration
@MapperScan(basePackages = SecondaryDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "secondarySqlSessionFactory")
public class SecondaryDataSourceConfig {
static final String PACKAGE = "com.developlee.multipartmybatisdatasource.dao.secondary";
static final String MAPPER_LOCATION = "classpath:mapper/secondary/*.xml";
@Value("${secondary.datasource.url}")
private String url;
@Value("${secondary.datasource.username}")
private String user;
@Value("${secondary.datasource.password}")
private String password;
@Value("${secondary.datasource.driverClassName}")
private String driverClass;
@Bean(name = "secondaryDataSource")
public DataSource secondaryDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(password);
return dataSource;
}
@Bean(name = "secondaryTransactionManager")
public DataSourceTransactionManager secondaryTransactionManager() {
return new DataSourceTransactionManager(secondaryDataSource());
}
@Bean(name = "secondarySqlSessionFactory")
public SqlSessionFactory secondarySqlSessionFactory(@Qualifier("secondaryDataSource") DataSource secondaryDataSource)
throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(secondaryDataSource);
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources(SecondaryDataSourceConfig.MAPPER_LOCATION));
return sessionFactory.getObject();
}
}
其他业务逻辑代码就不贴了,代码可在我的github上找到。文章末尾有地址。
application.yml
## primary 数据源配置
primary:
datasource:
url: jdbc:mysql://localhost:3306/javashop?useUnicode=true&characterEncoding=utf8
username: root
password: 123456
driverClassName: com.mysql.jdbc.Driver
## secondary 数据源配置
secondary:
datasource:
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8
username: root
password: 123456
driverClassName: com.mysql.jdbc.Driver
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
测试:
@RunWith(SpringRunner.class)
@SpringBootTest
public class MultipartMybatisDatasourceApplicationTests {
@Autowired
UserServiceImpl userService;
@Autowired
HomeServiceImpl homeService;
@Test
public void contextLoads() {
UserEntity userEntity = new UserEntity();
userEntity.setId(1L);
userEntity.setName("Lensen");
userEntity.setMobile("13738718660");
HomeEntity homeEntity = new HomeEntity();
homeEntity.setId(1L);
homeEntity.setUserId(1L);
homeEntity.setCity("杭州");
homeEntity.setTown("西湖区");
userService.saveUser(userEntity);
homeService.saveHome(homeEntity);
userService.getUserById(1L);
homeService.getHomeByUserId(1L);
}
}
代码可以在我的github.com中找到。
That's All。 关注我的公众号,也不一定会更新文章。hahah~~

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
Spring+ Spring cloud + SSO单点登录应用认证
之前的文章中有介绍spring cloud sso集成的方案,也做过spring + jwt + redis的解决方案,不同系统的无缝隙集成,统一的sso单点登录界面的管理、每个应用集成的权限认证,白名单等都是我们需要考虑的,现在针对于以上的问题我们做了sso单点登录应用认证平台,设计如下: 数据库设计: DROP TABLE IF EXISTS `sso_app_apply`; CREATE TABLE `sso_app_apply` ( `id` varchar(200) NOT NULL COMMENT '编号', `type` varchar(200) NOT NULL COMMENT '所属分类', `applicant` varchar(200) NOT NULL COMMENT '申请人', `approver` varchar(200) NOT NULL COMMENT '审批人', `appname` varchar(200) NOT NULL COMMENT '应用名称', `range` varchar(200) NOT NULL COMMENT '使用范围', ...
-
下一篇
2018互联网企业最新面试大纲180+道Java面试题目!含答案解析!
在进入正文之前,顺便给大家推荐一个Java架构方面的交流学习群:878249276,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。相信对于已经工作和遇到技术瓶颈的同学,在这个群里会有你需要的内容。有需要的同学请抓紧时间加入进来。 大厂常见问题 写视频点播网站文件下载接口 基础变量/数组写出模拟maven导入包过程 写出新变脸内存分配,模拟垃圾回收过程 50个白球50个红球,两个盒子,怎么放让人随机在一个盒子里抽到红球概率最高 n个数里取两个和为s的数 java数据结构 HashMap原理 自定义类型可以作为Key么? java内存模型 知道的排序算法 快排的优化 Java多线程实现方式 Java线程与进程区别 JVM内存模型+垃圾回收算法 hashmap和treemap的区别 操作系统同步方式、通信方式 计算机网络三次握手四次分手以及wait_time三种差别 http post和get差别 美赛的建模 k-means 算法 数据库的三范式 路由器和交换机...
相关文章
文章评论
共有0条评论来说两句吧...