“这是我参与8月更文挑战的第10天,活动详情查看:8月更文挑战”
先看spring boot 2.x properties 配置文件详解
基于上述代码修改
devtools 开发者工具
在开发阶段,我们经常要修改代码,就需要不断的重启 Spring Boot 应用,这样很麻烦。
Spring Boot 提供了一个开发者工具,可以监控 classpath 路径上的文件。只要源码或配置文件发生修改,Spring Boot 应用可以自动重启。在开发阶段,这个功能比较有用。
要使用这一开发者功能,只需添加如下依赖到 pom.xml 文件中:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
此时直接启动应用程序,然后修改源码并保存,可以从控制台的日志输出中看到自动编译的结果,Spring Boot 会自动重新加载。
默认配置下,针对
/static、/public和/templates目录中的文件修改不会自动重启因为禁用缓存后,这些静态文件的修改是实时更新的。
package 打包
这里使用 Maven 构建工具,也可以使用 Gradle 插件
spring Boot 提供 spring-boot-maven-plugin 插件用于打包所有依赖到单一 jar 文件(spring boot 内置 tomcat 服务器,所以打包后形成的一个 jar 文件可以直接基于 jvm 运行于任何平台)
pom 配置
在 pom.xml 文件中加入以下配置:
<project ...>
...
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--排除lombok插件的编译-->
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
maven 构建
无需任何配置,Spring Boot 的这款插件会自动定位应用程序的入口文件的 main,执行以下 Maven 命令即可打包:
#cd 到项目的根目录
mvnw clean package -Dmaven.test.skip=true
#或者
mvn clean package -Dmaven.test.skip=true
其中 -Dmaven.test.skip=true 表示跳过测试文件。
如下图所以可以看到打包后的文件默认生成到了 target 目录,名为 spring-boot-0.0.1-SNAPSHOT.jar ,即默认由name - version 构成。
运行jar文件
--server.port 表示指定端口号
java -jar spring-boot-0.0.1-SNAPSHOT.jar --server.port=8932
运行时还可以指定 profile 运行环境的配置文件,如使用 application-dev.yml 配置文件
java -jar spring-boot-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev
还可以设置 jvm 参数:
java -Xms10m -Xmx80m -jar spring-boot-0.0.1-SNAPSHOT.jar &
如果不想管理窗口后消失,可以后台运行(Linux):
nohup java -jar spring-boot-0.0.1-SNAPSHOT.jar &
查看 java 运行环境
可以使用 Java 自带的 jinfo 命令:
#pid 即进程号
jinfo -flags pid
- Linux 可以使用 ps 命令
- IDEA 的控制台日志也会显示调试模式下服务的 pid 进程号
- windows 系统可以通过 任务管理器 -> 详细信息 看到进程的 pid 值
例如:
VM Flags:
-XX:CICompilerCount=4 -XX:ConcGCThreads=2 -XX:G1ConcRefinementThreads=8 -XX:G1HeapRegionSize=1048576 -XX:GCDrainStackTargetSize=64 -XX:InitialHeapSize=266338304 -XX:MarkStackSize=4194304 -XX:MaxHeapSize=805306368 -XX:MaxNewSize=4823
44960 -XX:MinHeapDeltaBytes=1048576 -XX:NonNMethodCodeHeapSize=5836300 -XX:NonProfiledCodeHeapSize=122910970 -XX:ProfiledCodeHeapSize=122910970 -XX:ReservedCodeCacheSize=251658240 -XX:+SegmentedCodeCache -XX:+UseCompressedClassPoint
ers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseG1GC -XX:-UseLargePagesIndividualAllocation
-
-XX:CICompilerCount最大的并行编译数
-
-XX:InitialHeapSize和-XX:MaxHeapSize指定 JVM 的初始和最大堆内存大小
-
-XX:MaxNewSizeJVM 堆区域新生代内存的最大可分配大小
-
…
-
-XX:+UseG1GC垃圾回收使用 G1 收集器