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

网站添加文字大小小制作小发明简单做法

网站添加文字大小,小制作小发明简单做法,新冠疫苗上市公司,wordpress 文章章节开发全文目录:开篇语前言步骤一:引入依赖步骤二:配置多个数据源application.properties 示例:步骤三:自定义动态数据源1. 自定义 DynamicDataSource 类2. 定义 DataSourceContextHolder 类3. 配置动态数据源步骤四&#xf…

全文目录:

    • 开篇语
    • 前言
    • 步骤一:引入依赖
    • 步骤二:配置多个数据源
      • `application.properties` 示例:
    • 步骤三:自定义动态数据源
      • 1. 自定义 `DynamicDataSource` 类
      • 2. 定义 `DataSourceContextHolder` 类
      • 3. 配置动态数据源
    • 步骤四:切换数据源
      • 1. 在服务层切换数据源
      • 2. 在控制器层切换数据源
    • 步骤五:使用AOP统一切换数据源
      • 1. 自定义注解
      • 2. 切面类实现
      • 3. 使用注解切换数据源
    • 总结
    • 文末

开篇语

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前言

  在许多企业级应用中,可能需要根据不同的业务需求来切换不同的数据库,如读写分离、分库分表等场景。Spring Boot 提供了灵活的数据源配置方式,可以通过动态切换数据源来实现这些需求。

  本文将介绍如何在 Spring Boot 项目中实现动态切换数据源和数据库的方案。我们将使用 Spring 的 AbstractRoutingDataSource 来实现动态切换数据源。

步骤一:引入依赖

首先,确保 Spring Boot 项目引入了以下依赖,主要包括 Spring Data JPA 和 MySQL 驱动(如果使用 MySQL 数据库)。在 pom.xml 文件中添加这些依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId> <!-- 使用 HikariCP 作为连接池 -->
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId>
</dependency>

步骤二:配置多个数据源

application.propertiesapplication.yml 中配置多个数据源,假设我们配置了主数据源和从数据源。

application.properties 示例:

# 主数据源配置
spring.datasource.primary.url=jdbc:mysql://localhost:3306/primary_db
spring.datasource.primary.username=root
spring.datasource.primary.password=root_password
spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.primary.hikari.maximum-pool-size=10# 从数据源配置
spring.datasource.secondary.url=jdbc:mysql://localhost:3306/secondary_db
spring.datasource.secondary.username=root
spring.datasource.secondary.password=root_password
spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.secondary.hikari.maximum-pool-size=10

步骤三:自定义动态数据源

Spring Boot 默认的配置是固定的单一数据源,但我们可以通过自定义 AbstractRoutingDataSource 来实现动态数据源切换。

1. 自定义 DynamicDataSource

AbstractRoutingDataSource 是 Spring 提供的一个用于路由到不同数据源的抽象类,我们继承该类并重写 determineCurrentLookupKey() 方法,根据当前线程或请求上下文来决定使用哪个数据源。

public class DynamicDataSource extends AbstractRoutingDataSource {@Overrideprotected Object determineCurrentLookupKey() {return DataSourceContextHolder.getDataSourceType();}
}

2. 定义 DataSourceContextHolder

为了实现线程安全地存储当前数据源的上下文,我们使用 ThreadLocal 来保存当前线程的数据源标识。

public class DataSourceContextHolder {private static final ThreadLocal<String> contextHolder = new ThreadLocal<>();public static void setDataSourceType(String dataSourceType) {contextHolder.set(dataSourceType);}public static String getDataSourceType() {return contextHolder.get();}public static void clearDataSourceType() {contextHolder.remove();}
}

3. 配置动态数据源

在配置类中,将多个数据源(如主数据库和从数据库)与 DynamicDataSource 关联,并将 DynamicDataSource 设置为 Spring 管理的数据源。

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.example.repository")
public class DataSourceConfig {@Primary@Beanpublic DynamicDataSource dynamicDataSource(@Qualifier("primaryDataSource") DataSource primaryDataSource,@Qualifier("secondaryDataSource") DataSource secondaryDataSource) {Map<Object, Object> targetDataSources = new HashMap<>();targetDataSources.put("primary", primaryDataSource);targetDataSources.put("secondary", secondaryDataSource);DynamicDataSource dynamicDataSource = new DynamicDataSource();dynamicDataSource.setDefaultTargetDataSource(primaryDataSource);dynamicDataSource.setTargetDataSources(targetDataSources);return dynamicDataSource;}@Primary@Bean@ConfigurationProperties(prefix = "spring.datasource.primary")public DataSource primaryDataSource() {return DataSourceBuilder.create().build();}@Bean@ConfigurationProperties(prefix = "spring.datasource.secondary")public DataSource secondaryDataSource() {return DataSourceBuilder.create().build();}
}

步骤四:切换数据源

为了动态切换数据源,我们可以在需要切换数据源的地方设置数据源类型(如读写分离、业务模块分库等)。

1. 在服务层切换数据源

在服务方法中,我们可以通过 DataSourceContextHolder.setDataSourceType("primary")DataSourceContextHolder.setDataSourceType("secondary") 来切换数据源。

@Service
public class DataService {// 使用主数据源public void usePrimaryDataSource() {DataSourceContextHolder.setDataSourceType("primary");// 执行主数据库相关操作}// 使用从数据源public void useSecondaryDataSource() {DataSourceContextHolder.setDataSourceType("secondary");// 执行从数据库相关操作}// 清除数据源设置public void clearDataSource() {DataSourceContextHolder.clearDataSourceType();}
}

2. 在控制器层切换数据源

在控制器层中,可以根据请求的不同选择使用不同的数据源。

@RestController
@RequestMapping("/data")
public class DataController {@Autowiredprivate DataService dataService;@GetMapping("/usePrimary")public String usePrimaryDataSource() {dataService.usePrimaryDataSource();return "Using Primary DataSource";}@GetMapping("/useSecondary")public String useSecondaryDataSource() {dataService.useSecondaryDataSource();return "Using Secondary DataSource";}
}

步骤五:使用AOP统一切换数据源

为了更优雅地切换数据源并解耦,我们可以通过 AOP(面向切面编程)来统一处理数据源切换。我们可以创建一个自定义注解来标识哪些方法需要切换数据源。

1. 自定义注解

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface DataSourceSwitch {String value() default "primary"; // 默认使用主数据源
}

2. 切面类实现

创建切面类,在方法执行前根据注解指定的数据源值来切换数据源。

@Aspect
@Component
public class DataSourceAspect {@Before("@annotation(dataSourceSwitch)")public void switchDataSource(DataSourceSwitch dataSourceSwitch) {String dataSourceType = dataSourceSwitch.value();DataSourceContextHolder.setDataSourceType(dataSourceType);}@After("@annotation(dataSourceSwitch)")public void clearDataSource(DataSourceSwitch dataSourceSwitch) {DataSourceContextHolder.clearDataSourceType();}
}

3. 使用注解切换数据源

@Service
public class DataService {@DataSourceSwitch("primary")public void usePrimaryDataSource() {// 使用主数据源}@DataSourceSwitch("secondary")public void useSecondaryDataSource() {// 使用从数据源}
}

总结

通过在 Spring Boot 中实现动态数据源切换,我们可以灵活地管理不同数据库的使用,满足不同业务场景的需求。无论是简单的读写分离、分库还是更复杂的业务需求,都可以通过动态切换数据源来完成。通过结合 AOP 和注解,我们可以更加优雅地管理和切换数据源,避免了硬编码和重复代码的情况,提升了代码的可维护性和扩展性。

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。


版权声明:本文由作者原创,转载请注明出处,谢谢支持!

http://www.dtcms.com/a/463507.html

相关文章:

  • 网站建没有前景网址大全有用吗
  • 模板王网站怎么下载不了模板微信游戏小程序代理
  • 杭州做网站哪个公司好阳江房产网官网查询
  • 漳浦县建设局网站济南个人制作网站
  • 湖北望新建设有限公司网站网站建设服务器费用
  • 厦门学网站建设美食网页界面设计
  • 自己做的网站如何上首页设计与绘制一个网站首页
  • redis的红锁
  • 网站空间的控制面板首页如何添加网站代码
  • 电商网站的成本做网站的视频
  • Python实例方法与Python类的构造方法全解析
  • 网站关键词突然搜不到了标签在数据库wordpress
  • 公司网站 正式上线asp网站有哪些
  • 免费凡科网站wordpress程序覆盖
  • 小说网站建设费用wordpress局部刷新
  • 写作网站推荐行业信息网站有哪些
  • 单页网站如何做杭州软件开发
  • 招聘网站怎么做介绍成都网站开发 Vr
  • 计算机视觉 图像分类 → 目标检测 → 实例分割
  • 免费建站哪个好网站搭建报价
  • 天津百度网站快速排名深圳平面设计招聘
  • 媒体村网站建设怎么做网站教程 用的工具
  • 汽车软件开发的质量和安全管理流程
  • 数据库查询网站建设广点通广告投放平台
  • 东莞网站建设方案外包城市门户网站建设
  • 深圳电子烟网站建设网站开发的基本流程
  • 百度地图手机网站代码wordpress去除分类目录
  • dw 做网站图片之间的链接怎么查看网站是哪个公司建的
  • 深圳营销型网站建设烟台市做网站
  • 做服装团购网站怎样做音乐网站