我正在开发与远程主机通信的简单Spring Web应用程序,我想在公司代理后面进行本地测试.我使用"Spring Boot"gradle插件,问题是如何为JVM指定代理设置?
我尝试了几种方法:
gradle -Dhttp.proxyHost=X.X.X.X -Dhttp.proxyPort=8080 bootRunexport JAVA_OPTS="-Dhttp.proxyHost=X.X.X.X -Dhttp.proxyPort=8080"export GRADLE_OPTS="-Dhttp.proxyHost=X.X.X.X -Dhttp.proxyPort=8080"但似乎没有一个工作 - "NoRouteToHostException"抛出"网络"代码.另外,我添加了一些额外的代码来调试JVM启动参数:
RuntimeMXBean runtimeMxBean = ManagementFactory.getRuntimeMXBean();
List<String> arguments = runtimeMxBean.getInputArguments();
for (String arg: arguments) System.out.println(arg);
Run Code Online (Sandbox Code Playgroud)
并且只打印了一个参数:" - Dfile.encoding = UTF-8".
如果我在代码中设置系统属性:
System.setProperty("http.proxyHost", "X.X.X.X");
System.setProperty("http.proxyPort", "8080");
Run Code Online (Sandbox Code Playgroud)
一切正常!
我想调试一些同时运行的JVM实例。我知道我可以使用gradle运行,--debug-jvm以便JVM等待直到启动IDE调试器,以便它连接到JVM,但默认情况下使用端口5005。这对于调试JVM的一个实例是很好的……但是,如果我要调试多个实例,则需要定义一个与5005不同的端口。如何使用gradle实现它?
我想使用 Gradle 在调试模式下启动我的 SpringBoot 应用程序(在我的机器上使用与生产中使用的命令相同的命令)
要启动我的服务器,我使用
$ gradle bootRun
Run Code Online (Sandbox Code Playgroud)
我知道我可以添加一个参数来启动调试模式
$ gradle bootRun --debug-jvm
Run Code Online (Sandbox Code Playgroud)
问题是上面的命令使服务器挂起(直到我连接调试器后服务器才启动)
我可以通过将以下代码添加到 build.gradle 来获得所需的行为,但是,我想使用命令行参数,以避免错误地提交 build.gradle。
bootRun {
jvmArgs(['-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005'])
}
Run Code Online (Sandbox Code Playgroud)
注意:如果我添加以下参数,我将调试 gradle 守护进程(或另一个 gradle 事物),而不是我的应用程序,因此它也不是有效的解决方案:
gradle bootRun -Dorg.gradle.jvmargs="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
Run Code Online (Sandbox Code Playgroud)
注 2:以下代码不起作用 - 服务器以非调试模式启动
gradle bootRun -Dagentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
Run Code Online (Sandbox Code Playgroud)