全局 onStart 在 Play Framework 2.3.7 上不起作用?

8

很抱歉如果这个问题看起来有些愚蠢,但我简直找不到自己的错误并且我已经在stackoverflow和其他网站上检查了大量的帖子。 我使用Java设置了一个Play 2.3.7项目,并在app目录下的common包中创建了一个Global.java文件。 在该文件中,我覆盖了onStart(和其他钩子),但它们根本不起作用。 它们根本没有执行。 这是Global.java文件:

package common;

import play.Application;
import play.GlobalSettings;
import play.Logger;

public class Global extends GlobalSettings {

    @Override
    public void beforeStart(Application application) {
        Logger.error("good bye cruel world");
        super.beforeStart(application);
        throw new RuntimeException("WTF");
    }

    @Override
    public void onStart(Application application) {
        Logger.error("good bye cruel world");
        super.onStart(application);
        throw new RuntimeException("WTF");
    }

    @Override
    public void onStop(Application application) {
        Logger.error("good bye cruel world");
        super.onStop(application);
        throw new RuntimeException("WTF");
    }
}

在application.conf文件中,默认情况下已经有相关部分进行了注释:

# Define the common.Global object class for this application.
# Default to common.Global in the root package.
# application.global=common.Global

有什么问题吗?谢谢。
2个回答

8

看起来您忘记取消注释application.global设置。

以下代码对我来说运行良好。

Global.java文件:

package common;

import play.Application;
import play.GlobalSettings;
import play.Logger;

public class Global extends GlobalSettings {

    @Override
    public void beforeStart(Application application) {
        Logger.error("good bye cruel world");
        super.beforeStart(application);
    }

    @Override
    public void onStart(Application application) {
        Logger.error("good bye cruel world");
        super.onStart(application);
    }

    @Override
    public void onStop(Application application) {
        Logger.error("good bye cruel world");
        super.onStop(application);
    }
}

应用程序配置文件:

# Define the Global object class for this application.
# Default to Global in the root package.
application.global=common.Global

6
Global对象必须驻留在默认包中,因此您需要删除package common
文档的第一段所述。

好的,如果我将它移动到默认包中,它就可以工作。谢谢。现在,生成的注释有点误导,默认提到了common包。另外,我尝试将Global.java重定位到其他地方并使用application.global=the.new.package.Global,但它不起作用:它会抛出一些异常,应用程序无法启动。有什么想法吗? - ale64bit
4
你只能使用application.global来更改Global对象的类名,比如application.global=SomethingGlobal,但你不能将其移到另一个包中。 - Michael Zajac
1
好的,我刚刚将Global.java移动并重命名为common.SomethingElse.java,添加了application.global=common.SomethingElse,它可以正常工作。所以我想你对此是错误的。无论如何,还是谢谢你。 - ale64bit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接