我有一个 Web 应用程序,它从数据库中提取数据然后显示它。现在我遇到的问题是每个小时我都想对数据库中的数据进行更新;这是由一个单独的应用程序完成的,这一切都很好。但是,一旦发生这种情况并且用户刷新了他们的网页,就不会显示新数据。
我希望这是有道理的。
我将从应用程序中提供一些代码,以便您更好地看到它。
我的 web 应用程序是使用 java 用 netbeans 编写的,我有一个持久性单元,它将类映射到数据库中的表。我正在使用 wicket 将我的组件添加到我的 html 中。
// Java 检票口代码
ApplicationSettings apset = new ApplicationSettingsDAO().getApplicationSettings();
this.add(new Label("lblGameTime", "" + apset.getGameTimeDays()));
// 检票口 html 代码
Date : day <span wicket:id="lblGameTime">generated date</span>
// DAO 应用程序设置,它从 db 中获取设置对象并将其返回给上面的 Java Wicket 代码
public ApplicationSettings getApplicationSettings() {
ApplicationSettings settings;
try {
Query q = manager.createQuery("select s from ApplicationSettings s where s.setting = :setting");
q.setParameter("setting", "setting");
settings = (ApplicationSettings) q.getSingleResult();
} catch (NoResultException e) {
ApplicationSettings newSetting = new ApplicationSettings();
return newSetting;
}
return settings;
}
//ApplicationSettings 只是类。
//每小时代码在另一个可以运行并更新数据库的应用程序中运行
Query query6 = manager.createQuery("select s from ApplicationSettings s where s.setting = :setting");
query6.setParameter("setting", "setting");
ApplicationSettings apset = (ApplicationSettings) query6.getSingleResult();
apset.setGameTimeDays(apset.getGameTimeDays() + 1);
save(apset);
现在,当用户再次加载页面时,我希望gameTimeDays是正确的,因为页面会再次从数据库中获取数据,因为它会调用上面的java wicket 代码。但是价值没有改变。页面上显示的值是更新前的旧值。无论发生多少次更新,此值仍然是旧值。但是,如果我在 tomcat 服务器中重新部署或重新启动模块,那么该值在那个时刻是正确的。
我错过了什么,这是一个小问题,答案似乎在暗示我。
该值似乎存储在内存中,直到重新部署服务器或其他东西。我不太了解java的内部工作原理来了解这一点。
好的,我希望我为某人提供了足够的信息来帮助我解决困境。
谢谢你的帮助。
编辑:持久性库是 TopLink Essentials