SpringBoot 分包方式多数据源
1、引入依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-parent</artifactId>
<version>2.0.6.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!--mybatis起步依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<!--mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
2、配置application.properties中配置多个数据源
#slave dataSource数据源
spring.datasource.slave.driver-class-name =com.mysql.jdbc.Driver
spring.datasource.slave.jdbc-url =jdbc:mysql://localhost:3306/study?useUnicode=true&characterEncoding=utf-8
spring.datasource.slave.username =root
spring.datasource.slave.password =root
#master dataSource数据源
spring.datasource.master.driver-class-name =com.mysql.jdbc.Driver
spring.datasource.master.jdbc-url =jdbc:mysql://localhost:3306/study01?useUnicode=true&characterEncoding=utf-8
spring.datasource.master.username =root
spring.datasource.master.password =root
3、创建多个配置类
数据源1;
@Configuration
@MapperScan(basePackages =DataSourceMaterConfig.PACKAGE,sqlSessionFactoryRef = "masterSqlSessionFactory")
public class DataSourceMaterConfig {
// master dao所在的包
public static final String PACKAGE = "com.yehui.mapper.master";
//配置文件所在目录
//private static final String MAPPER_LOCATION = "classpath:mapper/master/*.xml"; @Bean(name = "mapper/master")
@Primary //默认访问
@ConfigurationProperties(prefix = "spring.datasource.master")
public DataSource msaterDataSource() {
return DataSourceBuilder.create().build();
} // 创建Session
@Bean(name = "masterSqlSessionFactory")
@Primary //默认访问
public SqlSessionFactory sqlSessionFactory() throws Exception {
final SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(msaterDataSource());
/* 使用配置文件是加入
Resource[] mapperLocations = new PathMatchingResourcePatternResolver()
.getResources(DataSourceMaterConfig.MAPPER_LOCATION);
sqlSessionFactoryBean.setMapperLocations(mapperLocations);*/
return sqlSessionFactoryBean.getObject();
} // 数据源事务管理器
@Bean(name = "masterDataSourceTransactionManager")
@Primary //默认访问
public DataSourceTransactionManager masterDataSourceTransactionManager() {
return new DataSourceTransactionManager(msaterDataSource());
}
}
数据源2:
@Configuration
@MapperScan(basePackages =DataSourceSalveConfig.PACKAGE,sqlSessionFactoryRef = "slaveSqlSessionFactory")
public class DataSourceSalveConfig {
// slave dao所在的包
public static final String PACKAGE = "com.yehui.mapper.slave";
//配置文件所在目录
private static final String MAPPER_LOCATION = "classpath:mapper/slave/*.xml"; @Bean(name = "mapper/slave")
@ConfigurationProperties(prefix = "spring.datasource.slave")
public DataSource slaveDataSource() {
return DataSourceBuilder.create().build();
} // 创建Session
@Bean(name = "slaveSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory() throws Exception {
final SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(slaveDataSource());
/*使用配置文件时加入 Resource[] mapperLocations = new PathMatchingResourcePatternResolver()
.getResources(DataSourceSalveConfig.MAPPER_LOCATION);
sqlSessionFactoryBean.setMapperLocations(mapperLocations);*/
return sqlSessionFactoryBean.getObject();
} // 数据源事务管理器
@Bean(name = "slaveDataSourceTransactionManager")
public DataSourceTransactionManager slaveDataSourceTransactionManager() {
return new DataSourceTransactionManager(slaveDataSource());
}
}
4、创建多个包mapper
数据源1:
package com.yehui.mapper.master; import org.apache.ibatis.annotations.Select; import java.util.List;
import java.util.Map; public interface MasterMapper { @Select("SELECT * FROM tb_user")
public List<Map<String,Object>> selectList();
}
数据源2:
package com.yehui.mapper.slave; import org.apache.ibatis.annotations.Select; import java.util.List;
import java.util.Map; public interface SlaveMapper {
@Select("SELECT * FROM tb_user")
public List<Map<String,Object>> selectList();
}
5、创建service类
@Service
public class UserService { @Autowired
private MasterMapper masterMapper; @Autowired
private SlaveMapper savlesMapper; public List<Map<String,Object>> selectList1(){
return masterMapper.selectList();
} public List<Map<String,Object>> selectList2(){
return savlesMapper.selectList();
}
}
6、测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class DataSourceTest {
@Autowired
private UserService userService;
@Test
public void test1(){
List<Map<String, Object>> mapList = userService.selectList1();
System.out.println(mapList);
}
@Test
public void test2(){
List<Map<String, Object>> mapList = userService.selectList2();
System.out.println(mapList);
}
}
注意配置过程中如果报此错误
No qualifying bean of type 'javax.sql.DataSource' available: more than one 'primary' bean found amon
导致原因@Primary这个注解只能在一个包下存在,不能在其他存在
SpringBoot 分包方式多数据源的更多相关文章
- Android开源项目分包方式学习(eoe、oschina、github)
总感觉Android中关于分包的文章很少,或者几乎可以说没有.但是合理地分包,又可以使整个项目模块化,减少包与包之间的依赖,让整个项目的框架更加清晰,更利于后续功能的拓展. 因为没有相关的文章,所以这 ...
- SpringBoot整合阿里Druid数据源及Spring-Data-Jpa
SpringBoot整合阿里Druid数据源及Spring-Data-Jpa https://mp.weixin.qq.com/s?__biz=MzU0MDEwMjgwNA==&mid=224 ...
- springboot 中使用Druid 数据源提供数据库监控
一.springboot 中注册 Servlet/Filter/Listener 的方式有两种,1 通过代码注册 ServletRegistrationBean. FilterRegistration ...
- springboot 2 Hikari 多数据源配置问题(dataSourceClassName or jdbcUrl is required)
springboot 2 Hikari 多数据源配置问题(dataSourceClassName or jdbcUrl is required) 最近在项目中想试一下使用 Hikari 连接池,以前用 ...
- SpringBoot与动态多数据源切换
本文简单的介绍一下基于SpringBoot框架动态多数据源切换的实现,采用主从配置的方式,配置master.slave两个数据库. 一.配置主从数据库 spring: datasource: ty ...
- SpringBoot | 3.1 配置数据源
目录 前言 1. 数据源的自动配置 2. *数据源自动配置源码分析 2.1 DataSourceAutoConfiguration:数据源自动配置类 2.2 JdbcTemplateAutoConfi ...
- Eclipse版本android 65535解决方案(原理等同android studio现在的分包方式)
由于工作的需要看了下Eclipse下android65535的解决方案,查了好多文档,真心的发自内心的说一句请不要再拷贝别人的博客了,害人,真害人. 接下来我说下我的实现方式,首先说下65535的最可 ...
- FU-A分包方式,以及从RTP包里面得到H.264数据和AAC数据的方法。。
[原创] RFC3984是H.264的baseline码流在RTP方式下传输的规范,这里只讨论FU-A分包方式,以及从RTP包里面得到H.264数据和AAC数据的方法. 1.单个NAL包单元 12字节 ...
- SpringBoot+MyBatis配置多数据源
SpringBoot 可以支持多数据源,这是一个非常值得学习的功能,但是从现在主流的微服务的架构模式中,每个应用都具有唯一且准确的功能,多数据源的需求很难用到,考虑到实际情况远远比理论复杂的多,这里还 ...
随机推荐
- Fragment 和 Activity 之间通信
在 Activity 中获取 Fragment 实例: FragmentManager 提供了一个类似于 findViewById 的方法,专门用于从布局文件中获取 Fragment 实例: //通过 ...
- Java web学习总结
javaweb学习总结(十四)——JSP原理 孤傲苍狼 2014-07-24 09:38 阅读:46603 评论:37 JavaWeb学习总结(十三)——使用Session防止表单重复提交 孤 ...
- Careercup - Microsoft面试题 - 5799446021406720
2014-05-12 07:17 题目链接 原题: Given below is a tree/trie A B c D e F a<b<e<>>c<>d&l ...
- 【LoadRunner】对摘要认证的处理
近期项目中,进行http协议的接口性能测试过程中,需要进行登录接口的摘要认证,分享一下测试经验. 测试准备 测试工具:LoadRunner11 测试类型:接口测试--某系统登录接口 步骤 根据系统接口 ...
- Python学习-day10(番外篇) 阻塞IO 非阻塞IO 同步IO 异步IO
这个章节的内容是关于IO的概念,谈一谈什么是 阻塞IO 非阻塞IO 同步IO 异步IO.以下摘要是我对这四种IO的一个形象理解. 场景是去去银行办理业务.节点有三个,1)到银行提交申请:2)取号:3) ...
- Normal synchronous FIFO mode 和 Show-ahead synchronous FIFO mode
FIFO是先进先出,可以用fifo来处理跨时钟域的数据传输问题,用到的地方特别多,一定要搞会. 在学习调用fifo的IP核中发现有normal synchronous FIFO mode 和 Show ...
- Leetcode 599.两个列表的最小索引总和
两个列表的最小索引总和 假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示. 你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅. 如果答 ...
- 双网卡只有一个能ping通的解决办法
来源:http://blog.csdn.net/centerpoint/article/details/38542719 Linux默认启用了反向路由检查 如果2个网卡在一个Lan里面,那么服务器可能 ...
- sed处理大txt文件(1G) 比如替换某一串字符串,或者删除一行
1.将11.sql文件中"prompt"替换为"--prompt",然后保存为111.sql文件 sed -e "s,prompt,--prompt, ...
- docker端口的映射顺序
sudo docker run -d -p 8080:80 --name static_web jamtur01/static_web nginx -g "dameon off;" ...