当前位置: 首页 > 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.hkea.cn/news/14512165/

相关文章:

  • 购物车功能网站怎么做的wordpress带支付功能主题
  • 电子商务与网站建设论文免费网页制作代码
  • 深圳网站建设技术php+网站开发案例教程
  • 响应式网站是什么wordpress 米表
  • 网站小程序制作公司网站百度地图标记代码
  • 有什么好的免费网站做教育宣传做引流去那些网站好
  • 电子商务网站建设课程性质深圳高端做网站公司
  • 精品课程网站开发环境wordpress精美的主题
  • 慕课网站开发与实现曲阜网站建设哪家便宜
  • 网站页面描述怎么写外包公司是正规公司吗
  • 一个网站主机多少钱南通市建设局网站6
  • 网站怎么做成中英文版七星网络网站
  • 怎么用ajax做电商网站wordpress git主题
  • 网站建设 技术中国字体设计网官网
  • 0基础做网站多久拼多多货源一件代发平台
  • 网站制作开发教程企业网站搭建项目概述范文
  • 网站seo监测线上商城介绍
  • 免费门户网站开发建立机制
  • 网站兼容性代码南京模板网站建设企业
  • 深圳做分销网站建设wordpress图片缩略图不显示图片
  • 宁波做网站费用物流网页设计
  • 南充网站建设工作室开发一个软件app需要多少钱
  • 商城网站html模板甜品网站设计与实现毕业设计
  • 漯河 做网站网站备案需要花钱吗
  • 山东网络建站推广琼海网站制作
  • 桂阳县网站建设公司哪家好idc网站模板下载
  • 电子商务网站创建过程西安官网seo公司
  • wordpress建站 app访问国内app公司排名
  • 重庆网站建设百度推广直播:韩国vs加纳直播
  • 商用自适应网站建设贵阳网站建