如何将Java代理附加到正在运行的spring-boot应用程序上

时间:2019-04-22 10:55:20

标签: java maven spring-boot agent

我有一个打包为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应用程序一样。

如何实现?

1 个答案:

答案 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路径。

它按预期工作。