1. 概述

Gradle 是一个多用途的自动化构建工具,用于开发、编译和测试软件包。它支持多种语言,但主要用于基于Java的语言,如KotlinGroovyScala

在处理Java时,我们可能需要自定义JVM参数。由于我们使用Gradle构建Java应用,我们也可以通过调整Gradle配置来自定义应用的JVM参数。

在这个教程中,我们将学习如何将JVM参数从Gradle的bootRun传递给一个Spring Boot Java应用。

2. 了解bootRun

Gradle的bootRun是随默认的Spring Boot Gradle插件提供的Gradle指定任务。它帮助我们在Gradle本身直接运行Spring Boot应用。执行bootRun命令可以在开发环境中启动应用,这对于测试和开发非常有用。主要适用于迭代开发,因为它不需要单独的构建或部署过程。

简而言之,它提供了一种简化的方法,在开发环境中构建应用并执行与Spring Boot开发相关的任务。

3. 在build.gradle文件中使用jvmArgs

Gradle提供了直接在build.gradle文件中使用jvmArgsbootRun命令添加JVM参数的简单方式。例如,让我们看看如何使用bootRun命令为Spring Boot应用添加JVM参数:

bootRun {
    jvmArgs([
        "-Xms256m",
        "-Xmx512m"
    ])
}

如图所示,我们使用jvmArgs选项修改了Spring Boot应用的最大和最小堆。现在,让我们使用ps命令验证对Spring Boot应用的JVM更改:

$ ps -ef | grep java | grep spring
502  7870  7254   0  8:07PM ??  0:03.89 /Library/Java/JavaVirtualMachines/jdk-14.0.2.jdk/Contents/Home/bin/java
-XX:TieredStopAtLevel=1 -Xms256m -Xmx512m -Dfile.encoding=UTF-8 -Duser.country=IN 
-Duser.language=en com.example.demo.DemoApplication

在上述bootRun任务中,我们使用jvmArgs选项更改了Spring Boot应用的最大和最小堆。这种方式动态地将JVM参数附加到Spring Boot应用上。此外,我们还可以使用-D选项向bootRun添加自定义属性。下面是一个演示:

bootRun {
    jvmArgs(['-Dbaeldung=test', '-Xmx512m'])
}

这样,我们可以传递JVM选项和自定义属性。让我们用jvm参数来验证自定义值:

$ ps -ef | grep java | grep spring
502  8423  7254   0  8:16PM ??  0:00.62 /Library/Java/JavaVirtualMachines/jdk-14.0.2.jdk/Contents/Home/bin/java 
-XX:TieredStopAtLevel=1  -Dbaeldung=test -Xms256m -Xmx512m -Dfile.encoding=UTF-8 -Duser.country=IN 
-Duser.language=en com.example.demo.DemoApplication

此外,我们还可以将这些属性文件放入gradle.properties,然后在build.gradle中使用它们:

baeldung=test
max.heap.size=512m

现在,我们可以将其用于bootRun命令:

bootRun {
    jvmArgs([
        "-Dbaeldung=${project.findProperty('baeldung')}",
    "-Xmx${project.findProperty('max.heap.size')}"
    ])
}

通过这种方式,我们可以将配置文件与主build.gradle文件分离。

4. 使用命令行参数

我们也可以直接将JVM选项提供给.*/gradlew bootRun命令。在Gradle中,系统属性可以使用-D标志指定,而JVM选项可以使用-X

$ ./gradlew bootRun --args='--spring-boot.run.jvmArguments="-Xmx512m" --baeldung=test'

我们可以使用这个命令在运行时动态地提供JVM选项,无需修改Gradle构建文件。为了演示,让我们使用ps命令验证JVM参数:

$ ps -ef | grep java | grep spring 
 502 58504 90399   0  7:21AM ?? 0:02.95 /Library/Java/JavaVirtualMachines/jdk-14.0.2.jdk/Contents/Home/bin/java 
 -XX:TieredStopAtLevel=1 -Xms256m -Xmx512m -Dfile.encoding=UTF-8 -Duser.country=IN -Duser.language=en 
 com.example.demo.DemoApplication --spring-boot.run.jvmArguments=-Xmx512m --baeldung=test

这个命令直接使用.*/gradlew bootRun命令设置了jvm参数。

5. 总结

在这篇文章中,我们学习了将JVM选项传递给bootRun命令的不同方法。

首先,我们了解了bootRun的重要性和基本用法。接着,我们探讨了如何使用命令行参数和build.gradle文件为bootRun提供JVM选项。