AbstractRoutingDataSource奇怪的行为

时间:2015-11-12 18:42:43

标签: java spring servlets spring-boot

我是春天的新手。 我使用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
    }

}

上下文改变只有一次,我不知道出了什么问题。

0 个答案:

没有答案