我有一个Java GAE应用程序,应该在部署新版本的应用程序时清除内存缓存。我正在使用静态初始化程序,即 静态的 { 。MemcacheServiceFactory.getMemcacheService()clearAll(); }
但是,无论何时启动新实例,这都会清除内存缓存,这不是所希望的行为。
执行初始化代码的正确方法是什么?
TIA
答案 0 :(得分:3)
我使用工厂创建我的memcache密钥,并且它们总是附加我的应用程序的版本号,所以当我上传新版本时,密钥是新的我忘了旧的缓存值,这将自行消失。
我还在web.xml中定义了一个servlet,其中只有admin的安全约束,然后我在升级后手动浏览到它的URL(/ admin / example) - 以admin身份登录。 servlet运行了一次代码,以启动升级存储数据和清除缓存的任何任务。
<security-constraint>
<web-resource-collection>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
答案 1 :(得分:-4)
应用程序的一次初始化可以在Servlet的init()方法中完成。这是一个例子
public class CatalogServlet extends HttpServlet {
private BookDB bookDB;
public void init() throws ServletException {
bookDB = (BookDB)getServletContext().
getAttribute("bookDB");
}
在上面的例子中,ServletContext属性当然只是servlet调用之间存在的变量(维护状态的常规方式)。当然,这假设您在其他地方将此变量存储在ServletContext中。另一种方法是在部署描述符中创建变量。
要在部署描述符(web.xml)中设置初始化参数,下面是一个示例:
<servlet
<servlet-name...
<servlet-class ...
<init-param>
<param-name>param1</param-name>
<param-value>value1</param-value>
</init-param>
</servlet>
如果没有回答,请说明“每当启动新实例时”。