当前位置: 首页 > 面试题库 >

如何从bootRun传递JVM选项

张晨朗
2023-03-14
问题内容

我正在开发与远程主机进行通信的简单Spring Web应用程序,我想在公司代理之后在本地对其进行测试。我使用“ Spring Boot”
gradle插件,问题是 如何为JVM指定代理设置?

我尝试了几种方法来做到这一点:

  1. gradle -Dhttp.proxyHost=X.X.X.X -Dhttp.proxyPort=8080 bootRun
  2. export JAVA_OPTS="-Dhttp.proxyHost=X.X.X.X -Dhttp.proxyPort=8080"
  3. 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);

并且仅打印一个参数:“-Dfile.encoding = UTF-8”。

如果我在代码中设置系统属性:

    System.setProperty("http.proxyHost", "X.X.X.X");
    System.setProperty("http.proxyPort", "8080");

一切正常!


问题答案:

原始答案(使用Gradle 1.12和Spring Boot 1.0.x):

bootRunspring启动gradle这个插件的任务延长了gradle这个JavaExec任务。看到这个。

这意味着您可以通过添加以下命令来配置插件以使用代理:

bootRun {
   jvmArgs = "-Dhttp.proxyHost=xxxxxx", "-Dhttp.proxyPort=xxxxxx"
}

到您的构建文件。

当然,您可以使用systemProperties代替jvmArgs

如果要从命令行有条件地添加jvmArgs,则可以执行以下操作:

bootRun {
    if ( project.hasProperty('jvmArgs') ) {
        jvmArgs project.jvmArgs.split('\\s+')
    }
}

gradle bootRun -PjvmArgs="-Dwhatever1=value1 -Dwhatever2=value2"

更新的答案:

在使用 Spring Boot 1.2.6.RELEASEGradle 2.7
尝试上述解决方案后,我发现它无法正常工作,因为其中提到了一些注释。但是,可以进行一些小的调整以恢复工作状态。

新的代码是:

bootRun {
   jvmArgs = ["-Dhttp.proxyHost=xxxxxx", "-Dhttp.proxyPort=xxxxxx"]
}

对于硬编码的参数,以及

bootRun {
    if ( project.hasProperty('jvmArgs') ) {
        jvmArgs = (project.jvmArgs.split("\\s+") as List)

    }
}

用于从命令行提供的参数



 类似资料:
  • 我正在开发与远程主机通信的简单Spring web应用程序,我想在公司代理后对其进行本地测试。我使用“Spring Boot”gradle插件,问题是如何为JVM指定代理设置? 我试过几种方法: 如果在代码中设置系统属性: 一切正常!

  • 我想将一些JVM arg传递给我的Gradle bootRun任务,即。我补充说: 添加到我的文件中,但是当我运行时它不喜欢它:

  • 我正在尝试使用以下命令提交flink关于纱线的作业: 我拿到了env。Java语言选择flink客户端日志,但当应用程序提交到Thread时,这些Java选项将不可用。由于额外的JVM选项不可用,应用程序在连接zookeeper时引发异常。 请建议如何将动态属性传递给JM 注意:我试图设置env。Java语言将选项选择到conf/flink-conf.yaml及其工作状态。我需要一种通过flink

  • 根据文档,sbt 分叉进程应接收当前进程的 jvm 设置: 默认情况下,分叉的进程使用与当前进程的构建、工作目录和JVM选项相同的Java和Scala版本。参见:http://www.scala-sbt.org/0.13/docs/Forking.html 然而,对我来说似乎不是这样。参加以下测试: 如果我使用sbt-Dconfig.resource=test来运行它。然后打印“conf:test

  • 问题内容: 为了在步骤之间传递变量,我有步骤方法属于同一类,并使用该类的字段作为传递的信息。 下面是一个示例,如下所示: 带有步骤定义的Java类: 我的问题是在步骤之间共享信息是否是一个好习惯?或者将功能定义为: 问题答案: 为了在步骤之间共享共同点,您需要使用World。在Java中,它没有在Ruby中那么清晰。 引用黄瓜的创建者。 “世界”的目的是双重的: 隔离方案之间的状态。 在场景中的步

  • 我有一些JMH基准测试,我正在尝试分析。我想启用 GC 日志记录以查看生成了多少垃圾,但我不知道如何传递 JVM 参数。我知道JMH在分叉的JVM中运行基准测试,所以对我来说如何做到这一点并不是很明显。我正在使用断续器。