我希望能够使用 javaagent 运行 Play Framework 2.0 服务器。
网络上的一些资源(请参阅此处和此处)表明这可以通过附加-javaagent:/path/to/agent.jar
来完成,play run
但它似乎对我不起作用。
有什么线索吗?
我在 Heroku 中使用它,工作正常如下(在我的 Procfile 中):
play ${JAVA_OPTS} ${MYCONFIG} -javaagent:/newrelic/newrelic.jar run
我的newrelic文件夹位于根目录下,与app处于同一级别
SBT 的 java 命令行在文件夹中的“ ”build.bat
批处理文件 (Win) 或“ build
” shell 脚本 (U*X) 中定义%PLAY2_HOME%/framework
您可以通过调整那里定义的参数来添加 javagent 或调整 SBT/Play2 使用的其他 JVM 设置。这可能是 Heroku 的聪明人已经做过的事情。
在不修改脚本的情况下,没有干净的方法可以将 -javaagent 参数传递给使用 play 2.0.1-2.0.4 的 java 命令调用。
我能够使用以下技术使 javaagent 工作:
# Modify the play/framework/build script to include an extra environment variable
sed -i 's/^java\( \${PLAY_OPTS}\)\?/java ${PLAY_OPTS}/' ${playPath}/framework/build
然后可以像这样传递 -javaagent 参数:
export PLAY_OPTS='-javaagent:/lib/newrelic/newrelic.jar'
${playPath}/play -Dconfig.file=conf/prod.conf -Dlogger.file=conf/prod-logger.xml start
更新
一个不幸的旁注——我刚刚从 New-Relic 支持中发现,New-Relic 现在绝对不支持 play-framework 2.x (2012-10-04)。
示例不起作用的原因是因为示例适用于 Play 1.x,而您使用的是 play 2.x。Play 1.x 使用 Java(通过 python 脚本),而 Play 2 使用 SBT。
您需要配置 SBT。我不是 SBT 专家,但从谷歌搜索,我会认为只是运行
play -javaagent:/path/to/agent.jar
然后run
一旦控制台启动就可以解决问题,但如果这不起作用,那么就是找出如何将 javaagent 语法添加到 SBT 控制台的情况。