原文:
http://www.cnblogs.com/surge/p/3582248.html。这篇文章的原理就是利用Spring AOP对DAO层中的方法的注解值进行判断,然后使用不同的DataSource,进而实现数据库的读写分离。
比如:
public interface UserMapper {
@
DataSource("master")
public void add(User user);
@
DataSource("slave")
public List<User> list();
}
利用@
DataSource注解,就会分别从两个数据源读/写数据。
下面是注解:
<!-- 配置数据库注解aop -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
<beans:bean id="manyDataSourceAspect" class="com.abc.proxy.DataSourceAspect" />
<aop:config>
<aop:aspect id="c" ref="manyDataSourceAspect">
<aop:pointcut id="tx" expression="execution(* com.abc.mapper.*.*(..))"/>
<aop:before pointcut-ref="tx" method="before"/>
</aop:aspect>
</aop:config>
<!-- 配置数据库注解aop -->
但是我在按照这个教程配置的过程中,发现这个配置是走不通的。因为@
DataSource是针对方法级别的,但是determineCurrentLookupKey方法为SqlSessionFactory等类的构造中需要的,执行顺序是determineCurrentLookupKey->before,所以annotation方法就失效了?请问应当如何处理?
当然,用别的方式实现也行。多谢!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/209519
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.