作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Java Web 应用程序,并且正在通过 JPA2 (EclipseLink) 访问 Oracle 11g 数据库
现在必须对存储的数据进行一些更改,但我的应用程序仍在缓存旧值。
问题:如何强制我的应用程序删除整个缓存并从数据库重新加载数据(在应用程序运行时)?
我尝试了以下方法,但似乎没有效果:
@ManagedBean
@SessionScoped
public class CacheEvictall implements Serializable {
// (...)
public void evictDatabaseCache() {
// clear persistence cache
EntityManager em = emf.createEntityManager();
if (em != null) {
LOGGER.info("Evicting database cache!");
try {
utx.begin();
emf.getCache().evict(FooClass.class);
emf.getCache().evict(BarClass.class);
// or: emf.getCache().evictAll();
em.flush();
utx.commit();
} catch (Exception e) {
e.printStackTrace();
}
} else {
LOGGER.log(Level.WARNING, "No EntityManager! Cannot evict cache!");
}
}
}
我什至重新启动了应用程序服务器(Glassfish v3.1.2)并重新部署了应用程序本身,但效果相同:没有任何反应。
提前谢谢您范特
最佳答案
evict 将使缓存失效并确保下一个查询从数据库返回数据。
如果您重新启动应用程序服务器,但仍然没有看到更改,那么我猜测您没有更改数据。检查您是否提交了事务,并检查您是否正在更新正确的数据库。还要确保您不会在启动时删除并重新创建表。
关于java - 如何将我的 Web 应用程序同步到我的数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13817817/
我是一名优秀的程序员,十分优秀!