如何将多个 spring 数据应用程序与共享数据库一起使用

How to use multiple spring-data applications with a shared database

我有一个 spring 应用程序,它使用 spring-data 来访问数据库。现在还有另一个应用程序,它需要使用 Hibernate/JPA 访问数据来更新同一个数据库。

如果我从 APP2 更新数据,它们将不会通过 spring-data 在 APP1 中可见,因为底层 EntityManager 不会被刷新。

是否有任何开箱即用的解决方案来提供此功能?显然,我能想到的是:

我想避免第一个选项,因为需要重构APP1。我不确定第二个是如何工作的,即:

您可以使用 spring-data-hazelcast with Mapstore API。这对您的应用程序的影响最小,但需要 Mapstore 实施。如果您选择在嵌入式模式下使用 hazelcast,那可能会更好,因为您不必管理单独的中央缓存。 Hazelcast 可根据您的应用要求进行扩展 out/in

经过一番深入研究和测试后,我发现 Spring-data 与 Hibernate 一起可以正确处理这种情况。

我的测试完全基于 Hibernate/JPA 并且当使用两个 EntityManager 时,我正确地没有看到通过其中一个在另一个 EntityManager 中所做的更改(我将 EntityManager 创建为服务 class施工期间的成员)。但是,spring-data 所做的是,它为每次调用 @Transactional 方法打开一个新的 Hibernate Session,并在完成后关闭它。

所以问题出在特定的业务逻辑中,因为它取决于 @Transactional 方法的上下文,如果它可以 "possibly" 在方法调用期间使用陈旧数据。