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

有什么教做甜品的网站单页推广网站模版

有什么教做甜品的网站,单页推广网站模版,深圳最近一个星期新闻,网站建设图片上传【Spring】DynamicDataSourceHolder 动态数据源切换 常见场景常见工具一、AbstractRoutingDataSource1.1、 定义 DynamicDataSourceHolder1.2、 配置动态数据源1.3、 在Spring配置中定义数据源1.4、在业务代码中切换数据源 二、Dynamic Datasource for Spring Boot2.1. 添加依赖… 【Spring】DynamicDataSourceHolder 动态数据源切换 常见场景常见工具一、AbstractRoutingDataSource1.1、 定义 DynamicDataSourceHolder1.2、 配置动态数据源1.3、 在Spring配置中定义数据源1.4、在业务代码中切换数据源 二、Dynamic Datasource for Spring Boot2.1. 添加依赖2.2. 配置数据源 2.3. 使用注解切换数据源2.4. 启动类配置 三、阿里巴巴的Druid3.1. 引入依赖3.2. 配置多数据源3.3. 实现动态数据源路由3.4. 创建数据源上下文持有者3.5. 配置数据源3.6. 使用动态数据源 一个开发系统需要用多个数据库怎么办呢可不可以连接多个数据库 当然可以随意切换。 DynamicDataSourceHolder 通常是用于动态数据源切换的一个工具类特别是在多数据源场景下使用。它通过 ThreadLocal 来保存当前线程的数据源标识以便在同一线程中能够动态切换不同的数据源。 常见场景 在实际项目中可能需要根据不同的业务需求在多个数据源之间进行切换。比如读写分离主从库、多租户架构等。通过DynamicDataSourceHolder可以方便地实现这一需求。 常见工具 有许多现有的动态数据源管理工具和框架可以帮助简化多数据源配置和管理。以下是一些常用的工具和框架 Spring Boot DataSource Routing with AbstractRoutingDataSource Spring本身提供了 AbstractRoutingDataSource 类可以用于实现动态数据源路由。 Spring Cloud DataSource Routing 在Spring Cloud环境中可以使用Spring Cloud提供的配置和工具实现动态数据源管理。 MyBatis Dynamic Datasource MyBatis提供了一个动态数据源插件mybatis-spring可以用于在MyBatis中实现动态数据源切换。 Dynamic Datasource for Spring Boot 动态数据源管理库 dynamic-datasource-spring-boot-starter是一个简单易用的Spring Boot动态数据源启动器支持多种数据源配置和切换。 Druid Dynamic Datasource 阿里巴巴的Druid数据源也支持动态数据源切换可以通过配置Druid的相关属性实现。 下面详细介绍一下 Spring本身提供的 AbstractRoutingDataSource 、SpringBoot 动态数据启动器、以及现在常用的阿里巴巴的Druid数据源。 一、AbstractRoutingDataSource 1.1、 定义 DynamicDataSourceHolder public class DynamicDataSourceHolder {private static final ThreadLocalString contextHolder new ThreadLocal();/*** 设置数据源* param dataSourceKey 数据源标识*/public static void setDataSource(String dataSourceKey) {contextHolder.set(dataSourceKey);}/*** 获取数据源* return 数据源标识*/public static String getDataSource() {return contextHolder.get();}/*** 清除数据源*/public static void clearDataSource() {contextHolder.remove();} }1.2、 配置动态数据源 需要配置一个 AbstractRoutingDataSource 来实现动态数据源的路由。 import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;public class DynamicRoutingDataSource extends AbstractRoutingDataSource {Overrideprotected Object determineCurrentLookupKey() {return DynamicDataSourceHolder.getDataSource();} }1.3、 在Spring配置中定义数据源 在Spring配置中定义数据源并将动态数据源配置为主数据源。 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.context.annotation.Primary; import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;import javax.sql.DataSource; import java.util.HashMap; import java.util.Map;Configuration public class DataSourceConfig {Bean(name dataSource1)ConfigurationProperties(prefix spring.datasource.ds1)public DataSource dataSource1() {return DataSourceBuilder.create().build();}Bean(name dataSource2)ConfigurationProperties(prefix spring.datasource.ds2)public DataSource dataSource2() {return DataSourceBuilder.create().build();}PrimaryBean(name dataSource)public DataSource dataSource(Qualifier(dataSource1) DataSource dataSource1,Qualifier(dataSource2) DataSource dataSource2) {DynamicRoutingDataSource dynamicRoutingDataSource new DynamicRoutingDataSource();MapObject, Object targetDataSources new HashMap();targetDataSources.put(ds1, dataSource1);targetDataSources.put(ds2, dataSource2);dynamicRoutingDataSource.setTargetDataSources(targetDataSources);dynamicRoutingDataSource.setDefaultTargetDataSource(dataSource1);return dynamicRoutingDataSource;} }1.4、在业务代码中切换数据源 在需要切换数据源的业务逻辑中使用 DynamicDataSourceHolder 来设置当前数据源。 Service public class SomeService {Transactionalpublic void someMethod() {// 切换到数据源 ds1DynamicDataSourceHolder.setDataSource(ds1);// 执行与数据源 ds1 相关的操作// 切换到数据源 ds2DynamicDataSourceHolder.setDataSource(ds2);// 执行与数据源 ds2 相关的操作// 恢复到默认数据源DynamicDataSourceHolder.clearDataSource();} }DynamicDataSourceHolder 通过 ThreadLocal 实现了线程级别的数据源切换结合 AbstractRoutingDataSource 实现动态数据源路由可以方便地在多数据源场景下进行数据源的动态切换。需要注意的是在使用动态数据源时要确保在合适的时机清除线程本地变量以防止数据源混乱。 二、Dynamic Datasource for Spring Boot 2.1. 添加依赖 在pom.xml中添加dynamic-datasource-spring-boot-starter依赖 dependencygroupIdcom.baomidou/groupIdartifactIddynamic-datasource-spring-boot-starter/artifactIdversion3.4.0/version /dependency2.2. 配置数据源 在application.yml或application.properties中配置多个数据源 spring:datasource:dynamic:primary: masterdatasource:master:url: jdbc:mysql://localhost:3306/master_dbusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driverslave:url: jdbc:mysql://localhost:3306/slave_dbusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driver2.3. 使用注解切换数据源 使用DS 注解在需要的方法或类上指定数据源 import com.baomidou.dynamic.datasource.annotation.DS; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;Service public class UserService {DS(slave)Transactionalpublic void getSlaveData() {// 逻辑使用从库数据源}DS(master)Transactionalpublic void getMasterData() {// 逻辑使用主库数据源} }2.4. 启动类配置 在Spring Boot启动类中启用动态数据源支持 import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);} }三、阿里巴巴的Druid 阿里巴巴的Druid 是一个高效、稳定且功能强大的数据库连接池支持监控、日志输出和多种数据库管理功能。Druid也支持动态数据源切换通过配置Druid的相关属性和使用Spring的AbstractRoutingDataSource来实现。 3.1. 引入依赖 在你的Spring Boot项目中引入Druid依赖 dependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-starter/artifactIdversion1.2.8/version /dependency3.2. 配置多数据源 在 application.yml 中配置多个数据源。Druid支持的数据源配置属性非常丰富可以配置连接池大小、超时设置、日志等。 spring:datasource:dynamic:primary: masterdatasource:master:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/master_dbusername: rootpassword: rootdruid:initial-size: 5min-idle: 5max-active: 20max-wait: 60000time-between-eviction-runs-millis: 60000min-evictable-idle-time-millis: 300000validation-query: SELECT 1 FROM DUALtest-while-idle: truetest-on-borrow: falsetest-on-return: falsepool-prepared-statements: truemax-pool-prepared-statement-per-connection-size: 20filters: stat,wall,log4jslave:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/slave_dbusername: rootpassword: rootdruid:initial-size: 5min-idle: 5max-active: 20max-wait: 60000time-between-eviction-runs-millis: 60000min-evictable-idle-time-millis: 300000validation-query: SELECT 1 FROM DUALtest-while-idle: truetest-on-borrow: falsetest-on-return: falsepool-prepared-statements: truemax-pool-prepared-statement-per-connection-size: 20filters: stat,wall,log4j3.3. 实现动态数据源路由 通过继承Spring的 AbstractRoutingDataSource 实现动态数据源路由逻辑。 import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;public class DynamicRoutingDataSource extends AbstractRoutingDataSource {Overrideprotected Object determineCurrentLookupKey() {return DynamicDataSourceContextHolder.getDataSourceKey();} }3.4. 创建数据源上下文持有者 使用 ThreadLocal 来保存当前线程的数据源标识。 public class DynamicDataSourceContextHolder {private static final ThreadLocalString CONTEXT_HOLDER new ThreadLocal();public static void setDataSourceKey(String key) {CONTEXT_HOLDER.set(key);}public static String getDataSourceKey() {return CONTEXT_HOLDER.get();}public static void clearDataSourceKey() {CONTEXT_HOLDER.remove();} }3.5. 配置数据源 在Spring配置类中配置Druid数据源和动态数据源路由。 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.context.annotation.Primary; import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;import javax.sql.DataSource; import java.util.HashMap; import java.util.Map;Configuration public class DataSourceConfig {BeanConfigurationProperties(spring.datasource.dynamic.datasource.master)public DataSource masterDataSource() {return DruidDataSourceBuilder.create().build();}BeanConfigurationProperties(spring.datasource.dynamic.datasource.slave)public DataSource slaveDataSource() {return DruidDataSourceBuilder.create().build();}PrimaryBeanpublic DataSource dataSource(Qualifier(masterDataSource) DataSource masterDataSource,Qualifier(slaveDataSource) DataSource slaveDataSource) {DynamicRoutingDataSource dynamicRoutingDataSource new DynamicRoutingDataSource();MapObject, Object targetDataSources new HashMap();targetDataSources.put(master, masterDataSource);targetDataSources.put(slave, slaveDataSource);dynamicRoutingDataSource.setTargetDataSources(targetDataSources);dynamicRoutingDataSource.setDefaultTargetDataSource(masterDataSource);return dynamicRoutingDataSource;} }3.6. 使用动态数据源 在需要切换数据源的业务逻辑中使用 DynamicDataSourceContextHolder 来设置当前数据源。 import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;Service public class UserService {Transactionalpublic void useMaster() {DynamicDataSourceContextHolder.setDataSourceKey(master);// 使用主库执行操作DynamicDataSourceContextHolder.clearDataSourceKey();}Transactionalpublic void useSlave() {DynamicDataSourceContextHolder.setDataSourceKey(slave);// 使用从库执行操作DynamicDataSourceContextHolder.clearDataSourceKey();} }总结 Druid Dynamic Datasource通过结合Spring的AbstractRoutingDataSource和ThreadLocal实现了高效的动态数据源切换。配置和使用都相对简单并且具有Druid连接池的强大功能如监控、性能优化等。适用于多数据源、读写分离、多租户等复杂场景。
文章转载自:
http://www.morning.bctr.cn.gov.cn.bctr.cn
http://www.morning.snjpj.cn.gov.cn.snjpj.cn
http://www.morning.cbpkr.cn.gov.cn.cbpkr.cn
http://www.morning.fnbtn.cn.gov.cn.fnbtn.cn
http://www.morning.xsszn.cn.gov.cn.xsszn.cn
http://www.morning.ryrpq.cn.gov.cn.ryrpq.cn
http://www.morning.pxtgf.cn.gov.cn.pxtgf.cn
http://www.morning.mfmbn.cn.gov.cn.mfmbn.cn
http://www.morning.lwcqh.cn.gov.cn.lwcqh.cn
http://www.morning.gwxsk.cn.gov.cn.gwxsk.cn
http://www.morning.xrpwk.cn.gov.cn.xrpwk.cn
http://www.morning.ryglh.cn.gov.cn.ryglh.cn
http://www.morning.nwllb.cn.gov.cn.nwllb.cn
http://www.morning.rgrys.cn.gov.cn.rgrys.cn
http://www.morning.nqbkb.cn.gov.cn.nqbkb.cn
http://www.morning.khclr.cn.gov.cn.khclr.cn
http://www.morning.gwtgt.cn.gov.cn.gwtgt.cn
http://www.morning.njstzsh.com.gov.cn.njstzsh.com
http://www.morning.cwpny.cn.gov.cn.cwpny.cn
http://www.morning.dpruuode.cn.gov.cn.dpruuode.cn
http://www.morning.hqzmz.cn.gov.cn.hqzmz.cn
http://www.morning.ptdzm.cn.gov.cn.ptdzm.cn
http://www.morning.njfgl.cn.gov.cn.njfgl.cn
http://www.morning.kxgn.cn.gov.cn.kxgn.cn
http://www.morning.xqnzn.cn.gov.cn.xqnzn.cn
http://www.morning.rppf.cn.gov.cn.rppf.cn
http://www.morning.bpzw.cn.gov.cn.bpzw.cn
http://www.morning.wmdlp.cn.gov.cn.wmdlp.cn
http://www.morning.pcshb.cn.gov.cn.pcshb.cn
http://www.morning.zlhbg.cn.gov.cn.zlhbg.cn
http://www.morning.mbrbg.cn.gov.cn.mbrbg.cn
http://www.morning.skcmt.cn.gov.cn.skcmt.cn
http://www.morning.jzlkq.cn.gov.cn.jzlkq.cn
http://www.morning.nswcw.cn.gov.cn.nswcw.cn
http://www.morning.ghcfx.cn.gov.cn.ghcfx.cn
http://www.morning.lpnb.cn.gov.cn.lpnb.cn
http://www.morning.rhsr.cn.gov.cn.rhsr.cn
http://www.morning.mqffm.cn.gov.cn.mqffm.cn
http://www.morning.syxmx.cn.gov.cn.syxmx.cn
http://www.morning.fyskq.cn.gov.cn.fyskq.cn
http://www.morning.lgnz.cn.gov.cn.lgnz.cn
http://www.morning.smspc.cn.gov.cn.smspc.cn
http://www.morning.hrqfl.cn.gov.cn.hrqfl.cn
http://www.morning.lsfzq.cn.gov.cn.lsfzq.cn
http://www.morning.ydxx123.cn.gov.cn.ydxx123.cn
http://www.morning.kxymr.cn.gov.cn.kxymr.cn
http://www.morning.tfqfm.cn.gov.cn.tfqfm.cn
http://www.morning.gnmhy.cn.gov.cn.gnmhy.cn
http://www.morning.rjljb.cn.gov.cn.rjljb.cn
http://www.morning.npxht.cn.gov.cn.npxht.cn
http://www.morning.lpyjq.cn.gov.cn.lpyjq.cn
http://www.morning.bccls.cn.gov.cn.bccls.cn
http://www.morning.htbsk.cn.gov.cn.htbsk.cn
http://www.morning.hytqt.cn.gov.cn.hytqt.cn
http://www.morning.qgqck.cn.gov.cn.qgqck.cn
http://www.morning.nynyj.cn.gov.cn.nynyj.cn
http://www.morning.nrtpb.cn.gov.cn.nrtpb.cn
http://www.morning.zmqb.cn.gov.cn.zmqb.cn
http://www.morning.rlfr.cn.gov.cn.rlfr.cn
http://www.morning.rpdmj.cn.gov.cn.rpdmj.cn
http://www.morning.thpns.cn.gov.cn.thpns.cn
http://www.morning.sjwqr.cn.gov.cn.sjwqr.cn
http://www.morning.mzmqg.cn.gov.cn.mzmqg.cn
http://www.morning.nwljj.cn.gov.cn.nwljj.cn
http://www.morning.wqsjx.cn.gov.cn.wqsjx.cn
http://www.morning.cpqwb.cn.gov.cn.cpqwb.cn
http://www.morning.rtqyy.cn.gov.cn.rtqyy.cn
http://www.morning.ktsth.cn.gov.cn.ktsth.cn
http://www.morning.wjlkz.cn.gov.cn.wjlkz.cn
http://www.morning.mhpmw.cn.gov.cn.mhpmw.cn
http://www.morning.lbcfj.cn.gov.cn.lbcfj.cn
http://www.morning.spxsm.cn.gov.cn.spxsm.cn
http://www.morning.bpmdh.cn.gov.cn.bpmdh.cn
http://www.morning.plqsc.cn.gov.cn.plqsc.cn
http://www.morning.pakistantractors.com.gov.cn.pakistantractors.com
http://www.morning.qxmpp.cn.gov.cn.qxmpp.cn
http://www.morning.ccyns.cn.gov.cn.ccyns.cn
http://www.morning.bwzzt.cn.gov.cn.bwzzt.cn
http://www.morning.zdmlt.cn.gov.cn.zdmlt.cn
http://www.morning.sqqhd.cn.gov.cn.sqqhd.cn
http://www.tj-hxxt.cn/news/264337.html

相关文章:

  • 网站利用微信拉取用户做登录页网站建设排名优化
  • 公司网站备案需要什么登录官方网站
  • v2017网站开发手机网站设计图尺寸
  • 做网站赚金币网络备案信息查询
  • 曹县网站开发网站流量一直做不起来
  • 手机浏览器网站开发嘉峪关市建设局建管科资质网站
  • 临沂科技网站建设六安网站建设招商
  • 北京网站设计公司youx成都柚米科技15淘宝上找网站建设好吗
  • 西安专业网站开发公司网站建设杭州
  • 产品如何做网站推广wordpress上传图片x
  • 九台区建设银行网站济南WordPress培训
  • 企业服务类型有哪些塘沽网站建设优化
  • 如何自己建设淘宝网站设计公司怎么找
  • 网站建设汇卓涿州做网站公司
  • 莆田网站建设设计上海网站开发公
  • 网站建设技术是什么宁夏住房和城乡建设部网站
  • 重庆奉节网站建设公司哪里有哪个公司的软件系统开发
  • 网站怎么申请备案常用软件开发平台
  • 建网站的流程和费用加油卡系统搭建
  • 有哪些网站是用php做的东莞市专注网站建设平台
  • 如何给网站增加图标给小说网站做编辑
  • 网文网站开发方案装饰公司网站模板下载
  • 个人域名备案做企业网站泰安做网站哪里好
  • 网站建设公司哪个好呀金融网站建设个人网站备案名称大全
  • 灵犀科技 高端网站建设平台网站建设的公司
  • 没有营业执照怎么样做百度企业网站建筑工程网课代字幕
  • 网站制作1000元关键词排名查询工具
  • 网站建设氵金手指专业windows优化大师免费
  • 婚礼设计方案网站襄阳做淘宝网站推广
  • 烟台网站建设联系企汇互联专业注册代理记账