Java EE 7 Web 应用程序重新部署数据的简单方法
Simple ways to keep data on redeployment of Java EE 7 web application
我的 Java EE 7 Web 服务每天生成一次统计信息,并且由于数据仅存储在 ApplicationScoped bean 中,因此它无法在重新部署后继续存在,因此客户端在下一次运行完成之前无法检索统计信息。
JavaEE 7 是否提供一种简单的方法来保持应用程序状态,以便它在重新部署后可用,类似于内存数据库?因为它只是一个大对象(列表),所以我更喜欢比数据库更简单(也可能性能更好)的东西。
在 @ApplicationScoped
bean 中,您只需实现 @PreDestroy
即可将其保存到某个临时存储中,然后您可以在 @PostConstruct
中检查和读取该存储。您可以获得容器管理的临时存储位置作为由 ServletContext.TEMPDIR
.
键控的 servlet 上下文属性
这是一个使用 JAXB 的启动示例,因此数据以可重复使用的 XML 格式保存。
private Data data;
private File file;
private JAXBContext jaxb;
@Inject
private ServletContext servletContext;
@PostConstruct
public void init() {
File tempdir = (File) servletContext.getAttribute(ServletContext.TEMPDIR);
file = new File(tempdir, "data.xml");
jaxb = JAXBContext.newInstance(Data.class);
if (file.exists()) {
data = (Data) jaxb.createUnmarshaller().unmarshal(file);
}
}
@PreDestroy
public void destroy() {
jaxb.createMarshaller().marshal(data, file);
}
如果您碰巧部署到 JBoss (WildFly),那么您也可以使用 JBoss 管理的数据文件夹,它比 [= 表示的位置更永久15=].
String datadir = System.getProperty("jboss.server.data.dir");
file = new File(datadir, "data.xml");
我的 Java EE 7 Web 服务每天生成一次统计信息,并且由于数据仅存储在 ApplicationScoped bean 中,因此它无法在重新部署后继续存在,因此客户端在下一次运行完成之前无法检索统计信息。
JavaEE 7 是否提供一种简单的方法来保持应用程序状态,以便它在重新部署后可用,类似于内存数据库?因为它只是一个大对象(列表),所以我更喜欢比数据库更简单(也可能性能更好)的东西。
在 @ApplicationScoped
bean 中,您只需实现 @PreDestroy
即可将其保存到某个临时存储中,然后您可以在 @PostConstruct
中检查和读取该存储。您可以获得容器管理的临时存储位置作为由 ServletContext.TEMPDIR
.
这是一个使用 JAXB 的启动示例,因此数据以可重复使用的 XML 格式保存。
private Data data;
private File file;
private JAXBContext jaxb;
@Inject
private ServletContext servletContext;
@PostConstruct
public void init() {
File tempdir = (File) servletContext.getAttribute(ServletContext.TEMPDIR);
file = new File(tempdir, "data.xml");
jaxb = JAXBContext.newInstance(Data.class);
if (file.exists()) {
data = (Data) jaxb.createUnmarshaller().unmarshal(file);
}
}
@PreDestroy
public void destroy() {
jaxb.createMarshaller().marshal(data, file);
}
如果您碰巧部署到 JBoss (WildFly),那么您也可以使用 JBoss 管理的数据文件夹,它比 [= 表示的位置更永久15=].
String datadir = System.getProperty("jboss.server.data.dir");
file = new File(datadir, "data.xml");