我有一个打包为war的spring boot应用程序,该应用程序在端口上运行,现在我想将Java代理附加到此应用程序,以使用Prometheus监视微服务。但无需使用任何Spring插件即可从中获取指标。
为此,我找到了一种通过以下方式启动应用程序来运行Java代理的方法(将我的应用程序打包到jar中进行试用,效果很好)
java -javaagent <Path-to javaagent jar>:PORT -jar app.jar
如果我的项目被打包到jar中,这将很好地工作。它在PORT上启动了Java-agent,在另一个端口上启动了我的应用程序,并且无法从java-agent获取指标。
但是实际的问题是我的应用程序打包成了一场战争。
我们可以运行带有war文件的Java代理吗?
另外,我想尝试的另一件事是,使用maven启动应用程序后,将此代理jar附加到jvm,就像其他任何带有“ mvn spring-boot:run”的spring boot应用程序一样。
如何实现?
答案 0 :(得分:0)
@Strelok建议, 我已将Java代理添加到maven_opts中,以在端口上运行,
设置MAVEN_OPTS = -javaagent:Path-to javaagent jar = PORT = 9300
在我使用mvn spring-boot:run命令运行应用程序时,它在我的本地环境中工作。
但是,如果要同时运行/监视两个不同的微服务,则如上所述添加maven_opts可能会导致第二个微服务出现问题,因为该代理已经在同一端口上运行。 在这种情况下,我们无需在环境变量中添加maven_opts,而是可以在spring-boot-maven-plugin下将agent标记添加到pom.xml中以
的形式启动代理<configuration> <agent> PATH to JAR=port=XXXX </agent> </configuration>
但是我们的暂存环境与Jenkins作业一起运行,该作业将应用程序war构建并部署到tomcat服务器中,并启动tomcat(通过运行./startup.sh)。 因此,我在tomcat服务器的setenv.sh中的catalina_opts中添加了Java代理的jar路径。
它按预期工作。