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

商城网站建设方案书网站 空间 服务器 免费

商城网站建设方案书,网站 空间 服务器 免费,新建网站建设,莆田cms建站模板前言 本博客姊妹篇 基于SpringBootDruid实现多数据源#xff1a;原生注解式基于SpringBootDruid实现多数据源#xff1a;注解编程式基于SpringBootDruid实现多数据源#xff1a;baomidou多数据源 一、功能描述 配置方式#xff1a;配置文件中配置默认数据源#xff0c…前言 本博客姊妹篇 基于SpringBootDruid实现多数据源原生注解式基于SpringBootDruid实现多数据源注解编程式基于SpringBootDruid实现多数据源baomidou多数据源 一、功能描述 配置方式配置文件中配置默认数据源使用数据库存储其他数据源配置使用方式使用注解切换数据源编程式切换数据源 二、代码实现 2.1 配置 # spring配置 spring:# 数据源配置datasource:type: com.alibaba.druid.pool.DruidDataSourcedruid:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/boot_codegen?useUnicodetruecharacterEncodingUTF8serverTimezoneGMT%2B8useSSLfalseusername: rootpassword: rootinitial-size: 10min-idle: 10max-active: 100max-wait: 60000time-between-eviction-runs-millis: 60000min-evictable-idle-time-millis: 300000validation-query: select 1test-while-idle: truetest-on-borrow: falsetest-on-return: falsepool-prepared-statements: truemax-pool-prepared-statement-per-connection-size: 20web-stat-filter:enabled: trueurl-pattern: /*exclusions: *.js,*.css,*.gif,*.png,*.jpg,*.ico,/druid/*stat-view-servlet:enabled: trueurl-pattern: /druid/*login-username: adminlogin-password: 123456filter:stat:enabled: truelog-slow-sql: trueslow-sql-millis: 1000merge-sql: truewall:enabled: trueconfig:multi-statement-allow: true2.2 配置类 package com.qiangesoft.datasourcepro.core;import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 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 javax.sql.DataSource; import java.util.HashMap; import java.util.Map;/*** 多数据源配置** author qiangesoft* date 2024-03-14*/ Slf4j Configuration public class DataSourceConfiguration {Beanpublic DruidDataSource defaultDataSource() {return DruidDataSourceBuilder.create().build();}BeanPrimarypublic DynamicDataSource dynamicDataSource(DruidDataSource defaultDataSource) {MapObject, Object targetDataSources new HashMap();targetDataSources.put(default, defaultDataSource);return new DynamicDataSource(defaultDataSource, targetDataSources);} } 2.3 多数据源扩展实现 package com.qiangesoft.datasourcepro.core;import com.alibaba.druid.pool.DruidDataSource; import com.qiangesoft.datasourcepro.entity.BcgDataSource; import com.qiangesoft.datasourcepro.service.IBcgDataSourceService; import com.qiangesoft.datasourcepro.utils.SpringUtil; import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;import java.util.Map;/*** 动态数据源** author qiangesoft* date 2024-03-14*/ public class DynamicDataSource extends AbstractRoutingDataSource {private MapObject, Object dynamicTargetDataSources;private Object dynamicDefaultTargetDataSource;public DynamicDataSource(DruidDataSource defaultTargetDataSource, MapObject, Object targetDataSources) {super.setDefaultTargetDataSource(defaultTargetDataSource);super.setTargetDataSources(targetDataSources);super.afterPropertiesSet();this.dynamicTargetDataSources targetDataSources;this.dynamicDefaultTargetDataSource defaultTargetDataSource;}Overrideprotected Object determineCurrentLookupKey() {String datasourceId DataSourceContext.getDataSource();if (datasourceId ! null this.dynamicTargetDataSources.containsKey(datasourceId)) {return datasourceId;}return null;}/*** 添加数据源** param dataSourceId*/public void addDataSource(String dataSourceId) {if (default.equals(dataSourceId)) {return;}int initialSize ((DruidDataSource) dynamicDefaultTargetDataSource).getInitialSize();BcgDataSource bcgDataSource SpringUtil.getBean(IBcgDataSourceService.class).getById(Long.valueOf(dataSourceId));if (bcgDataSource null) {throw new RuntimeException(数据源配置不存在);}String datasourceId String.valueOf(bcgDataSource.getId());MapObject, Object dynamicTargetDataSources this.dynamicTargetDataSources;if (!dynamicTargetDataSources.containsKey(datasourceId)) {DruidDataSource dataSourceInstance DataSourceBuilder.create().driverClassName(bcgDataSource.getDriverClassName()).url(bcgDataSource.getUrl()).username(bcgDataSource.getUsername()).password(bcgDataSource.getPassword()).type(DruidDataSource.class).build();dynamicTargetDataSources.put(datasourceId, dataSourceInstance);// 关键一步将TargetDataSources中的连接信息放入resolvedDataSources管理super.afterPropertiesSet();}} }2.4 切面 package com.qiangesoft.datasourcepro.core;import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.core.annotation.AnnotationUtils; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component;import java.util.Objects;/*** 多数据源处理** author qiangesoft* date 2024-03-14*/ Slf4j Order(1) Aspect Component public class DataSourceAspect {/*** 切点*/Pointcut(annotation(com.qiangesoft.datasourcepro.core.DataSource))public void pointCut() {}/*** 通知** param joinPoint* return* throws Throwable*/Around(pointCut())public Object around(ProceedingJoinPoint joinPoint) throws Throwable {DataSource dataSource this.getDataSource(joinPoint);if (dataSource null) {DataSourceContext.setDataSource(default);} else {DataSourceContext.setDataSource(dataSource.value());}try {return joinPoint.proceed();} finally {DataSourceContext.removeDataSource();}}/*** 获取数据源** param joinPoint* return*/public DataSource getDataSource(ProceedingJoinPoint joinPoint) {MethodSignature signature (MethodSignature) joinPoint.getSignature();// 方法上查找注解DataSource dataSource AnnotationUtils.findAnnotation(signature.getMethod(), DataSource.class);if (Objects.nonNull(dataSource)) {return dataSource;}// 类上查找注解return AnnotationUtils.findAnnotation(signature.getDeclaringType(), DataSource.class);} } 2.5 线程本地变量 package com.qiangesoft.datasourcepro.core;import com.qiangesoft.datasourcepro.utils.SpringUtil;/*** 数据源上下文** author qiangesoft* date 2024-03-14*/ public class DataSourceContext {/*** 线程本地变量数据源*/private static final ThreadLocalString CONTEXT_HOLDER new ThreadLocal();/*** 设置数据源的变量*/public static void setDataSource(String dataSourceId) {SpringUtil.getBean(DynamicDataSource.class).addDataSource(dataSourceId);CONTEXT_HOLDER.set(dataSourceId);}/*** 获得数据源的变量*/public static String getDataSource() {return CONTEXT_HOLDER.get();}/*** 清空数据源变量*/public static void removeDataSource() {CONTEXT_HOLDER.remove();} }2.6 使用 package com.qiangesoft.datasourcepro.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.qiangesoft.datasourcepro.core.DataSource; import com.qiangesoft.datasourcepro.core.DataSourceContext; import com.qiangesoft.datasourcepro.entity.BcgDataSource; import com.qiangesoft.datasourcepro.mapper.BcgDataSourceMapper; import com.qiangesoft.datasourcepro.service.IBcgDataSourceService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service;import java.util.List;/*** p* 数据源 服务实现类* /p** author qiangesoft* since 2024-03-13*/ Slf4j RequiredArgsConstructor Service public class BcgBcgDataSourceServiceImpl extends ServiceImplBcgDataSourceMapper, BcgDataSource implements IBcgDataSourceService {Overridepublic ListBcgDataSource changeDataSource(String datasourceId) {try {DataSourceContext.setDataSource(datasourceId);return this.list();} catch (Exception e) {e.printStackTrace();throw new RuntimeException(数据源切换失败);} finally {DataSourceContext.removeDataSource();}}DataSource(value 1)Overridepublic ListBcgDataSource changeDataSourceByAnnotation() {return this.list();} }
http://www.w-s-a.com/news/518902/

相关文章:

  • 哪个公司网站做的最好义乌 网站 制作
  • 百度站长工具综合查询wordpress 上传pdf
  • 旅游短租公寓网站建设深圳龙岗招聘网
  • 做海淘是在哪个网站网络查控系统设计方案
  • o2o网站建设代理商微信公众号开发文档
  • 网站设计课程总结关于网站备案的公告
  • 网站建设与运营意义到哪查找网站域名
  • 网站及单位网站建设情况眉县住房和城市建设局网站
  • 网站是否能够被恶意镜像wordpress占用
  • 经典设计网站网站等保测评怎么做
  • 重庆做网站公司贴吧廊坊公司快速建站
  • 海外贸易在什么网站做怎么排名到百度第一页
  • 线上注册公司是在哪个网站做高仿网站
  • 网站构架图网上推广平台哪个好
  • 公司网站首页图片素材vi设计的目的和意义
  • 网站的需求分析都有哪些内容济南营销型网站建设团队
  • 怎么选择优秀的网站建设公司生鲜网站开发
  • 如何编写网站建设销售的心得网站的权限管理怎么做
  • 网站业务员好做吗无忧网站优化
  • 网站随机代码网站建设费 账务处理
  • 商洛网站建设哪家好网站建设 织梦者
  • 怎么创建收费网站宁夏住房和城乡建设部网站
  • 怎么确认网站是什么语言做的用php和mysql做网站
  • 安徽做网站的公司有哪些星子网络公司
  • 肥西县重点工程建设管理局网站wordpress界面菜单怎么弄
  • 宁夏网站开发设计说明书wordpress主题背景图片
  • 同一个阿里云可以做两个网站吗织梦 帝国 学校网站
  • 城阳网站建设培训网站后台怎么上传文件
  • 重庆茂尔建设集团有限公司网站网页制作教程软件
  • 金湖建设工程质量监督网站高端网站建设公司哪里济南兴田德润实惠吗