Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何远程调试在同一容器中运行的两个spring boot应用程序,它们的代码库相同,但配置文件不同?_Java_Eclipse_Spring_Debugging_Remote Debugging - Fatal编程技术网

Java 如何远程调试在同一容器中运行的两个spring boot应用程序,它们的代码库相同,但配置文件不同?

Java 如何远程调试在同一容器中运行的两个spring boot应用程序,它们的代码库相同,但配置文件不同?,java,eclipse,spring,debugging,remote-debugging,Java,Eclipse,Spring,Debugging,Remote Debugging,我有两个spring boot应用程序在同一个容器中运行,它们的代码库相同,但配置文件不同 一个用于生产,另一个用于测试。每个应用程序在不同的虚拟主机下运行 容器是tomcat,我在setenv.sh中添加了这个: CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=n $CATALINA_OPTS" 使用eclipse,我可以为远程Java应用程序创建调试配置。我已将主机设置为测试服务

我有两个spring boot应用程序在同一个容器中运行,它们的代码库相同,但配置文件不同

一个用于生产,另一个用于测试。每个应用程序在不同的虚拟主机下运行

容器是tomcat,我在
setenv.sh
中添加了这个:

CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=n $CATALINA_OPTS"
使用eclipse,我可以为远程Java应用程序创建调试配置。我已将主机设置为测试服务器主机名

但是当我设置断点时,生产应用程序和测试应用程序触发断点


如何设置调试环境,例如只有测试应用程序触发断点

您需要做的是创建一种验证当前配置文件的方法。可以向要调试的对象添加环境:

public class SpringBean {
  @Autowired
  private Environment env;
  ...
}
您可以在其任何方法中设置断点,右键单击它并编辑其
断点属性…
如下所示:

注意:选择“true”时,有条件的
挂起。仅当当前对象属于已激活了
testProfile
的应用程序时,才会触发断点

注意:

您还可以在应用程序中添加一个单例bean,使应用程序中的任何对象都可以静态访问
env
。在这种情况下,您可以访问断点属性中的
EnvHolder.env
,以检查当前配置文件

public class EnvHolder {
  public static Environment env;

  @Autowired
  public void setEnv(final Environment environment) {
      env = environment;
  }
}
但是,如果您在tomcat上没有两个具有独立库的不同应用程序,则类加载问题可能会干扰这种方法


如果无法修改应用程序中的任何类,可以尝试将有关当前配置文件的提示插入到某个线程绑定对象中。例如,为线程名称添加一个特殊的后缀,但您必须确保当线程在测试应用程序中结束其工作时,该名称被清除。

使用singleton bean的解决方案运行良好,并且比第一个命题入侵性更小。非常感谢。