律师网站建设哪家专业,wordpress留言模板,wordpress评论点评,计算机网站建设考试试卷最简单的SpringBootMyBatis多数据源实现1.数据库准备2.环境准备3.代码部分3.1多数据源配置2.测试随着应用用户数量的增加#xff0c;相应的并发请求的数量也会跟着不断增加#xff0c;慢慢地#xff0c;单个数据库已经没有办法满足频繁的数据库操作请求了#xff0c;在某些…
最简单的SpringBootMyBatis多数据源实现1.数据库准备2.环境准备3.代码部分3.1多数据源配置2.测试随着应用用户数量的增加相应的并发请求的数量也会跟着不断增加慢慢地单个数据库已经没有办法满足频繁的数据库操作请求了在某些场景下可能会需要配置多个数据源使用多个数据源(例如实现数据库的读写分离)来缓解系统的压力等同样的Springboot官方提供了相应的实现来帮助开发者们配置多数据源一般分为两种方式(目前所了解到的)分包和AOP。
考虑到mybatis是java开发使用较为频繁的数据库框架所以使用SpringbootMybatis来实现多数据源的配置。
1.数据库准备
既然是配置多数据源那么自然就要先把相应的数据源给准备好本地新建了两个数据库如下表
数据库数据表字段testdatasource1sys_useruser_id(int), user_name(varchar) user_ageinttestdatasource2sys_user2同上
并分别插入两条记录为了方便对比其中testdatasource1为芳年25岁的张三 testdatasource2为芳年30岁的李四。
2.环境准备
首先新建一个Springboot项目这里版本是2.1.7.RELEASE并在pom文件中引入相关依赖关键依赖如下:
dependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactIdversion1.3.2/version
/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactId
/dependency3.代码部分
3.1多数据源配置
首先呢在Springboot的配置文件中配置的datasourse和以往不一样的是因为有两个数据源所以要指定相关数据库的名称其中主数据源为primary次数据源为secondary如下:
#配置主数据库
spring.datasource.primary.jdbc-urljdbc:mysql://localhost:3306/testdatasource1?useUnicodetruecharacterEncodingUTF-8serverTimezoneUTCuseSSLfalse
spring.datasource.primary.usernameroot
spring.datasource.primary.passwordroot
spring.datasource.primary.driver-class-namecom.mysql.cj.jdbc.Driver##配置次数据库
spring.datasource.secondary.jdbc-urljdbc:mysql://localhost:3306/testdatasource2?useUnicodetruecharacterEncodingUTF-8serverTimezoneUTCuseSSLfalse
spring.datasource.secondary.usernameroot
spring.datasource.secondary.passwordroot
spring.datasource.secondary.driver-class-namecom.mysql.cj.jdbc.Driverspring.http.encoding.charsetUTF-8
spring.http.encoding.enabledtrue
spring.http.encoding.forcetrue需要注意的是Springboot2.0 在配置数据库连接的时候需要使用jdbc-url如果只使用url的话会报 jdbcUrl is required with driverClassName.错误。 新建一个配置类PrimaryDataSourceConfig用于配置的主数据库相关的bean代码如下:
Configuration
//basePackages:接口文件的包路径
MapperScan(basePackages com.jdkcb.mybatisstuday.mapper.one, sqlSessionFactoryRef PrimarySqlSessionFactory)
public class PrimaryDataSourceConfig {Bean(name PrimaryDataSource)// 表示这个数据源是默认数据源Primary//这个一定要加如果两个数据源都没有Primary会报错ConfigurationProperties(prefix spring.datasource.primary)//配置文件中的前缀public DataSource getPrimaryDateSource() {return DataSourceBuilder.create().build();}Bean(name PrimarySqlSessionFactory)Primarypublic SqlSessionFactory primarySqlSessionFactory(Qualifier(PrimaryDataSource) DataSource datasource)throws Exception {SqlSessionFactoryBean bean new SqlSessionFactoryBean();bean.setDataSource(datasource);bean.setMapperLocations( new PathMatchingResourcePatternResolver().getResources(classpath*:mapping/one/*.xml));return bean.getObject();// 设置mybatis的xml所在位置}Bean(PrimarySqlSessionTemplate)// 表示这个数据源是默认数据源Primarypublic SqlSessionTemplate primarySqlSessionTemplate(Qualifier(PrimarySqlSessionFactory) SqlSessionFactory sessionfactory) {return new SqlSessionTemplate(sessionfactory);}}注解说明:
MapperScan 配置mybatis的接口类放的地方
Primary :表示使用的是默认数据库这个一个要加否则会因为不知道哪个数据库是默认数据库而报错
ConfigurationProperties读取application.properties中的配置参数映射成为一个对象其中prefix表示参数的前缀
大功告成~ ~ 了吗并没有然后配置的第二个数据源的配置类,代码如下
Configuration
MapperScan(basePackages com.jdkcb.mybatisstuday.mapper.two, sqlSessionFactoryRef SecondarySqlSessionFactory)
public class SecondaryDataSourceConfig {Bean(name SecondaryDataSource)ConfigurationProperties(prefix spring.datasource.secondary)public DataSource getSecondaryDataSource() {return DataSourceBuilder.create().build();}Bean(name SecondarySqlSessionFactory)public SqlSessionFactory secondarySqlSessionFactory(Qualifier(SecondaryDataSource) DataSource datasource)throws Exception {SqlSessionFactoryBean bean new SqlSessionFactoryBean();bean.setDataSource(datasource);bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(classpath*:mapping/two/*.xml));return bean.getObject();// 设置mybatis的xml所在位置}Bean(SecondarySqlSessionTemplate)public SqlSessionTemplate secondarySqlSessionTemplate(Qualifier(SecondarySqlSessionFactory) SqlSessionFactory sessionfactory) {return new SqlSessionTemplate(sessionfactory);}剩下的就是编写相应的xml文件和接口类了代码如下:
Component
Mapper
public interface PrimaryUserMapper {ListUser findAll();
}Component
Mapper
public interface SecondaryUserMapper {ListUser findAll();
}相关的xml文件如下:
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.jdkcb.mybatisstuday.mapper.one.PrimaryUserMapperselect idfindAll resultTypecom.jdkcb.mybatisstuday.pojo.Userselect * from sys_user;/select
/mapper?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.jdkcb.mybatisstuday.mapper.two.SecondaryUserMapperselect idfindAll resultTypecom.jdkcb.mybatisstuday.pojo.Userselect * from sys_user2;/select/mapper注:其中xml文件在本实例中目录为resources/mapping 2.测试
编写一个Controller用于测试因为是测试实例且代码相对来说较为简单所以这里就不写Service层了。
代码如下:
RestController
public class UserController {Autowiredprivate PrimaryUserMapper primaryUserMapper;Autowiredprivate SecondaryUserMapper secondaryUserMapper;RequestMapping(/primary)public Object primary(){ListUser list primaryUserMapper.findAll();return list;}RequestMapping(/secondary)public Object secondary (){ListUser list secondaryUserMapper.findAll();return list;}}在浏览器分别输入:http://127.0.0.1:8080/primary 和 http://127.0.0.1:8080/secondary
结果如下:
[{user_id:1,user_name:张三,user_age:25}] //primary
[{user_id:1,user_name:李四,user_age:30}] //secondary