Advertisement

Spring Boot 2 两种方案:读写分离、动态数据源及事务惰性处理 + Sharding-JDBC.zip

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:None


简介:
本资源提供Spring Boot 2环境下实现读写分离与动态数据源切换的解决方案,并结合Sharding-JDBC进行数据库分片,同时支持事务的懒加载处理。 1. AbstractRoutingDataSource (1)AbstractRoutingDataSource可以注册多个数据源,并通过AOP实现读写分离及自动切换。 (2)支持一主多从架构,可自定义负载均衡策略;双主多从与故障转移功能因MySQL环境为一主一从而未实现在代码中,但其实现位置已标记明确。 (3)非注解方式使用时对业务逻辑的侵入几乎可以忽略不计。 (4)采取懒事务处理机制,在Service层内使用了@Transactional注释的方法或类只能默认访问写库。 (5)通过AOP根据DAO层方法名来判断读取与写入操作,超出预设规则的情况将仅能执行于默认的写库。 2. Sharding-JDBC (1)提供多种模式下的读写分离支持。 (2)具备事务处理能力。 (3)采用配置中心化管理方式。 (4)存在存储过程解析不正常的问题。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • Spring Boot 2 + Sharding-JDBC.zip
    优质
    本资源提供Spring Boot 2环境下实现读写分离与动态数据源切换的解决方案,并结合Sharding-JDBC进行数据库分片,同时支持事务的懒加载处理。 1. AbstractRoutingDataSource (1)AbstractRoutingDataSource可以注册多个数据源,并通过AOP实现读写分离及自动切换。 (2)支持一主多从架构,可自定义负载均衡策略;双主多从与故障转移功能因MySQL环境为一主一从而未实现在代码中,但其实现位置已标记明确。 (3)非注解方式使用时对业务逻辑的侵入几乎可以忽略不计。 (4)采取懒事务处理机制,在Service层内使用了@Transactional注释的方法或类只能默认访问写库。 (5)通过AOP根据DAO层方法名来判断读取与写入操作,超出预设规则的情况将仅能执行于默认的写库。 2. Sharding-JDBC (1)提供多种模式下的读写分离支持。 (2)具备事务处理能力。 (3)采用配置中心化管理方式。 (4)存在存储过程解析不正常的问题。
  • Spring Boot与Mybatis的实现
    优质
    本案例深入探讨了在Spring Boot框架下结合MyBatis技术实现动态数据源切换的方法和实践,旨在提高系统的灵活性与可维护性。 本段落主要介绍了如何使用Spring Boot与Mybatis实现动态数据源的配置方法,可供对此感兴趣的朋友参考学习。
  • Spring Boot + Sharding-JDBC + MyBatis + Druid
    优质
    本项目采用Spring Boot框架结合Sharding-JDBC进行数据库分片处理,并利用MyBatis作为持久层框架,Druid为连接池组件,实现高效的数据管理和应用优化。 在Spring Boot的配置文件中无法详细设置Druid连接池的各项属性(官网文档里我没有找到相关的信息),因此选择使用Java类来配置这些内容,包括Druid的wallFilter、statFilter、statViewServlet以及webStatFilter等项。
  • 件管系统的Spring Boot实现(含库)
    优质
    本项目采用Spring Boot框架开发,旨在构建一个高效的刑事案件管理系统。系统包含详细的源代码和数据库设计,便于学习与二次开发。 基于SpringBoot开发的刑事案件管理系统(源码+数据库)。
  • DynamicDataSourceExample:Spring中切换
    优质
    本文介绍了在Spring框架下实现动态数据源切换的两种方法。通过这种方式,可以在运行时灵活地选择不同的数据库连接,提高应用的灵活性和可扩展性。 DynamicDataSourceExample 中提供了两种方法动态切换数据源:在 jdbc.properties 文件中配置数据库连接信息的方法一可以在 TestDynamicDataSource 类里找到;而另一种方法二则位于 TestDynamicDataSource2 类内。项目中的两个 SQL 文件包含了所用表的表结构定义。 请注意,这里没有提及任何联系方式或网址链接,并且已按照要求重写了原文内容以便去掉这些不必要的元素而不改变其原意。
  • Spring Boot切换多个
    优质
    简介:本文介绍了如何在Spring Boot应用中实现动态切换多个数据源的功能,包括配置和代码示例。通过该方法可以灵活地管理不同数据库间的连接与操作。 一个关于Spring Boot动态切换多数据源的完整示例演示。
  • Spring Boot与Mybatis的多配置技巧
    优质
    本文章详细介绍了如何在Spring Boot项目中使用MyBatis实现多数据源以及动态切换数据源的方法和技巧。适合中级Java开发人员参考学习。 在开发企业级应用时,有时需要连接到多个数据库来满足不同的业务需求,比如主从数据库架构,以便实现读写分离,提高系统性能。Spring Boot 结合 Mybatis 的多数据源和动态数据源配置就是解决此类问题的有效手段。 首先,在项目中我们需要禁用 Spring Boot 默认的数据源配置。这可以通过在主配置类(通常带有 `@SpringBootApplication` 注解的类)中添加 `exclude = { DataSourceAutoConfiguration.class }` 来实现,这样就阻止了基于 application.properties 文件中的默认数据源创建: ```java @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) public class TitanWebApplication { public static void main(String[] args) { SpringApplication.run(TitanWebApplication.class, args); } } ``` 接着,在 `application.properties` 文件中定义多个数据库的数据连接信息。例如,对于两个名为“titan”和“db2”的数据源: ```properties # titan 数据源 (主库) spring.datasource.titan-master.url=jdbc:mysql://X.X.X.X:port/titan?characterEncoding=UTF-8 spring.datasource.titan-master.username=your_username spring.datasource.titan-master.password=your_password spring.datasource.titan-master.driver-class-name=com.mysql.jdbc.Driver # db2 数据源 (从库) spring.datasource.db2.url=jdbc:mysql://X.X.X.X:port/titan2?characterEncoding=UTF-8 spring.datasource.db2.username=your_username spring.datasource.db2.password=your_password spring.datasource.db2.driver-class-name=com.mysql.jdbc.Driver ``` 然后,我们创建两个 `@Bean` 方法来表示这两个数据源,并通过 `@ConfigurationProperties` 注解将配置文件中的属性绑定到这些 Bean 上: ```java @Configuration public class DataSourceConfig { @Bean(name = titanMasterDS) @ConfigurationProperties(prefix = spring.datasource.titan-master) public DataSource dataSource1() { return DataSourceBuilder.create().build(); } @Bean(name = ds2) @ConfigurationProperties(prefix = spring.datasource.db2) public DataSource dataSource2() { return DataSourceBuilder.create().build(); } } ``` 有了数据源后,我们需要为每个数据源创建对应的 Mybatis `SqlSessionFactory`。这样,Mybatis 就可以根据不同的数据源执行 SQL 语句: ```java @Configuration @MapperScan(basePackages = titan.mapper, sqlSessionFactoryRef = sqlSessionFactory1) public class MybatisDbAConfig { @Autowired @Qualifier(titanMasterDS) private DataSource ds1; @Bean public SqlSessionFactory sqlSessionFactory1() throws Exception { SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(ds1); return factoryBean.getObject(); } } ``` 对于另一个数据源,同样创建一个配置类(如 `MybatisDbBConfig`),并配置对应的 `SqlSessionFactory`。使用 `@Qualifier(ds2)` 来注入第二个数据源。 在实际的应用场景中,可能还需要进行数据源的切换,即动态地选择不同的数据库连接来执行操作。这通常通过 AOP 实现,在其中定义一个方法根据业务逻辑或请求参数决定当前应使用的数据源。然后可以在需要的地方(如 Service 层的方法)调用这个方法来进行数据源的选择。 ```java public class DynamicDataSource extends AbstractRoutingDataSource { @Override protected Object determineCurrentLookupKey() { return DataSourceContextHolder.getDataSourceKey(); } } 使用 ThreadLocal 存储和获取当前的数据源 key: public class DataSourceContextHolder { private static final ThreadLocal contextHolder = new ThreadLocal<>(); public static void setDataSourceKey(String key) { contextHolder.set(key); } public static String getDataSourceKey() { return contextHolder.get(); } public static void clearDataSourceKey() { contextHolder.remove(); } } ``` 在 Service 层的方法中,根据业务需求设置数据源的 key: ```java @Service public class SomeService { @Autowired private DynamicDataSource dynamicDataSource; public void someMethod() { DataSourceContextHolder.setDataSourceKey(titanMasterDS); // 执行相关操作 DataSourceContextHolder.setDataSourceKey(ds2); // 执行相关操作 DataSourceContextHolder.clearDataSourceKey(); } } ``` 总结来说,Spring Boot 结合 Mybatis 的多数据源配置涉及禁用默认的数据源、定义多个数据库连接信息、创建对应的 `SqlSessionFactory` 和在需要时实现动态地选择不同的数据源。这样的配置能够灵活处理复杂的企业级应用中与多个数据库交互的场景,提高系统的可扩展性和灵活性。
  • 使checkbox于只
    优质
    本文介绍如何将HTML中的复选框(Checkbox)设置为只读模式,通过两种不同的方式实现这一功能,并提供相应的代码示例。 方式一:checkbox元素本身并没有readOnly属性。如果使用disabled=disabled属性会使checkbox呈现灰色状态,这通常会引起用户的反感。为了保持其只读特性而不改变外观,可以设置它的onclick事件为“return false”,这样点击时不会触发任何操作。在JavaScript中实现如下: ```javascript checkbox.onclick = function(){ return false; }; ``` 方式二:使用以下代码: [removed] $(function(){ ... });
  • 有关为Spring Boot加入定时任
    优质
    本文介绍了在Spring Boot项目中集成定时任务的两种常见方式,帮助开发者轻松实现周期性任务调度。 如何在Spring Boot中添加定时器以让程序按照设定的时间间隔自动运行?
  • Spring的几代码示例
    优质
    本文介绍了在Spring框架中实现事务管理的不同方式,并提供了详细的代码示例,帮助开发者理解和应用这些技术。 本段落将通过代码实例介绍Spring事务管理的几种方式:编程式事务、声明式事务中的拦截器代理方式、AOP切面通知方式以及AspectJ注解方式。通过对这些不同方法的具体实现进行展示,总结出Spring事务管理的一般规律,并从宏观角度加深对Spring事务特性的理解。