我是春天的新手。 我使用AbstractRoutingDataSource来改变运行时和SpringBoot中的数据库连接 我的代码与此https://spring.io/blog/2007/01/23/dynamic-datasource-routing类似,但bean以编程方式配置。
public class DatabaseContext {
private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
public static void setDatabaseType(String string) {
contextHolder.set(string);
}
public static String getDatabaseType() {
return (String) contextHolder.get();
}
public static void clearDatabaseType() {
contextHolder.remove();
}
}
当我更改上下文(伪代码)时,一切正常:
public class Application {
@Autowired
private MyCrudRepository repository;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override run(){
DatabaseContext.changeContext("db1");
repository.findAll(); //data from db1 like expected
DatabaseContext.changeContext("db2");
repository.findAll(); //data from db2 like expected
}
}
但是当我在servlet类(伪代码)中更改上下文时
@Controller
public class MyWebController{
@RequestMapping(someMapping)
HttpEntity someMethod(){
DatabaseContext.changeContext("db1");
repository.findAll(); //data from db1 like expected
DatabaseContext.changeContext("db2");
repository.findAll(); //data from db1
}
}
上下文改变只有一次,我不知道出了什么问题。