当使用Spring Boot开发数据库应用时,读写分离是一种常见的优化策略。读写分离将读操作和写操作分别分配给不同的数据库实例,以提高系统的吞吐量和性能。
读写分离实现主要是通过动态数据源功能实现的,动态数据源是一种通过在运行时动态切换数据库连接的机制。它允许应用程序根据不同的条件或配置选择不同的数据源,以实现更灵活和可扩展的数据库访问。
通过不同的条件限制和配置文件前缀可以完成不同数据源的创建工作,不止是主从也可以是多个不同的数据库。
主库数据源配置:
从库数据源配置:
这儿做了一个开关,可以控制读写分离的开启和关闭工作,可以将操作全部切换到主库进行。然后根据上下文中的数据源类型来返回不同的数据源类型枚举。
将主数据库和从数据库的数据源添加到动态数据源中,并可以通过枚举创建一个数据源 ,这样就可以通过上面的路由返回的枚举来切换数据源。
使用 存储当前线程的数据源类型。
注意这儿有个潜在风险就是创建新的线程时会导致 中的数据无法正确读取,如果涉及到在开启新线程可以使用 来进行父子线程数据的同步。
Github:https://github.com/alibaba/transmittable-thread-local
如果不排除自动配置类会导致初始化多个 dataSource 对象导致出现问题。
修改连接配置,加入连接池相关配置即可。
不需要做任何配置,正常集成 mybatis 即可使用读写分离功能。
可以通过 mybatis 的拦截器在执行写入操作时强制切换到主库。
Ref:
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/java-jiao-cheng/15196.html