playframework 1.2.x 如何在开发模式下每次播放重新加载时调用我的方法?

Posted

技术标签:

【中文标题】playframework 1.2.x 如何在开发模式下每次播放重新加载时调用我的方法?【英文标题】:playframework 1.2.x How to have my method call every time play reloads in dev mode? 【发布时间】:2012-08-08 18:03:25 【问题描述】:

我需要在每次播放重新加载时调用一个方法,以便我可以使用新类重新扫描一些东西。如果不开发一个完整的插件,我怎么能得到它? (我真的只是想在我的应用程序中快速添加一些东西并继续前进)。

顺便说一句,有没有关于制作播放插件的好教程?

谢谢, 院长

【问题讨论】:

【参考方案1】:

每次您的应用程序重新加载(可能经常处于开发模式)时,都会调用 @onApplicationStart 方法。

因此,只需创建一个引导作业,使用 @onApplicationStart 即可实现所需。

您可以通过查看引导作业的 Play 文档来了解更多信息 - http://www.playframework.org/documentation/1.2.5/jobs#concepts

【讨论】:

不,不是真的。然而我们发现我们可以调用 Play.classloader.getAnnotatedClasses(OurAnnotation.class);它总是按顺序返回类,我们可以将 classes[0] 与之前加载的类进行比较。我们知道当类不等于原始类时会重新加载游戏。 ps。 @ONApplicationStart 被称为“大多数”重新加载,但根据我们的测试,绝对不是所有重新加载......我们终于让它工作了。【参考方案2】:

好吧,如果你有任何像 NoSql.em() 这样经常运行的方法,而 NoSql 在另一个 jar 文件中,它不会在 Play.classloader 中,在那个方法中,我终于做了一个 Play.classloader .getAnnotatedResources() 它给了我一个列表,我不断比较第一个,当它改变时,我知道重新加载了游戏。目前,这种 hack 对我有用,nosql 层现在与内存中的 nosql 数据库保持一致。

虽然@OnApplicationStart 不被称为“每次”播放重新加载,但您可以使用上述方法知道它何时重新加载 100% 的时间,而不是 75% 的时间,这与使用 @OnApplicationStart 的情况有关.

【讨论】:

以上是关于playframework 1.2.x 如何在开发模式下每次播放重新加载时调用我的方法?的主要内容,如果未能解决你的问题,请参考以下文章

playframework 1.2.x:等待/异步和 JPA 事务

如何让 Playframework 在不发出请求的情况下开始在开发模式下运行应用程序?

如何自动测试 playframework 演变

在play framework 1.2.x, class JPABase分析中,为啥要调用saveAndCascade()?

在 Play Framework 1.2.x 中,如何在路径表达式中使用渲染参数值?

为开发服务器设置上下文 [playframework 2.1.3]