单机配置mysql主从:
目前的一些解决方案需要在程序中手动指定数据源,比较麻烦后边我会通过AOP思想来解决這个问题。
此处我们介绍一种在应用层的解决方案通过spring有哪些特性动态数据源和AOP来解决数据库的读写分离。
该方案目前已经在一个互联網项目中使用了而且可以很好的工作。
一读多写;当写时默认读操作到写库、当写时强制读操作到读库
读库负载均衡、读库故障转移等。
不想引入中间件想在应用层解决读写分离,可以考虑这个方案;
应用层解决不引入额外中间件;
在应用层支持『当写时默认读操莋到写库』,这样如果我们采用这种方案在写操作后读数据直接从写库拿,不会产生数据复制的延迟问题;
应用层解决读写分离理论支持任意数据库。
2、必须按照配置约定进行配置不够灵活。
方案1:当只有读操作的时候直接操作读库(从库);
当在写事务(即写主庫)中读时,也是读主库(即参与到主库操作)这样的优势是可以防止写完后可能读不到刚才写的数据;
此方案其实是使用事务传播行為为:SUPPORTS解决的。
方案2:当只有读操作的时候直接操作读库(从库);
当在写事务(即写主库)中读时,强制走从库即先暂停写事务,開启读(读从库)然后恢复写事务。
此方案其实是使用事务传播行为为:NOT_SUPPORTS解决的
5、事务切面和读/写库选择切面
1、事务切面一般横切业務逻辑层;
可以下载附件的代码进行测试,具体选择主/从可以参考日志输出
文档摘要:前些日子一朋友在需偠在目标对象中进行自我调用且需要实施相应的事务定义,且网上的一种通过 BeanPostProcessor的解决方案是存在问题的因此专门写此篇帖子分析why。