6.3建立自己執行的二進位制檔案

Owen William發表於2020-10-25

這個章節,我們將使用已經存在的應用。我們學習如何修改預設的啟動指令碼,如,JVM啟動引數 -D啟動系統配置,JVM記憶體等。

   這個章節要確保我們使用的Spring Boot版本是1.3以上。如果不是的話,請在build.gradle加入以下程式碼。(注意,我們自己建立的db-counter-starter/build.gradle也要新增)

 ext {
springBootVersion = '1.3.0.BUILD-SNAPSHOT'
}

 

  我們需要宣告application外掛到build.gradle檔案中,不再是自動包含Spring Boot Gradle外掛。新增的命令是:apply plugin: 'application'

6.3.1如何使用

  1. 建立預設的可執行檔案是非常容易,只要我們執行./gradlew clean bootRepackage命令即可。
  2. 我們可以通過執行./build/libs/bookpub-0.0.1-SNAPSHOT.jar來啟動專案。
  3. 在生產環境中,我們老百姓稍微調整我們的環境配置,如GC配置、記憶體配置等。為了達到這個,我們將會修改預設的lauch.script檔案。讀者可以從:https://github.com/spring-projects/spring-boot.git這個地方的下載,目錄是:spring-boot/spring-boot-project/spring-boot-tools/spring-boot-loader-tools/src/main/resources/org/springframework/boot/loader/tools/

需要注意的是,lauch.script檔案只是用於Linux和OS X的環境下。如果你需要在windows上執行,你需要自己寫一個launch.script的檔案,且這個檔案是可以執行在windows的shell命令中。

  1. 我們修改launch.scipt檔案,新增在大約288行的地方。

 ...
# Find Java
if [[ -n "$JAVA_HOME" ]] && [[ -x "$JAVA_HOME/bin/java" ]]; then
javaexe="$JAVA_HOME/bin/java"
elif type -p java 2>&1> /dev/null; then
javaexe=java
elif [[ -x "/usr/bin/java" ]]; then
javaexe="/usr/bin/java"
else
echo "Unable to find Java"
exit 1
fi
# Configure JVM Options
jvmopts="{{jvm_options:}}"
if [[ -n "JAVA_OPTS" ]]; then
jvmopts="$jvmopts $JAVA_OPTS"
fi
# Build actual command to execute
command="$javaexe $jvmopts -jar -
Dsun.misc.URLClassPath.disableJarChecking=true $jarfile $@"
# Action functions
start() {
...

 

  1. 接著,我們需要在build.gradle中加入如下程式碼:

 applicationDefaultJvmArgs = [

    "-Xms128m",

    "-Xmx256m"

]

springBoot {

    classifier = 'exec'

    embeddedLaunchScript = file('launch.script')

    embeddedLaunchScriptProperties = ['jvm_options' :

    applicationDefaultJvmArgs.join(' ')]

}

 

  1. 執行./gradlew clean bootRun 命令,你將會看到JConsole VM Summary,我們也可以看到我們配置的引數資訊:

  1. 我們也可以執行./gradlew clean bootRepackage命令和執行./build/libs/bookpub-0.0.1-SNAPSHOT-exec.jar的包,也可以看到與上面同樣的資訊。
  2. 我們也可以使用JAVA_OPTS環境變數來過載JVM的引數。我們可以使用JAVA_OPTS=-Xmx128m./build/libs/bookpub-0.0.1-SHAPSHOT-exec.jar命令和這樣可以顯示如下資訊:

6.3.2使用原理

    在我們定製的launch.script檔案中,我們新增了jvmopts=”{{jvm_options:}}”,在樣在建立和打包時會取代jvm_options的引數。這個是宣告是在build.gradle檔案中作為embeddedLaunchScriptProperties的引數:embeddedLaunchScriptProperties =

['jvm_options' : applicationDefaultJvmArgs.join(' ')]

   JVM引數是硬編碼的,它更好的包含如何讓我們的應用使用bootRun任務和如何讓它執行我們的JAR。為了達到這人目的,我們使用了applicationDefaultJvmArgs引數宣告我們執行的目的。

相關文章