gpt4 book ai didi

java - Play Framework 1.2.7 引导作业数据库写入失败

转载 作者:太空宇宙 更新时间:2023-11-04 12:26:18 25 4
gpt4 key购买 nike

使用 Play Framework 1.2.7,我有一个扩展 play.jobs.Job 的类,该类执行数据库写入(使用 Play Moprhia 插件的 MongoDB)

这是一个简短的示例:

/* controller */
public static void doThings(@Required String id) {
User me = User.findById(id);
notFoundIfNull(me);

new MyJob(me).now();
}

/* MyJob */
public class MyJob extends Job {
private final User me;

public MyJob(User me) {
this.me = me;
}

@Override
public void doJob() {
int newValue = me.someInt;
newValue++;
me.someInt = newValue;
me.save();
}
}

这是奇怪的部分(无论如何对我来说很奇怪):

doJob() 方法中的写入确实会在第一次执行作业时发生,有时会发生第二次,但该作业的任何其他实例都不会发生写入。不会引发任何异常。

如果我只是从 MyJob 中删除 extends Job,然后通过自己实例化它并调用 doJob() 来调用 MyJob 类,它每次都会起作用:

/* controller */
public static void doThings(@Required String id) {
User me = User.findById(id);
notFoundIfNull(me);

new MyJob(me).doJob(); // assumes this class no longer Extends Job
}

我现在使用 Play 已有 4 年多了,从未见过这种行为,而且我不知道到底发生了什么。

最佳答案

我不确定,但我认为可能是 Morphia 插件和 Context 上的特殊冲突(未处理)。我确信 Play1 的 JPA 模型中有一些非常相似的东西,其中有两个上下文。

从您的代码中我注意到该对象是由 Controller 上下文加载的,并保存在作业上下文中。当您没有工作时,Morphia 仍然使用 Controller 。

尝试仅传递 id 并在 Job 内部重新加载,或者尝试使用 JPDA 远程调试,捕获每个调用(在 Controller 和作业内部),深入 Play 框架并比较上下文对象。

祝你好运

关于java - Play Framework 1.2.7 引导作业数据库写入失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38355920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com