作为一名长期奋战在Java开发一线的老码农,我深知环境配置这个看似简单的环节,往往成为新手入门的第一个拦路虎。今天我就用最接地气的方式,手把手带你搞定Spring Boot开发环境的搭建,顺便分享那些官方文档里不会写的实战经验。
当前主流选择是JDK 17(LTS版本),相比JDK 8增加了不少新特性,又比最新的非LTS版本稳定。Oracle官方下载页面经常改版,建议直接收藏这个直达链接:
https://www.oracle.com/java/technologies/downloads/#jdk17-windows
注意:如果公司项目还在用JDK 8,建议同时安装多个版本JDK,后面会教你怎么灵活切换
千万别装到带中文或空格的路径!我见过太多因为"Program Files"这个空格导致的奇葩问题。推荐这样安排:
C:Devjdk-17.0.x/usr/local/jdk-17安装时记得勾选"Add to PATH"选项(Windows安装包有这个选项),能省去后续手动配置的麻烦。
以Windows为例(Mac/Linux用户请自行转换命令):
创建JAVA_HOME变量:
bash复制setx JAVA_HOME "C:Devjdk-17.0.x" /M
添加到PATH(管理员权限运行):
bash复制setx Path "%Path%;%JAVA_HOME%in" /M
验证安装时别只用java -version,要同时检查:
bash复制java -version
javac -version
where java
where javac
踩坑记录:遇到过系统装了多个Java版本导致混乱的情况,可以用
where java查看实际调用的java.exe路径
从官网下载Binary zip包(当前稳定版是3.8.x),解压到不含中文和空格的路径,比如:
C:Devapache-maven-3.8.6/usr/local/maven-3.8.6环境变量配置:
bash复制setx MAVEN_HOME "C:Devapache-maven-3.8.6" /M
setx Path "%Path%;%MAVEN_HOME%in" /M
验证命令:
bash复制mvn -v
修改conf/settings.xml时,建议先备份原文件。以下是优化配置:
xml复制<localRepository>D:epository</localRepository>
xml复制<mirrors>
<mirror>
<id>aliyun</id>
<name>Aliyun Maven</name>
<url>https://maven.aliyun.com/repository/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>tencent</id>
<name>Tencent Cloud</name>
<url>https://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
<profiles>节点):xml复制<profile>
<id>speedup</id>
<properties>
<maven.compiler.useIncrementalCompilation>false</maven.compiler.useIncrementalCompilation>
<maven.artifact.threads>8</maven.artifact.threads>
</properties>
</profile>
激活配置:
xml复制<activeProfiles>
<activeProfile>speedup</activeProfile>
</activeProfiles>
实战技巧:遇到依赖下载失败时,先执行
mvn dependency:purge-local-repository清理后再试
code复制-Xms2048m
-Xmx4096m
-XX:ReservedCodeCacheSize=1024m
编译器设置:
Maven配置:
-T 1C -DarchetypeCatalog=internal创建Spring Initializr项目时推荐配置:
避坑指南:第一次创建项目时,IDEA可能会卡在下载初始依赖,这时可以手动停止后修改Maven镜像源再重试
xml复制<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.7.15</version>
</parent>
这个父POM实际上是个dependencyManagement配置,它:
<properties>覆盖默认版本web starter的依赖树很有意思:
code复制spring-boot-starter-web
├── spring-boot-starter
│ ├── spring-core
│ ├── spring-context
│ └── ...
├── spring-boot-starter-json
├── spring-boot-starter-tomcat
└── spring-webmvc
关键点:
建议添加的开发期依赖:
xml复制<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
生产环境推荐添加:
xml复制<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
bash复制mvn clean compile
bash复制mvn spring-boot:run
code复制http://localhost:8080/actuator/health
properties复制server.port=8081
properties复制server.servlet.context-path=/api
properties复制spring.jackson.time-zone=GMT+8
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
JVM参数建议:
code复制-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:InitiatingHeapOccupancyPercent=45
-Xss256k
Spring Boot特定参数:
properties复制spring.main.lazy-initialization=true
spring.jmx.enabled=false
application.yml配置示例:
yaml复制spring:
profiles:
active: @activatedProperties@
---
spring:
config:
activate:
on-profile: dev
server:
port: 8080
---
spring:
config:
activate:
on-profile: prod
server:
port: 80
推荐目录结构:
code复制config/
application.yml(公共配置)
application-dev.yml
application-prod.yml
启动命令指定环境:
bash复制java -jar app.jar --spring.profiles.active=prod
敏感信息处理:
properties复制jasypt.encryptor.password=${JASYPT_PASSWORD}
bash复制export DB_PASSWORD='xxx'
java复制@RestController
@RequestMapping("/api/$VAR$")
public class ${NAME}Controller {
private static final Logger log = LoggerFactory.getLogger(${NAME}Controller.class);
$END$
}
java复制/**
* @author $USER$
* @date ${DATE} ${TIME}
* @description $description$
*/
bash复制java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar app.jar
xml复制<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
java复制@AutoConfigureRestDocs
@SpringBootTest
public class ApiDocumentation {
// ...
}
xml复制<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludeDevtools>true</excludeDevtools>
</configuration>
</plugin>
xml复制<configuration>
<layers>
<enabled>true</enabled>
</layers>
</configuration>
自定义启动脚本示例:
bash复制#!/bin/bash
JAVA_OPTS="-Xms1g -Xmx2g -XX:+HeapDumpOnOutOfMemoryError"
exec java $JAVA_OPTS -jar app.jar
xml复制<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
properties复制management.endpoints.web.exposure.include=health,info,metrics,prometheus
management.metrics.export.prometheus.enabled=true
经过这套完整配置后,你的Spring Boot开发环境应该已经武装到牙齿。记住,好的开发环境是高效编码的基础,前期多花些时间把环境配好,后期能省下大量调试时间。