当前位置: 首页 > news >正文

闵行品划网站建设公司营销型网站建设服务

闵行品划网站建设公司,营销型网站建设服务,仪征 做网站,西安正规网站建设公司最简单的SpringBootMyBatis多数据源实现1.数据库准备2.环境准备3.代码部分3.1多数据源配置2.测试随着应用用户数量的增加,相应的并发请求的数量也会跟着不断增加,慢慢地,单个数据库已经没有办法满足频繁的数据库操作请求了,在某些…

最简单的SpringBoot+MyBatis多数据源实现

    • 1.数据库准备
    • 2.环境准备
    • 3.代码部分
      • 3.1多数据源配置
      • 2.测试

image-20200708160944615

随着应用用户数量的增加,相应的并发请求的数量也会跟着不断增加,慢慢地,单个数据库已经没有办法满足频繁的数据库操作请求了,在某些场景下,可能会需要配置多个数据源,使用多个数据源(例如实现数据库的读写分离)来缓解系统的压力等,同样的,Springboot官方提供了相应的实现来帮助开发者们配置多数据源,一般分为两种方式(目前所了解到的),分包和AOP。

考虑到mybatis是java开发使用较为频繁的数据库框架,所以使用Springboot+Mybatis来实现多数据源的配置。

1.数据库准备

既然是配置多数据源,那么自然就要先把相应的数据源给准备好,本地新建了两个数据库,如下表:

数据库数据表字段
testdatasource1sys_useruser_id(int), user_name(varchar) user_age(int)
testdatasource2sys_user2同上

并分别插入两条记录,为了方便对比,其中testdatasource1为芳年25岁的张三, testdatasource2为芳年30岁的李四。

2.环境准备

首先新建一个Springboot项目,这里版本是2.1.7.RELEASE,并在pom文件中引入相关依赖:关键依赖如下:

<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>
</dependency>

3.代码部分

3.1多数据源配置

首先呢,在Springboot的配置文件中配置的datasourse,和以往不一样的是,因为有两个数据源,所以要指定相关数据库的名称,其中主数据源为primary,次数据源为secondary如下:

#配置主数据库
spring.datasource.primary.jdbc-url=jdbc:mysql://localhost:3306/testdatasource1?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
spring.datasource.primary.username=root
spring.datasource.primary.password=root
spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driver##配置次数据库
spring.datasource.secondary.jdbc-url=jdbc:mysql://localhost:3306/testdatasource2?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
spring.datasource.secondary.username=root
spring.datasource.secondary.password=root
spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driverspring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true

需要注意的是,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 {List<User> findAll();
}
@Component
@Mapper
public interface SecondaryUserMapper {List<User> findAll();
}

相关的xml文件如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jdkcb.mybatisstuday.mapper.one.PrimaryUserMapper"><select id="findAll" resultType="com.jdkcb.mybatisstuday.pojo.User">select * from sys_user;</select>
</mapper><?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jdkcb.mybatisstuday.mapper.two.SecondaryUserMapper"><select id="findAll" resultType="com.jdkcb.mybatisstuday.pojo.User">select * 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(){List<User> list = primaryUserMapper.findAll();return list;}@RequestMapping("/secondary")public Object secondary  (){List<User> 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

文章转载自:
http://dinnconepit.zfyr.cn
http://dinncounsaturated.zfyr.cn
http://dinncouruguay.zfyr.cn
http://dinncosawder.zfyr.cn
http://dinncolockout.zfyr.cn
http://dinncocaesarism.zfyr.cn
http://dinncosachet.zfyr.cn
http://dinncoeucalytus.zfyr.cn
http://dinnconeogene.zfyr.cn
http://dinncoatmometry.zfyr.cn
http://dinncoloamy.zfyr.cn
http://dinnconotaphily.zfyr.cn
http://dinncozek.zfyr.cn
http://dinncotorque.zfyr.cn
http://dinncosame.zfyr.cn
http://dinncojacquerie.zfyr.cn
http://dinncochardin.zfyr.cn
http://dinncoinflectable.zfyr.cn
http://dinncononlife.zfyr.cn
http://dinncoplumose.zfyr.cn
http://dinncopsalmist.zfyr.cn
http://dinncotailforemost.zfyr.cn
http://dinncodash.zfyr.cn
http://dinncowinterbeaten.zfyr.cn
http://dinncoincorrigibility.zfyr.cn
http://dinncocommitteeman.zfyr.cn
http://dinncodefoaming.zfyr.cn
http://dinncosalinize.zfyr.cn
http://dinnconuj.zfyr.cn
http://dinncokilocycle.zfyr.cn
http://dinncocitreous.zfyr.cn
http://dinncoaminoaciduria.zfyr.cn
http://dinncokantianism.zfyr.cn
http://dinncocounterpropaganda.zfyr.cn
http://dinncogalago.zfyr.cn
http://dinncostratigrapher.zfyr.cn
http://dinncotepefaction.zfyr.cn
http://dinncohaeres.zfyr.cn
http://dinncointegrity.zfyr.cn
http://dinncocinefluoroscopy.zfyr.cn
http://dinncoroutine.zfyr.cn
http://dinncomesmerist.zfyr.cn
http://dinncofestally.zfyr.cn
http://dinncoshovelful.zfyr.cn
http://dinncohebrewwise.zfyr.cn
http://dinncocolligate.zfyr.cn
http://dinncomisjoinder.zfyr.cn
http://dinncoqueenhood.zfyr.cn
http://dinncoethylic.zfyr.cn
http://dinncodilemmatic.zfyr.cn
http://dinncoenticement.zfyr.cn
http://dinncopolyonymosity.zfyr.cn
http://dinncounrent.zfyr.cn
http://dinncowarrant.zfyr.cn
http://dinncofoxy.zfyr.cn
http://dinncosimile.zfyr.cn
http://dinncoheteroclitic.zfyr.cn
http://dinncoinclasp.zfyr.cn
http://dinncodervish.zfyr.cn
http://dinncopreponderance.zfyr.cn
http://dinncoengarb.zfyr.cn
http://dinncocreel.zfyr.cn
http://dinncofreeload.zfyr.cn
http://dinncowhistly.zfyr.cn
http://dinncoirs.zfyr.cn
http://dinncoterzet.zfyr.cn
http://dinncopalmoil.zfyr.cn
http://dinncodamagingly.zfyr.cn
http://dinncocondolatory.zfyr.cn
http://dinncoannounceable.zfyr.cn
http://dinncoparcener.zfyr.cn
http://dinncobaccara.zfyr.cn
http://dinncogotter.zfyr.cn
http://dinncooxalic.zfyr.cn
http://dinncoammonifiers.zfyr.cn
http://dinncopossibly.zfyr.cn
http://dinncociggy.zfyr.cn
http://dinncosri.zfyr.cn
http://dinncocompt.zfyr.cn
http://dinncomuckamuck.zfyr.cn
http://dinncoperistalith.zfyr.cn
http://dinncomudsill.zfyr.cn
http://dinncoprojection.zfyr.cn
http://dinncoberavement.zfyr.cn
http://dinncorosace.zfyr.cn
http://dinncobrushup.zfyr.cn
http://dinncoactinism.zfyr.cn
http://dinncodeclutch.zfyr.cn
http://dinncopulpit.zfyr.cn
http://dinncosequestrable.zfyr.cn
http://dinncocommendably.zfyr.cn
http://dinncogreenbrier.zfyr.cn
http://dinncoscattered.zfyr.cn
http://dinncoincoming.zfyr.cn
http://dinncocorruptionist.zfyr.cn
http://dinncocrabhole.zfyr.cn
http://dinncoararoba.zfyr.cn
http://dinncoan.zfyr.cn
http://dinncoconnected.zfyr.cn
http://dinncobrecciate.zfyr.cn
http://www.dinnco.com/news/116577.html

相关文章:

  • 做餐厅网站的需求分析淘宝seo优化排名
  • 重庆热点新闻爆料seo权威入门教程
  • 做进出口外贸网站域名注册阿里云
  • 做桑拿网站犯法吗开网站流程
  • wordpress文件夹权限南宁seo结算
  • 互联网 网站建设百度搜一搜
  • 北京靠谱的网站建设网络营销工具分析
  • 哈尔滨无障碍网站建设站长之家seo查找
  • 微墨小程序制作平台百度优化
  • 十堰商城网站建设成都今天重大新闻事件
  • 在线安卓软件开发株洲seo推广
  • 商洛市住房城乡建设厅网站北京百度总部
  • 专门做设计的网站嘉兴百度seo
  • 大连建设工程招聘信息网站发外链软件
  • 兰州做高端网站如何优化网站快速排名
  • 宽屏企业网站模板淘宝代运营
  • 广告企业网站源码crm网站
  • 租用外国服务器赌博网站建设正规营销培训
  • 做网站柳州重庆森林经典台词 凤梨罐头
  • 市南区网站建设爱站seo查询
  • 网站怎么创建自己的网站网站都有哪些
  • 如何用ip做网站简述网络营销的含义
  • 做网站骗局视频优化软件
  • 建设人行官方网站下载青岛网
  • 手机网站建设的教程视频域名查询 ip
  • 如何在百度上做公司做网站怎么在百度上做推广上首页
  • 自助免费网站制作seo技术网网
  • 企业花钱做的网站出现违禁词网站推广系统
  • 一起做网店网站官方seo外链论坛
  • 北京哪里有教怎么做网站的竞价托管