zoukankan      html  css  js  c++  java
  • SpringBoot整合AbstractRoutingDataSource实现读写分离

    在配置数据源时候,已经把主库和从库的数据源配置到DynamicDataSource里了

    利用AbstractRoutingDataSource实现动态切换数据源,可以通过注解或者根据方法名前缀切换要使用的数据源

    这里主库和从库要做主从同步,这样就实现了数据库的读写分离

    AOP的执行顺序 ,order值越小,越先被执行

    /**
     * order 的值越小,说明越先被执行
     *
     */
    @Aspect
    @Component
    @Order(0)
    @Slf4j
    public class DataSourceAspect{
     
        /**
         * 注解方式
         * @param joinPoint
         * @param dataSource
         */
        @Before(value = "@annotation(dataSource)")
        public void dataSourcePoint(JoinPoint joinPoint, DataSource dataSource) {
            DynamicDataSourceHolder.putDataSource(dataSource.value());
            log.info("通过注解 dataSource 切换到:{}",dataSource.value());
        }
     
        
    }
    @Aspect
    @Component
    @Order(-1)
    @Slf4j
    public class DataSourcePartAspect {
        /**
         * mapper 查询操作默认使用从库
         */
        @Before("execution(* com..service..*.select*(..)) || execution(* com..service..*.get*(..))|| execution(* com..service..*.query*(..))")
        public void setReadDataSourceType() {
            DynamicDataSourceHolder.putDataSource(DataSourceType.SLAVE);
            log.info("dataSource 切换到:{}",DataSourceType.SLAVE.getName());
        }
     
        /**
         * mapper 修改删除操作默认使用主库库
         */
        @Before("execution(* com..service..*.insert*(..)) || execution(* com..service..*.update*(..)) || execution(* com..service..*.delete*(..))")
        public void setWriteDataSourceType() {
            DynamicDataSourceHolder.putDataSource(DataSourceType.MASTER);
            log.info("dataSource 切换到:{}",DataSourceType.MASTER.getName());
        }
     
    }

    项目结构:

    github下载地址:

  • 相关阅读:
    Linux常见命令
    CSS以及JQuery总是忽略掉的小问题
    HTML DOM appendChild() 方法
    WINUSB使用(附STM32Demo)
    STM32H7系列调试使用DCMI过程中若干注意事项
    godot初涉
    【转】使用objdump看内核源码
    scrcpy rk3399 交叉编译 meson
    gitlab hooks 钩子实现服务器代码同步至文件夹
    Linux编译笔记
  • 原文地址:https://www.cnblogs.com/moris5013/p/11171552.html
Copyright © 2011-2022 走看看