リモートホストと通信する簡単なSpring Webアプリケーションを開発しています。企業プロキシの背後でローカルにテストしたいと思います。 「Spring Boot」gradleプラグインを使用していますが、質問はJVMのプロキシ設定を指定するにはどうすればよいですか?
私はそれをするいくつかの方法を試してみました:
gradle -Dhttp.proxyHost=X.X.X.X -Dhttp.proxyPort=8080 bootRun
export 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);
そして、「-Dfile.encoding = UTF-8」という引数が1つだけ出力されました。
コードでシステムプロパティを設定した場合:
System.setProperty("http.proxyHost", "X.X.X.X");
System.setProperty("http.proxyPort", "8080");
すべてうまくいきます!
オリジナルの回答(Gradle 1.12およびSpring Boot 1.0.xを使用):
Spring Boot gradleプラグインのbootRun
タスクは、gradle JavaExecタスクを拡張します。 this を参照してください。
つまり、以下を追加することにより、プロキシを使用するようにプラグインを構成できます。
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.RELEASEおよびGradle 2.7を使用して上記のソリューションを試した後、一部として動作していないことがわかりましたコメントの言及の。ただし、動作状態を回復するために、いくつかのマイナーな調整を行うことができます。
新しいコードは次のとおりです。
bootRun {
jvmArgs = ["-Dhttp.proxyHost=xxxxxx", "-Dhttp.proxyPort=xxxxxx"]
}
ハードコーディングされた引数の場合、および
bootRun {
if ( project.hasProperty('jvmArgs') ) {
jvmArgs = (project.jvmArgs.split("\\s+") as List)
}
}
コマンドラインから提供される引数
bootRun {
// support passing -Dsystem.property=value to bootRun task
systemProperties = System.properties
}
これにより、bootRun
を介して開始されたアプリにすべてのJVMオプションが渡されます。
Gradleビルドスクリプトで、実行タスクのsystemPropertiesを定義します。
//to provide the properties while running the application using spring-boot's run task
run {
systemProperties['property name'] = 'value'
}
gradle run
はこの値を受け入れる必要があります。
または http://forums.gradle.org/gradle/topics/how_can_i_provide_command_line_args_to_application_started_with_gradle_run に記載されているようにプロジェクトレベルのプロパティを定義します
@marvin、あなたの投稿にとても感謝しました。
使用方法の共有:
test {
// support passing -Dsystem.property=value to bootRun task
systemProperties = System.properties
}
そのようなテストを含めるためにプロパティが使用されていない限り、スキップしたいJUnitテストがあります。テストを条件付きで含めるためのJUnit Assumeの使用:
//first line of test
assumeThat(Boolean.parseBoolean(System.getProperty("deep.test.run","false"),true)
Gradleでこれを行うには、次に示すように、gradleビルドの実行時に提供されるシステムプロパティが必要でした。
gradle build -Ddeep.test.run=true
実際にテストにパススルーされました。
これが条件付きでテストを実行するために他の人がこのアプローチを試すのに役立つことを願っています。
bootRun {
args = ['myProgramArgument1', 'myProgramArgument2']
}
JvmArgsを使用すると、JVM起動の問題が発生する場合があります。 argsを使用すると、カスタムプログラム引数を渡すことができます
うまくいくようです:
bootRun {
systemProperties "property1": "value1", "property2": "value2"
}
同様の問題に直面しました。bootRunにはいくつかのパラメーターが必要でしたが、ある程度の柔軟性を保ち、標準のbootRunの動作に固執したいので、bootRunを変更する気はありません。私の提案は、次のコードスニペットで説明されているように、bootRunを拡張するいくつかのカスタムタスク(たとえば、bootRunDev、bootRunProxy)を追加することです。
task bootRunPxy(type: org.springframework.boot.gradle.run.BootRunTask, dependsOn: 'build') {
group = 'Application'
doFirst() {
main = project.mainClassName
classpath = sourceSets.main.runtimeClasspath
systemProperty 'http.proxyHost', 'xxxxx'
systemProperty 'http.proxyPort', 'yyyyy'
}
}
スクリプトを実行する環境はありませんが、このアプローチを使用して、spring.profiles.activeプロパティを使用してプロファイルをspringに渡します。クレジットは KarolKaliński に移動する必要があります