mirror of
https://github.com/hs-web/hsweb-framework.git
synced 2026-05-20 06:46:09 +08:00
52 lines
1.5 KiB
Markdown
52 lines
1.5 KiB
Markdown
# 动态数据源模块
|
|
提供动态数据源支持功能,支持注解方式,编程方式动态切换数据源,支持事务中切换数据源,支持跨数据库事务
|
|
|
|
目前提供JTA实现,请看:[hsweb-datasource-jta](hsweb-datasource-jta)
|
|
|
|
# example
|
|
|
|
表达式方式:
|
|
|
|
application.yml配置
|
|
```xml
|
|
hsweb:
|
|
datasource:
|
|
switcher:
|
|
test: # 只是一个标识
|
|
# 拦截类和方法的表达式
|
|
expression: org.hswebframework.**.*Service.find*
|
|
# 切换数据源
|
|
data-source-id: read_db
|
|
# 切换数据库 从3.0.8开始支持
|
|
#database: db_001 # select * from db_001.s_user
|
|
```
|
|
|
|
编程方式:
|
|
```java
|
|
//切换到 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();
|
|
```
|
|
|
|
注解方式:
|
|
```java
|
|
@UseDataSource("mysql_write_01")
|
|
String insert(MyEntity);
|
|
|
|
@UseDataSource("mysql_read_01")
|
|
MyEntity selectByPk(String id);
|
|
|
|
@UseDefaultDataSource()
|
|
MyEntity selectByPk(String id);
|
|
```
|
|
|
|
注意: 如果没有使用`hsweb-datasource-jta`模块,则无法在事务中切换数据源,
|
|
你可能需要先取消掉对应方法上的事务:如在方法上注解`@Transactional(propagation = Propagation.NOT_SUPPORTED)` |