提供动态数据源支持功能,支持注解方式,编程方式动态切换数据源,支持事务中切换数据源,支持跨数据库事务。
pom.xmlhsweb:datasource:switcher:test: # 只是一个标识# 拦截类和方法的表达式expression: org.hswebframework.**.*Service.find*# 使用数据源data-source-id: read_db
@UseDataSource("mysql_write_01")String insert(MyEntity);@UseDataSource("mysql_read_01")MyEntity selectByPk(String id);@UseDefaultDataSource()MyEntity selectByPk(String id);
//切换到 id为mysql_read_01的数据源DataSourceHolder.switcher().use("mysql_read_01");// ....//切换到 id为mysql_write_01的数据源DataSourceHolder.switcher().use("mysql_write_01");// ....// 切换到上一次使用的数据源 (mysql_read_01)DataSourceHolder.switcher().useLast();// ...// 切换到默认的数据源DataSourceHolder.switcher().useDefault();
如果没有使用Jta多数据源,则无法在事务中切换数据源, 你可能需要先取消掉对应方法上的事务:如在方法上注解@Transactional(propagation = Propagation.NOT_SUPPORTED)