使用playframework 2.1编译play2计划作业演示
我正在开发Play Framework 2.1应用程序,它应该使用Heroku worker dyno单元来执行耗时的后台工作。有一些关于如何做到这一点的一般性讨论,但没有那么多实际的例子 詹姆斯·沃德的例子看起来非常接近我想要实现的目标: 它是为Play Framework 2.0.1实现的,因此我仔细地将项目文件转换为2.1版本。不幸的是,由于TickJob.java中的错误,项目无法编译使用playframework 2.1编译play2计划作业演示,playframework,scheduled-tasks,background-process,web-worker,playframework-2.1,Playframework,Scheduled Tasks,Background Process,Web Worker,Playframework 2.1,我正在开发Play Framework 2.1应用程序,它应该使用Heroku worker dyno单元来执行耗时的后台工作。有一些关于如何做到这一点的一般性讨论,但没有那么多实际的例子 詹姆斯·沃德的例子看起来非常接近我想要实现的目标: 它是为Play Framework 2.0.1实现的,因此我仔细地将项目文件转换为2.1版本。不幸的是,由于TickJob.java中的错误,项目无法编译 package jobs; import models.Tick; import play.api
package jobs;
import models.Tick;
import play.api.Play;
import play.api.Mode;
import play.api.Application;
import java.io.File;
public class TickJob {
public static void main(String[] args) {
Application application =
new Application(new File(args[0]), TickJob.class.getClassLoader(), null, Mode.Prod());
Play.start(application);
Tick tick = new Tick("Hello from the TickJob");
tick.save();
}
}
以下是错误日志:
TickJob.java:15: play.api.Application is abstract; cannot be instantiated
显然,这是API 2.0.1和2.1.0变化的结果。那么2.1.0如何解决这个问题呢
据我所知,TickJob类中的主要方法是worker进程的入口点。从Procfile可以清楚地看出,TickJob是作为一个单独的java应用程序而不是play框架应用程序在Heroku上运行的。因此,我假设在这里的main方法中创建Play应用程序的目的是访问web应用程序和模型类的数据库
更新
编译的问题现在已经解决了。我无法在Windows XP上使用Foreman在本地运行应用程序,因此我采取了以下步骤来实际观察应用程序的运行情况
/localhost:9092/
set PORT=9000
set DATABASE_URL=jdbc:h2:tcp:localhost:9092/mem/play
java -Dhttp.port=%PORT% -Ddb.default.url=%DATABASE_URL% -DapplyEvolutions.default=true -cp "target/staged/*"; play.core.server.NettyServer target/..
这是由play stage
命令生成的target/start
脚本与Procfile中的参数的混合 set DATABASE_URL=jdbc:h2:tcp://localhost:9092/mem/play
java -Dconfig.file=conf/application.conf -Ddb.default.url=%DATABASE_URL% -cp "target/staged/*"; jobs.TickJob .
pause
newdefaultapplication(新文件(args[0]),…)中作为args[0]
传递。我花了很长时间才弄明白)
谢谢 您必须使用DefaultApplication
而不是Application
:
public class TickJob {
public static void main(String[] args) {
Application application =
new DefaultApplication(new File(args[0]), TickJob.class.getClassLoader(), null, Mode.Prod());
Play.start(application);
Tick tick = new Tick("Hello from the TickJob");
tick.save();
}
}
API可在此处找到:
它在2.1版本中已更改。对此表示抱歉。我会尽快将此更新为Play 2.1。我的代码已更新为Play 2.1.0。谢谢您的回复。您的代码示例非常有用。@nico_ekito的回答解决了2.1的编译问题。现在我被困在Win XP的Foreman上运行它。