我有一个我想要运行的cron作业,它使用我的云数据存储区中的实体来计算受欢迎程度。
实体摘录:
@Entity
public class Theme {
@Id
private String themeID;
public int popularity;
public void setPopularity(int popularity) {
this.popularity = popularity;
}
在我的CronController中:
@SuppressWarnings("serial")
public class CronController extends HttpServlet {
private static final Logger _logger = Logger.getLogger(CronController.class.getName());
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
try {
_logger.info("Cron Job has been executed");
EntityManager mgr = getEntityManager();
Theme theme = null;
theme = mgr.find(Theme.class, "101");
theme.setPopularity(3);
}
catch (Exception ex) {
//Log any exceptions in your Cron Job
_logger.info("error");
}
}
我知道cron作业按要求运行,因为如果我将“101”更改为(long)101,则说明日志中需要字符串失败,但如果编码如上,则日志文件提供以下内容:
0.1.0.1 - - [19/Feb/2014:17:38:37 -0800] "GET /cron/popularity HTTP/1.1" 200 0 - "AppEngine-Google; (+http://code.google.com/appengine)" "themeviewer.appspot.com" ms=14 cpu_ms=233 queue_name=__cron task_name=243a771773a2bbc80eed32256a5b5043 app_engine_release=1.9.0 instance=00c61b117cabbfbf9dcbf5dedbeb449cc73567
我无法弄清楚如何让它记录错误,告诉我为什么实体“101”在此cron作业运行后没有流行度值3。我该怎么调试呢?
另一方面,日志文件也没有显示“Cron Job已被执行”......我使用以下网站作为教程here
答案 0 :(得分:1)
Cron Job执行没有任何问题。你没有看到数据被持久化的原因是,你没有告诉实体经理坚持它等等。
我建议尝试以下内容:
theme.setPopularity(3);
后,请致电mgr.persist(theme);
finally
子句,以便您可以关闭EntityManager实例,即mgr.close();
请参阅:https://developers.google.com/appengine/docs/java/datastore/jpa/overview