我的MySql数据库中的同步需要重新启动我的Java应用程序

时间:2016-10-17 06:43:31

标签: java mysql jpa eclipselink

我有一个应用程序,它由多个用户通过共享相同 MySQL 数据库的网络使用。所以当我们需要对数据库进行更改时,我们需要使用简单的刷新来查看更改。

我正在使用 EclipseLink (默认使用缓存配置)。 实际上,第二个用户(想要捕获第一个用户所做的更改)必须重新启动应用程序(由Netbeans创建)。

更新

以下是 persistence.xml 中的配置。

enter image description here

1 个答案:

答案 0 :(得分:2)

您的applicaltion中可能存在一些缓存,其中包含从DB检索到的previus值 - 因此您调用的sql不会转到DB,而是返回应用程序本地缓存的结果。根据您的持久性配置,请查看文档如何禁用缓存 - 它可能在ORM级别。

来自EclipseLink文档的

,如何禁用缓存:

默认情况下,EclipseLink允许共享对象缓存缓存从数据库读取的对象,以避免重复的数据库访问。如果直接通过JDBC或其他应用程序或服务器更改数据库,则共享缓存中的对象将过时。

EclipseLink提供了几种处理陈旧数据的机制,包括:

Refreshing
Invalidation
Optimistic locking
Cache coordination

也可以禁用共享缓存。这可以使用EclipseLink持久性单元属性来完成:

<property name="eclipselink.cache.shared.default" value="false"/>

或JPA 2.0持久性单元元素:

<shared-cache-mode>NONE</shared-cache-mode>

或者可以使用@Cache注释选择性地启用/禁用:

@Entity
@Cache(isolation=ISOLATED)
public class Employee {
  ...
}

或JPA 2.0 @Cacheable注释:

@Entity
@Cacheable(false)
public class Employee {
  ...
}

不要通过将CacheType设置为None来禁用缓存,这可能会导致对象标识问题。