mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-07 00:58:24 +08:00
feat: add DataSourceKey.use to support nested usage
This commit is contained in:
parent
c206540bf7
commit
e7292f53b4
@ -45,22 +45,32 @@ public class DataSourceKey {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static <T> T use(String dataSourceKey, Supplier<T> supplier) {
|
public static <T> T use(String dataSourceKey, Supplier<T> supplier) {
|
||||||
|
String prevKey = manualKeyThreadLocal.get();
|
||||||
try {
|
try {
|
||||||
use(dataSourceKey);
|
manualKeyThreadLocal.set(dataSourceKey);
|
||||||
return supplier.get();
|
return supplier.get();
|
||||||
} finally {
|
} finally {
|
||||||
|
if (prevKey != null) {
|
||||||
|
manualKeyThreadLocal.set(prevKey);
|
||||||
|
} else {
|
||||||
clear();
|
clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void use(String dataSourceKey, Runnable runnable) {
|
public static void use(String dataSourceKey, Runnable runnable) {
|
||||||
|
String prevKey = manualKeyThreadLocal.get();
|
||||||
try {
|
try {
|
||||||
use(dataSourceKey);
|
manualKeyThreadLocal.set(dataSourceKey);
|
||||||
runnable.run();
|
runnable.run();
|
||||||
} finally {
|
} finally {
|
||||||
|
if (prevKey != null) {
|
||||||
|
manualKeyThreadLocal.set(prevKey);
|
||||||
|
} else {
|
||||||
clear();
|
clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void clear() {
|
public static void clear() {
|
||||||
annotationKeyThreadLocal.remove();
|
annotationKeyThreadLocal.remove();
|
||||||
|
|||||||
@ -29,7 +29,6 @@ import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
|
|||||||
|
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
public class MultiDataSourceTester {
|
public class MultiDataSourceTester {
|
||||||
|
|
||||||
@ -60,9 +59,9 @@ public class MultiDataSourceTester {
|
|||||||
AuditManager.setMessageCollector(collector);
|
AuditManager.setMessageCollector(collector);
|
||||||
|
|
||||||
Db.tx(() -> {
|
Db.tx(() -> {
|
||||||
Db.selectAll(null, "tb_account");
|
Db.selectAll("tb_account");
|
||||||
DataSourceKey.use("ds2");
|
DataSourceKey.use("ds2");
|
||||||
Db.selectAll(null, "tb_account");
|
Db.selectAll("tb_account");
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user