最近使用AbstractRoutingDataSource来实现动态切换数据源的功能,发现jpa实现的查询都可以正常实现数据源的动态切换,唯独使用EntityManager创建查询没有进入determineCurrentLookupKey()方法。
调试一番之后发现在创建查询前加上这一行代码即可解决问题。
entityManager.getEntityManagerFactory().createEntityManager();
猜测应该是数据源切换了之后,EntityManager还是使用的第一次初始化使用的数据源,导致切换查询还是查询的之前的数据源。
文章探讨了在使用AbstractRoutingDataSource进行数据源动态切换时遇到的一个问题,即JPA查询能正常切换,但通过EntityManager创建的查询无法进入determineCurrentLookupKey()方法。作者发现,问题可能在于数据源切换后,EntityManager仍使用初始的数据源。解决方案是在创建查询前调用entityManager.getEntityManagerFactory().createEntityManager(),这似乎能确保正确地切换数据源。
505





