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

一个网站的后台电话推销网站建设

一个网站的后台,电话推销网站建设,网站建设接单,wordpress2016前言 在公司的系统里#xff0c;由于数据量较大#xff0c;所以配置了多个数据源#xff0c;它会根据用户所在的地区去查询那一个数据库#xff0c;这样就产生了动态切换数据源的场景。 今天#xff0c;就模拟一下在主库查询订单信息查询不到的时候#xff0c;切换数据…前言 在公司的系统里由于数据量较大所以配置了多个数据源它会根据用户所在的地区去查询那一个数据库这样就产生了动态切换数据源的场景。 今天就模拟一下在主库查询订单信息查询不到的时候切换数据源去历史库里面查询。 实现效果 首先我们设置查询的数据库为db1可以看到通过订单号没有查到订单信息然后我们重置数据源重新设置为db2同样的订单号就可以查询到信息。 数据库准备 新建两个数据库db1和db2db1作为主库db2作为历史库 两个库中都有一个订单表biz_order主库中没有数据历史库中有我们要查询的数据。 代码编写 1.新建一个springboot项目引入所需依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactId/dependency!--引入druid-替换默认数据库连接池--dependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-starter/artifactIdversion1.2.15/version/dependencydependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactIdversion2.2.2/version/dependency!--mysql驱动--dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.30/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency 2.application.yaml配置数据库信息 这里我们配置两个数据库的信息 spring:datasource:db1:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost/db1?characterEncodingutf8characterSetResultsutf8autoReconnecttruefailOverReadOnlyfalseusername: rootpassword: roottype: com.alibaba.druid.pool.DruidDataSourcedb2:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost/db2?characterEncodingutf8characterSetResultsutf8autoReconnecttruefailOverReadOnlyfalseusername: rootpassword: roottype: com.alibaba.druid.pool.DruidDataSource mybatis:mapper-locations: classpath:mapper/*.xml 3.创建数据源对象并注入spring容器中 新建DynamicDataSourceConfig.java文件在该配置文件中读取yaml配置的数据源信息并且通过该信息构造数据源对象然后通过Bean注解注入到spring容器中。 package com.it1997.config; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import javax.sql.DataSource; Configuration public class DynamicDataSourceConfig {Bean(dataSource1)ConfigurationProperties(prefix spring.datasource.db1)public DataSource oneDruidDataSource() {return DruidDataSourceBuilder.create().build();}Bean(dataSource2)ConfigurationProperties(prefix spring.datasource.db2)public DataSource twoDruidDataSource() {return DruidDataSourceBuilder.create().build();}Beanpublic DataSourceTransactionManager dataSourceTransactionManager1(Qualifier(dataSource1) DataSource dataSource1) {DataSourceTransactionManager dataSourceTransactionManager new DataSourceTransactionManager();dataSourceTransactionManager.setDataSource(dataSource1);return dataSourceTransactionManager;}Beanpublic DataSourceTransactionManager dataSourceTransactionManager2(Qualifier(dataSource2) DataSource dataSource2) {DataSourceTransactionManager dataSourceTransactionManager new DataSourceTransactionManager();dataSourceTransactionManager.setDataSource(dataSource2);return dataSourceTransactionManager;} } 4.数据源配置上下文信息 新建DynamicDataSourceHolder.java文件该文件通过ThreadLocal,实现为每一个线程创建一个保存数据源配置的上下文。并且提供setDataSource和getDataSource静态方法来设置和获取数据源的名称。 package com.it1997.config; public class DynamicDataSourceHolder {private static final ThreadLocalString contextHolder new ThreadLocal();public static void setDataSource(String dataSource) {contextHolder.set(dataSource);}public static String getDataSource() {return contextHolder.get();}public static void clearDataSource() {contextHolder.remove();} } 5.重写数据源配置类 新建DynamicDataSource.java文件该类继承AbstractRoutingDataSource 类重写父类determineCurrentLookupKey和afterPropertiesSet方法。 这里我们重写父类中afterPropertiesSet方法为什么要重写在这个方法可以看文章最后对于druid的源码的讲解在这个方法里我们将spring容器中的所有的数据源都给放到map里然后后续我们根据map中的key来获取不同的数据源super.afterPropertiesSet();通过这个方法设置上数据源。 在类上加上Primary注解让spring容器优先使用我们自定义的数据源否则还是会使用默认的数据源配置。 package com.it1997.config; import org.springframework.context.annotation.Primary; import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; import org.springframework.stereotype.Component; import javax.annotation.Resource; import javax.sql.DataSource; import java.util.HashMap; import java.util.Map; Component Primary public class DynamicDataSource extends AbstractRoutingDataSource {ResourceDataSource dataSource1;ResourceDataSource dataSource2;Overrideprotected Object determineCurrentLookupKey() {return DynamicDataSourceHolder.getDataSource();}Overridepublic void afterPropertiesSet() {// 初始化所有数据源MapObject, Object targetDataSource new HashMap();targetDataSource.put(db1, dataSource1);targetDataSource.put(db2, dataSource2);super.setTargetDataSources(targetDataSource);super.setDefaultTargetDataSource(dataSource1);super.afterPropertiesSet();} } druid数据源配置解读 点开我们刚刚继承的AbstractRoutingDataSource抽象类可以看到它又继承了AbstractDataSource 实现了InitializingBean接口。 然后我们在看一下druid的数据源配置是怎么实现的点开DruidDataSourceWrapper类可以看到它也是继承了AbstractDataSource 实现了InitializingBean接口。并且读取的是yaml文件中spring.datasource.druid下面配置的数据库连接信息。 而我们自定的一的数据源读取的是spring.datasource.db1下面配置的数据库连接信息。 druid的数据源配置实现了接口中afterPropertiesSet,在这个方法中设置了数据库的基本信息例如数据库连接地址、用户名、密码以及数据库连接驱动信息。
http://www.w-s-a.com/news/974969/

相关文章:

  • 可以登录国外网站吗如何用家用电脑做网站
  • 吉安建站公司wordpress企业
  • 河北住房和城乡建设厅网站6thinkphp做视频网站
  • 遵义网站制作一般需要多少钱深圳全国网站制作哪个好
  • 公众平台网站价格哪个网站做餐饮推广最好
  • 深圳 公司网站设计重庆的网站设计公司价格
  • 网站开发市场分析餐饮平台app有哪些
  • 制作一个收费网站要多少钱开发网站需要什么技术
  • 网站流量统计平台二手域名做网站不收录
  • 蒙古网站后缀mysql8.0 wordpress
  • 免费建立一个网站互联网推广培训
  • WordPress多站点绑定域名深圳住房建设部官方网站
  • 网站建设公司zgkr上海网页网络技术有限公司
  • wordpress附件扩展格式徐州seo关键词
  • wordpress博客站模板织梦网站 联系方式修改
  • 北京城乡建设厅网站重庆网站建设解决方案
  • 网站建设和维护工作内容网站的空间与域名
  • 济南做门户网站开发公司网页发布的步骤
  • 江苏省交通厅门户网站建设管理办法做的网站怎么让百度收录
  • 关于怎么做网站网站site的收录数量要多远索引量
  • 传世网站建设阳光创信-网站建设首选品牌
  • 周口建设网站中国装修公司十大排名
  • wordpress自助发卡青浦网站优化
  • 南京建设银行公积金查询网站wordpress加载插件下载
  • 做网站怎么那么难网站的建设与管理的心得体会
  • 黄冈网站建设哪家快些网站规划与建设评分标准
  • 建站平台 绑定域名怎么在手机上做网站
  • 做电影网站违法吗莱芜 网站
  • 品牌咨询公司泉州seo不到首页不扣费
  • 做网站做一个什么主题的怎样搭建一个企业网站