springboot多数据源配置和使用
yml配置数据源
这个直接把多个数据库连接信息写上即可,用spring.datasource属性进行配置,如下:
spring:
profiles: dev
datasource:
test1:
jdbc-url: jdbc:mysql://10.204.58.202:3306/uniorder_sit1?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
username: uniorder
password: uniorder123.com
type: com.alibaba.druid.pool.DruidDataSource
test2:
jdbc-url: jdbc:mysql://10.204.53.175:3306/ishare?allowMultiQueries=true
username: pay
password: pay123.com
type: com.alibaba.druid.pool.DruidDataSource
注意spring boot 2.x之后要用 jdbc-url,不能用jdbc或者url。因为在2.x之后 spring boot把默认的JDBC连接池由 tomcat 换成了 HikariCP,后者只有jdbcUrl属性。
有兴趣的可以看看官方的说明,
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-configure-a-datasource
type 是指定Resource所属的Java类名。
config配置类
比如说有两个数据源,我们最好是组织两个配置类,这样结构清晰一些。
test1的配置类,
@Configuration
@MapperScan(basePackages = "com.example.dao.test1", sqlSessionTemplateRef = "db1SqlSessionTemplate")
public class Test1DBConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.test1")
public DataSource db1DataSource(){
return DataSourceBuilder.create().build();
}
@Bean
public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/test1/**/*.xml"));
return bean.getObject();
}
@Bean
public DataSourceTransactionManager db1TransactionManager(@Qualifier("db1DataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean
public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
解释一下,
@Configuration用于定义配置类,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法启动时被扫描来构建 bean 定义,初始化 spring 容器。相当于以前的 xml 配置 bean 的方式。
@MapperScan时 mybatis 的注解,用于告诉spring去扫描相关的package去发现相应的接口并利用mybatis对其做实现。这个注解可以加到配置类上,也可以加到spring boot 启动类上。这个package路径下放的就是mybatis生成的mapper接口类。
test2的配置类类似,这里不贴出来了。
mybatis接口和实现
mybatis的接口,实体定义,以及xml的sql实现,都可以用插件直接生成,这里就不详述了。
测试
我们可以写一个测试的controller来验证一下。
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
Test1DAO test1DAO;
@Autowired
Test2DAO test2DAO;
@GetMapping("/test1")
public String test1(){
User user = new User();
test1DAO.insert(user);
}
@GetMapping("/test2")
public String test2(){
User user = new User();
test2DAO.insert(user);
}
}
多数据源下的事务问题
多数据源下使用事务时,需要在注解上明确是哪个数据源,类似下面这样,否则会报找不到事务管理实例的错误。
@Transactional(value = "db1TransactionManager",rollbackFor = Exception.class)
@Override
public void run(Long startID, Long endID, boolean isCheck) {
...
- 如何在RedHat6上使用Bind搭建DNS服务
- 如何使用Cloudera Manager升级Spark2.1版本至Spark2.2
- Cloudera Manager分发Parcel异常分析
- 如何在Hue中配置Impala的负载均衡
- 35行代码实现千万级别字典的快速去重
- PIMS三个漏洞+里程密最新版V2.3 SQL注入漏洞
- 如何在Redhat7.3安装CDH5.14
- CDSW1.3的新功能
- 如何在Hue中配置HiveServer2的负载均衡
- 如何修改CDH集群的IP地址
- 如何在Kerberos环境的CDH集群部署Livy
- 如何在Kerberos环境下使用Haproxy实现HiveServer2负载均衡
- Hive与Impala的关键字
- 如何通过Livy的RESTful API接口向非Kerberos环境的CDH集群提交作业
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Centreon+Nagios实战第八篇——Nagios+Centreon添加监控服务
- Centreon+Nagios实战第九篇——利用nrpe插件监控本机
- 第四篇 CentOs7下安装Zabbix
- 第十三篇 zabbix创建Item
- 第十四篇 zabbix创建自定义Item
- 【性能】688- 前端性能优化——从 10 多秒到 1.05 秒
- 第十六篇 zabbix创建Trigger
- 如何通过程序(java代码)提高你的博客访问量
- zabbix_get [12429]: Check access restrictions in Zabbix agent configuration
- 【设计模式】689- TypeScript 设计模式之观察者模式
- Found a swap file by the name ".jsidInspector.py.swp"
- CentOs7下部署tomcat文件服务器
- 【拓展】未来的JavaScript记录与元组
- 【Vuejs】690- Vue新特性:CSS 中使用 JS 变量
- Zabbix监控之从Kafka中获取消费进度和lag