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

二手书交易网站开发现状上海牛巨微seo关键词优化

二手书交易网站开发现状,上海牛巨微seo关键词优化,网站建设公司口碑排名,wordpress 显示发布时间前言 本博客姊妹篇 基于SpringBootDruid实现多数据源#xff1a;原生注解式基于SpringBootDruid实现多数据源#xff1a;注解编程式基于SpringBootDruid实现多数据源#xff1a;baomidou多数据源 一、功能描述 配置方式#xff1a;配置文件中实现多数据源#xff0c;非…前言 本博客姊妹篇 基于SpringBootDruid实现多数据源原生注解式基于SpringBootDruid实现多数据源注解编程式基于SpringBootDruid实现多数据源baomidou多数据源 一、功能描述 配置方式配置文件中实现多数据源非动态使用方式使用注解切换数据源 二、代码实现 2.1 配置 # spring配置 spring:# 数据源配置datasource:type: com.alibaba.druid.pool.DruidDataSourcedruid:web-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: truemaster:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/boot_business?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: 20slave:enabled: truedriver-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: 202.2 配置类 package com.qiangesoft.datasource.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 java.util.HashMap; import java.util.Map;/*** 多数据源配置** author qiangesoft* date 2024-03-14*/ Slf4j Configuration public class DataSourceConfiguration {BeanConfigurationProperties(spring.datasource.druid.master)public DruidDataSource masterDataSource() {DruidDataSource masterDataSource DruidDataSourceBuilder.create().build();masterDataSource.setName(DataSourceType.MASTER.getType());return masterDataSource;}BeanConfigurationProperties(spring.datasource.druid.slave)ConditionalOnProperty(prefix spring.datasource.druid.slave, name enabled, havingValue true)public DruidDataSource slaveDataSource() {DruidDataSource slaveDataSource DruidDataSourceBuilder.create().build();slaveDataSource.setName(DataSourceType.SLAVE.getType());return slaveDataSource;}BeanPrimarypublic DynamicDataSource dynamicDataSource(DruidDataSource masterDataSource, DruidDataSource slaveDataSource) {MapObject, Object targetDataSources new HashMap();targetDataSources.put(masterDataSource.getName(), masterDataSource);targetDataSources.put(slaveDataSource.getName(), slaveDataSource);return new DynamicDataSource(masterDataSource, targetDataSources);} } 2.3 多数据源扩展实现 package com.qiangesoft.datasource.core;import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;import javax.sql.DataSource; import java.util.Map;/*** 动态数据源** author qiangesoft* date 2024-03-14*/ public class DynamicDataSource extends AbstractRoutingDataSource {public DynamicDataSource(DataSource defaultTargetDataSource, MapObject, Object targetDataSources) {super.setDefaultTargetDataSource(defaultTargetDataSource);super.setTargetDataSources(targetDataSources);super.afterPropertiesSet();}Overrideprotected Object determineCurrentLookupKey() {return DataSourceContext.getDataSource();} }2.4 切面 package com.qiangesoft.datasource.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.datasource.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(DataSourceType.MASTER);} 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.datasource.core;/*** 数据源上下文** author qiangesoft* date 2024-03-14*/ public class DataSourceContext {/*** 线程本地变量数据源*/private static final ThreadLocalString CONTEXT_HOLDER new ThreadLocal();/*** 设置数据源的变量*/public static void setDataSource(DataSourceType dataSourceType) {CONTEXT_HOLDER.set(dataSourceType.getType());}/*** 获得数据源的变量*/public static String getDataSource() {return CONTEXT_HOLDER.get();}/*** 清空数据源变量*/public static void removeDataSource() {CONTEXT_HOLDER.remove();} }2.6 使用 package com.qiangesoft.datasource.controller;import com.qiangesoft.datasource.core.DataSource; import com.qiangesoft.datasource.core.DataSourceType; import com.qiangesoft.datasource.entity.SysUser; import com.qiangesoft.datasource.service.ISysUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import java.util.List;/*** p* 用户信息 前端控制器* /p** author qiangesoft* since 2024-03-14*/ RestController RequestMapping(/sys/user) public class SysUserController {Autowiredprivate ISysUserService sysUserService;DataSource(DataSourceType.MASTER)GetMapping(/master)public ListSysUser listMaster() {return sysUserService.list();}DataSource(DataSourceType.SLAVE)GetMapping(/slave)public ListSysUser listSlave() {return sysUserService.list();}}
http://www.hkea.cn/news/14297853/

相关文章:

  • 蓝色脚手架织梦企业网站模板wordpress移动顶部导航
  • 备用网站怎么做优秀中文企业网站欣赏
  • 哪些大型网站用mysqlhtml网页制作房地产页面
  • 服装建设网站的原因人网站建站
  • 福建路桥建设有限公司网站想做个网站 怎么做
  • 网站平台报价模板下载微信小程序注册后怎么登录
  • 网站怎么样做不违规青海建设厅质检站网站
  • 建设外贸企业网站松江团购做网站
  • 网页游戏网游seo排名优化软件
  • 南宁网站设适合小学生的新闻事件
  • 网站开发培训深圳兰州网络营销推广价格
  • 网站app的作用安阳昨天发生的事件
  • 嘉兴专业网站建设做uml图网站
  • 重视企业网站吉林网站建设找哪家
  • 梅河口市住房和城乡建设局网站合肥市网站建设
  • 网站 备案 查询一个做微信文章的网站
  • 音乐网站开发技术人员配置企业微信官网登录入口网页版
  • 网站网络结构设计网站logo设计在线生成
  • 济南建网站青岛高端网站建设公司
  • 天河网站建设技术私有云笔记 wordpress
  • 一个人网站运营怎么做哈尔滨网页设计师人才招聘
  • 南县网站建设推荐做完整的网站设计需要的技术
  • 农村建设开发有限公司网站江西省赣州市会昌县
  • 杭seo网站建设排名郑州技术支持seo
  • 佛山市门户网站建设公司ftp跟网络连接Wordpress
  • 做蛋糕的企业网站app定制网站建设应有尽有
  • 西安网站推广东营建设信息网站
  • 山西众邦建设集团网站重庆做网站 哪个好些嘛
  • wordpress静态网站博客深圳哪家公司做网站
  • vue手机网站开发柳州网站建设哪家好