mysql多数据源配置
pringBoot和Mybatis配置多数据源连接多个数据库
目前业界操作数据库的框架一般是 Mybatis,但在很多业务场景下,我们需要在一个工程里配置多个数据源来实现业务逻辑。在SpringBoot中也可以实现多数据源并配合Mybatis框架编写xml文件来执行SQL。在SpringBoot中,配置多数据源的方式十分便捷,
下面开始上代码:
在pom.xml文件中需要添加一些依赖
org.mybatis.spring.boot mybatis-spring-boot-starter 1.2.0 mysql mysql-connector-java 5.1.39 com.alibaba druid 1.0.18 application.properties 配置两个数据源配置 # master 数据源配置 master.datasource.url=jdbc:mysql://localhost:3306/springbootdb?useUnicode=true&characterEncoding=utf8 master.datasource.username=root master.datasource.password=321 master.datasource.driverClassName=com.mysql.jdbc.Driver
second 数据源配置
second.datasource.url=jdbc:mysql://localhost:3306/springbootdb_second?useUnicode=true&characterEncoding=utf8
second.datasource.username=root
second.datasource.password=321
second.datasource.driverClassName=com.mysql.jdbc.Driver
数据源配置
多数据源配置的时候注意,必须要有一个主数据源,即 MasterDataSourceConfig 配置
@Primary 标志这个 Bean 如果在多个同类 Bean 候选时,该 Bean 优先被考虑。「多数据源配置的时候注意,必须要有一个主数据源,用 @Primary 标志该 Bean
@MapperScan 扫描 Mapper 接口并容器管理,包路径精确到 master,为了和下面 cluster 数据源做到精确区分
@Value 获取全局配置文件 application.properties 的 kv 配置,并自动装配sqlSessionFactoryRef 表示定义了 key ,表示一个唯一 SqlSessionFactory 实例
MasterDataSourceConfig的代码:
@Configuration
// 扫描 Mapper 接口并容器管理
@MapperScan(basePackages = MasterDataSourceConfig.PACKAGE, sqlSessionFactoryRef = “masterSqlSessionFactory”)
public class MasterDataSourceConfig {
// 精确到 master 目录,以便跟其他数据源隔离
static final String PACKAGE = "org.spring.springboot.dao.master";
static final String MAPPER_LOCATION = "classpath:mapper/master/*.xml";@Value("${master.datasource.url}")
private String url;@Value("${master.datasource.username}")
private String user;@Value("${master.datasource.password}")
private String password;@Value("${master.datasource.driverClassName}")
private String driverClass;@Bean(name = "masterDataSource")
@Primary
public DataSource masterDataSource() {DruidDataSource dataSource = new DruidDataSource();dataSource.setDriverClassName(driverClass);dataSource.setUrl(url);dataSource.setUsername(user);dataSource.setPassword(password);return dataSource;
}@Bean(name = "masterTransactionManager")
@Primary
public DataSourceTransactionManager masterTransactionManager() {return new DataSourceTransactionManager(masterDataSource());
}@Bean(name = "masterSqlSessionFactory")
@Primary
public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource masterDataSource)throws Exception {final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(masterDataSource);sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MasterDataSourceConfig.MAPPER_LOCATION));return sessionFactory.getObject();
}
}
第二个数据源SecondDataSourceConfig的配置如下:
@Configuration
// 扫描 Mapper 接口并容器管理
@MapperScan(basePackages = SecondDataSourceConfig.PACKAGE, sqlSessionFactoryRef = “secondSqlSessionFactory”)
public class SecondDataSourceConfig {
// 精确到 cluster 目录,以便跟其他数据源隔离
static final String PACKAGE = "com.springboot.dao.second";
static final String MAPPER_LOCATION = "classpath:mapper/second/*.xml";@Value("${second.datasource.url}")
private String url;@Value("${second.datasource.username}")
private String user;@Value("${second.datasource.password}")
private String password;@Value("${second.datasource.driverClassName}")
private String driverClass;@Bean(name = "secondDataSource")
public DataSource clusterDataSource() {DruidDataSource dataSource = new DruidDataSource();dataSource.setDriverClassName(driverClass);dataSource.setUrl(url);dataSource.setUsername(user);dataSource.setPassword(password);return dataSource;
}@Bean(name = "secondTransactionManager")
public DataSourceTransactionManager clusterTransactionManager() {return new DataSourceTransactionManager(clusterDataSource());
}@Bean(name = "secondSqlSessionFactory")
public SqlSessionFactory clusterSqlSessionFactory(@Qualifier("secondDataSource") DataSource clusterDataSource)throws Exception {final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(clusterDataSource);sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(SecondDataSourceConfig.MAPPER_LOCATION));return sessionFactory.getObject();
}
}
到此,不同的数据源配置就已经完成,剩下的只需要将将Mybatis的xml文件和DAO层的接口写好,并在Service层注入,直接使用就行。
Service层的代码:
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Autowired
private SchoolDao schoolDao;public UserVo getUser(Long id) {UserVo userVo = userDao.findById(id);SchoolVo schoolVo = schoolDao.findByName("清华");userVo.setSchoolVo(schoolVo);return userVo;
}
}
Mybatis的xml文件UserDao.xml和SchoolDao.xml的内容:
UserDao.xml
<?xml version="1.0" encoding="UTF-8" ?>
<sql id="Base_Column_List">id, user_name
</sql><select id="findById" resultMap="BaseResultMap" parameterType="java.lang.Long">select<include refid="Base_Column_List" />fromuserwhereid = #{id}
</select>
SchoolDao.xml
<?xml version="1.0" encoding="UTF-8" ?>
<sql id="Base_Column_List">id, school_name, school_describe
</sql><select id="findByName" resultMap="BaseResultMap" parameterType="java.lang.String">select<include refid="Base_Column_List" />fromschoolwhereschool_name = #{schoolName}
</select>
TestController
@Controller
@RequestMapping(value = “/api/v1/test”)
public class TestController {
@Autowired
private UserService userService;@RequestMapping(value = "/getUser")
@ResponseBody
public UserVo getUser(@RequestParam(value = "id") Long id) {return userService.getUser(id);
}
}
创建数据库和表SQL:
CREATE DATABASE springbootdb;
CREATE DATABASE springbootdb_second;
CREATE TABLE user
(
id
int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘用户编号’,
user_name
varchar(25) DEFAULT NULL COMMENT ‘用户名称’,
description
varchar(25) DEFAULT NULL COMMENT ‘描述’,
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
CREATE TABLE school
(
id
bigint(20) NOT NULL,
school_name
varchar(64) DEFAULT NULL COMMENT ‘学校名’,
school_describe
varchar(128) DEFAULT NULL COMMENT ‘学校描述’,
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
insert into springbootdb
.user
( user_name
, description
) values ( ‘shuai’, ‘so handsome’);
insert into springbootdb_second
.school
( id
, school_name
, school_describe
) values ( ‘1’, ‘清华’, ‘自强不息,厚德载物’);
创建好数据后,整个工程的机构如下:
启动程序,在浏览器输入:http://localhost:8080/api/v1/test/getUser?id=1即可返回结果。
工程结构.png
作者:ChinaXieShuai
链接:https://www.jianshu.com/p/735852145580
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
mysql多数据源配置相关推荐
- do与mysql数据类型对照_dophon-db: dophon框架的数据库模块,支持mysql,sqlite数据库,带有orm持久化功能与链式操作实例,贴近逻辑习惯,支持mysql多数据源配置...
dophon-db 项目介绍 dophon框架的数据库模块,也可单独作为一个与数据库模块交互的部件 支持mysql数据库连接 支持orm形式的数据操作 如有疑问请发送邮件联系作者:ealohu@163 ...
- 使用springboot + druid + mybatisplus完成多数据源配置
一. 简介 1. 版本 springboot版本为2.0.3.RELEASE,mybatisplus版本为2.1.9, druid版本为1.1.9,swagger版本为2.7.0 2. 项目地址 ...
- c3p0数据源配置抛出Could not load driverClass com.mysql.jdbc.Driver的解决方案
c3p0数据源配置抛出Could not load driverClass com.mysql.jdbc.Driver的解决方案 参考文章: (1)c3p0数据源配置抛出Could not load ...
- mysql druid 多数据源_SpringBoot使用阿里数据库连接池Druid以及多数据源配置
SpringBoot使用阿里数据库连接池Druid以及多数据源配置 引入依赖 com.alibaba druid 1.0.29 数据源配置 1.数据源 #master数据源 spring.dataso ...
- spring boot多数据源配置(mysql,redis,mongodb)实战
使用Spring Boot Starter提升效率 虽然不同的starter实现起来各有差异,但是他们基本上都会使用到两个相同的内容:ConfigurationProperties和AutoConfi ...
- 润乾报表配置mysql数据源_润乾报表在proxool应用下的数据源配置
大多数应用会使用proxool数据连接池,proxool.xml的配置文件如下: db jdbc:mysql://×××.×××.××.×××:3303/mydb com.mysql.jdbc. ...
- .net odbc连接mysql数据库,下载安装MySQL数据库ODBC驱动和配置MySQL ODBC数据源
1. 下载MySQL ODBC驱动: 打开的页面如下图所示,可根据实际使用情况选择下载相应的MSI安装程序,使用Visual C++ 6.0环境编程请下载32位MSI安装程序. 点击下载后出现如下页面 ...
- boot jndi数据源 spring_spring boot多数据源配置(mysql,redis,mongodb)实战
使用Spring Boot Starter提升效率 虽然不同的starter实现起来各有差异,但是他们基本上都会使用到两个相同的内容:ConfigurationProperties和AutoConfi ...
- mysql 多数据源访问_通过Spring Boot配置动态数据源访问多个数据库的实现代码
之前写过一篇博客<Spring+Mybatis+Mysql搭建分布式数据库访问框架>描述如何通过Spring+Mybatis配置动态数据源访问多个数据库.但是之前的方案有一些限制(原博客中 ...
最新文章
- 离不开的“微服务”架构,脱不开的RPC细节(收藏)
- python爬携程_python爬虫-携程-eleven参数
- GitHub轻松阅读微服务实战项目流程详解【第一天:数据库表设计及其环境搭建、项目运行】
- C# this关键字的3种用法
- 【零基础学Java】—对象的内存图(八)
- 开源软件冲破云霄,“机智号”直升机首飞成功,还带来了第一个火星机场!...
- Google Chrome 工程师:JavaScript 不容错过的八大优化建议
- python设置excel格式_Python使用xlwt写excel并设置写入格式
- html网页表单设计实验报告,网页设计实验报告(学生).doc
- ionic html5 上传图片,ionic文件选择与ionic文件上传
- 如何用Android Stuido 调用百度翻译的API
- Ubuntu设置PPPoE拨号上网
- protal认证的稳定性测试脚本
- ChinaSoft 论坛巡礼 | 服务生态系统的构建、运维与演化
- 浙江大学 工程伦理 第十二单元测试答案
- python中*args和**kargs得用法总结
- 用树莓派做电视盒子,安装Android TV系统
- 什么叫别让孩子输在起跑线上?! - 电子产品已成儿童“多动症”诱因
- springboot整合ehcache使用
- vim复制粘贴的命令