IDEA 配置 Spring Boot:JDK、Maven 与项目启动全流程

发布时间:2026/9/18 18:29:59
IDEA 配置 Spring Boot:JDK、Maven 与项目启动全流程 做 Java 后端这几年被问得最多的一类问题不是某个框架怎么用而是“我这 IDEA 装好了Spring Boot 项目怎么就跑不起来”。这个问题听着简单实际拆开来看涉及 JDK 选型、Maven 依赖拉取、IDEA 的工程识别、启动类的包扫描路径、配置文件加载顺序这一整条链路任何一环对不上控制台就是一片红。这篇内容我打算把 IDEA 配置 Spring Boot 环境这件事从头到尾捋一遍包括版本怎么选、Maven 怎么换源、工程怎么建、第一个接口怎么写、以及那些新手最容易卡住的报错怎么排。不管你是刚学 Java 想跑个 Demo还是工作几年一直用公司配好的环境、想自己搭一套干净的项目骨架都能照着走一遍。1. 开工之前先把 JDK、Maven、IDEA 三者的关系理清楚很多人配环境的顺序是反的先下载 IDEA装完发现没 JDK随手装了个最新版然后建项目报一堆错。正确的思路是先想清楚“我要用哪个版本的 Spring Boot”再反推 JDK 和 Maven 的版本最后才是 IDEA 的安装和设置。因为 Spring Boot 对 Java 版本有硬性要求JDK 装错了版本后面所有步骤都是白折腾。1.1 版本对应关系这一张表比装十个软件都重要Spring Boot 的版本迭代非常快而每个大版本对 JDK 的最低要求是不一样的。这是新手最容易踩的坑网上找的教程用的是 Spring Boot 2.x自己手一抖选了 3.x结果导入javax.servlet包死活找不到因为 Spring Boot 3.0 开始整个命名空间从javax.*换成了jakarta.*。Spring Boot 版本最低 JDK 要求Maven 最低版本Servlet 命名空间2.7.xJDK 83.5javax.*3.0.x ~ 3.1.xJDK 173.6.3jakarta.*3.2.x ~ 3.3.xJDK 173.6.3jakarta.*3.4.x 及以上JDK 173.6.3jakarta.*选哪个我的建议是如果公司项目是老的或者你要维护一套跑了好几年的系统那就老老实实 JDK 8 加 Spring Boot 2.7.x这套组合极其稳定社区资料也最多如果是自己练手、准备面试、或者新起项目直接上 JDK 17 加 Spring Boot 3.x别犹豫。JDK 17 是长期支持版本后面升 21 也顺滑现在再学 JDK 8 的老写法性价比不高。还有一个细节JDK 的发行版选哪个。Oracle JDK 商用有授权问题个人学习可以但公司用要谨慎。实际开发里用得更多的是 Eclipse Temurin原 AdoptOpenJDK、Amazon Corretto、以及国内的龙井、毕昇这些。它们的字节码是兼容的选一个下载方便、长期维护的就行。我自己机器上常年是 Temurin 17稳。1.2 JDK 装完之后环境变量和 IDEA 里的 SDK 是两套东西JDK 安装本身没什么难度Windows 上双击一路下一步就行但装完之后有两件事必须确认。第一件是系统环境变量。JAVA_HOME要指向 JDK 的安装根目录注意是根目录不是bin目录。比如D:\dev\jdk-17.0.9而不是D:\dev\jdk-17.0.9\bin。然后Path里加上%JAVA_HOME%\bin。配完打开一个新的命令行窗口一定要新开老窗口读的是旧变量敲java -version和javac -version两个版本号要一致。如果java有输出、javac提示找不到说明你的 Path 里可能被别的软件塞了个 JRE 在前面这种情况在装过 Android Studio 或者某些游戏启动器的电脑上特别常见。第二件更关键也更容易被忽略IDEA 里的 Project SDK 和 Maven 用的 JDK 是分开配置的。也就是说你系统变量配的是 17但 IDEA 里可能还留着上次配置的 8这时候编译会用 8跑起来又是 17报错信息会非常迷惑。检查路径是File → Project Structure → Project看SDK和Language level两项再进Settings → Build, Execution, Deployment → Build Tools → Maven → Importing看JDK for importer最后Settings → Build, Execution, Deployment → Compiler → Java Compiler里的Target bytecode version也要对得上。这三处一致版本问题基本就消停了。注意IDEA 自带一个下载 JDK 的功能Add SDK → Download JDK用起来很方便但它默认下载的可能不是你想要的发行版和版本下载前一定看清 Vendor 和 Version 两栏。1.3 Maven 的本地仓库和镜像源决定你建项目是五分钟还是五十分钟Maven 是 Spring Boot 项目的依赖管理器你pom.xml里写一行dependencyMaven 就去远程仓库把 jar 包拉下来存到本地仓库。默认的远程仓库在国外国内直连下载速度经常是几十 KB 每秒一个空项目第一次构建要拉几十个依赖等半小时很正常。所以装完 Maven 第一件事就是改conf/settings.xml。找到mirrors标签在里面加一段mirror idaliyun-public/id mirrorOf*/mirrorOf namealiyun public/name urlhttps://maven.aliyun.com/repository/public/url /mirror这段配置的意思是把所有远程仓库请求都转给阿里云的公共仓库它是多个上游仓库的聚合代理mirrorOf写*表示全部代理。如果你公司有私服那mirrorOf要写*,!your-private-repo这种形式把私服排除掉否则私服依赖也会被转到公网去直接拉不到。顺便也要改一下本地仓库路径。默认在用户目录下的.m2/repositoryC 盘紧张的话换到别的盘localRepositoryD:/dev/maven-repo/localRepository这个路径最后不要带空格和中文我见过因为路径里有中文导致依赖解压异常的案例虽然不常见但避开不亏。改完之后还得在 IDEA 里告诉它用哪个 settings.xmlSettings → Build, Execution, Deployment → Build Tools → Maven把Maven home path、User settings file、Local repository三项目指到你自己的安装位置并且把User settings file后面那个 Override 勾上否则 IDEA 可能还是用内置的默认配置。2. IDEA 装完先别急着建项目这几项设置要先调IDEA 的安装本身没什么可说官网下载、一路下一步。但启动之后的第一次配置决定了你后面几个月的开发体验。特别是版本选择这件事得先说明白。2.1 社区版和旗舰版个人开发到底选哪个IDEA 有两个主要版本Community社区版和 Ultimate旗舰版。社区版免费旗舰版是商业授权需要付费购买官方提供 30 天试用。功能上的差别主要集中在框架支持上旗舰版对 Spring、Spring Boot、JPA、Thymeleaf 这些有专门的深度支持包括 Bean 依赖关系图、配置文件里的属性自动补全、Endpoint 列表、以及应用服务器的集成社区版没有这些但基础的 Java 编译、Debug、Git、Maven 管理、单元测试都是完整的。那到底怎么选我的实际体验是如果你是学生或者纯自学社区版完全能跑通本文所有内容Spring Boot 项目在社区版里建、写、调试、打包都没问题只是配置文件里写属性名的时候没有智能提示需要自己记或者查文档。如果你在公司做 Spring 生态的开发那旗舰版省下来的时间远超它的成本闭着眼上就行。另外提一句很多高校和企业有教育或团队授权渠道可以按官方说明去申请别去碰网上那些来源不明的安装包风险不值得冒。顺便说个替代方案VS Code 加 Java 扩展包也能写 Spring Boot启动速度和内存占用比 IDEA 轻不少适合小项目或者内存只有 8G 的机器。但到了多模块、复杂的依赖关系、断点调试这些场景IDEA 的体验还是拉开一截。工具没有绝对好坏看你手上的活。2.2 首次启动必须调的几项不改后面会反复难受IDEA 默认配置里有几个地方不改的话迟早会撞上。第一是编码。进Settings → Editor → File Encodings把Global Encoding、Project Encoding、Default encoding for properties files三项全部设成UTF-8最后那个Transparent native-to-ascii conversion勾上。不设的话application.properties里写中文会变成一串乱码转义看着很难受。更彻底的方案是直接在 IDEA 的 VM 启动参数里加-Dfile.encodingUTF-8路径在Help → Edit Custom VM Options。第二是自动导入。Settings → Build, Execution, Deployment → Build Tools → Maven → Importing里的Automatically download区域把Sources和Documentation勾上这样点进第三方类的源码时能看到注释排查问题时特别有用。同一页的Automatically import this project on changes in build script files建议勾上改完pom.xml不用手动点刷新。第三是内存。IDEA 默认的最大堆可能只有 750MB 或者 2G开几个模块再跑个 Spring Boot风扇就开始狂转。Help → Change Memory Settings里调到 2048 或 4096看你机器总内存来定。机器的物理内存如果是 16G给 IDEA 分 4G 是比较舒服的区间。第四是快捷键方案。如果你之前用 Eclipse 或者 VS Code 习惯了可以在Settings → Keymap里切成对应的方案省得天天按错。这个属于个人偏好不切也行但早切早适应。2.3 值得先装上的几个插件插件不用贪多装多了拖慢启动。有几个是跟 Spring Boot 开发强相关的。Lombok这个几乎是必装。它让Data、Slf4j、Builder这些注解生效。注意装完插件还不够还要在Settings → Build, Execution, Deployment → Compiler → Annotation Processors里把Enable annotation processing勾上否则编译期生成的 getter/setter 找不到报一堆“找不到符号”。另外如果是 JDK 17 以上的模块某些老版本 Lombok 会跟编译器打架遇到奇奇怪怪的编译错误时先把 Lombok 版本升到最新试试。MyBatisX或者MyBatis Log Free如果你后面要接数据库这两个能省很多事。前者可以在 Mapper 接口和 XML 之间一键跳转后者能把 MyBatis 打印的带?的 SQL 还原成可以直接复制执行的完整语句。Rainbow Brackets和GitToolBox属于锦上添花代码嵌套深的时候能看清括号配对Git 那边能直接看到每行是谁在哪个提交里改的。装不装都行。提示插件装完记得重启 IDEA有些插件不重启不生效容易误判成装失败了。3. 建一个能跑起来的 Spring Boot 工程环境备齐了现在开始建项目。这一步看着就是点几下鼠标但里面的门道不少。3.1 三种创建方式选对能少走弯路第一种是在 IDEA 里用 Spring Initializr路径是File → New → Project → Spring Initializr。这个方式最省事填完 Group、Artifact、Java 版本勾好依赖IDEA 自动帮你生成完整的目录结构和pom.xml。但它有个前提旗舰版才有这个菜单项社区版从 2022 之后的版本也开始支持了如果你的版本里找不到走第二种。第二种是去官网生成。浏览器打开start.spring.io页面就是一个表单填 ProjectMaven/Gradle、Language、Spring Boot 版本、Group、Artifact、Package name、打包方式Jar/War、Java 版本然后在右侧 Dependencies 里加Spring Web点 GENERATE 下载一个 zip解压后用 IDEA 打开这个目录File → Open选到含pom.xml的那一层。这个方式跟 IDEA 版本无关最通用。第三种是新建一个普通 Maven 项目自己手写pom.xml。看着麻烦但我反而推荐至少做一次。因为手写一遍你才会知道spring-boot-starter-parent、spring-boot-starter-web、spring-boot-maven-plugin这三块各自是干什么的依赖出问题的时候才有判断力。还有一个选项要注意Packaging 选 Jar 还是 War。现在基本都是 Jar因为 Spring Boot 内置了 Tomcatjava -jar直接就能跑不需要额外装容器。只有当你要把应用部署到公司已有的外部 Tomcat 里时才需要选 War 并改启动类继承SpringBootServletInitializer。新手直接用 Jar。3.2 生成出来的目录结构每一层都有含义项目生成后展开目录你会看到这样的结构以包名com.example.demo为例demo ├── src │ ├── main │ │ ├── java │ │ │ └── com/example/demo │ │ │ └── DemoApplication.java │ │ └── resources │ │ ├── static │ │ ├── templates │ │ └── application.properties │ └── test │ └── java │ └── com/example/demo │ └── DemoApplicationTests.java ├── target └── pom.xmlDemoApplication.java是启动类里面就一个main方法和一个SpringBootApplication注解。static目录放静态资源比如图片、CSS、HTML访问时不需要额外配置。templates目录放模板文件如果用了 Thymeleaf 之类的模板引擎页面就放这儿。application.properties是全局配置文件后面讲的端口、数据源、日志级别都写在这里。target是编译输出目录第一次构建之后才会出现里面的东西可以随时删。这里有个特别重要的规则启动类所在的包就是 Spring Boot 默认扫描的根包。也就是说DemoApplication在com.example.demo下那么只有com.example.demo及其子包里的Component、Service、Controller、Configuration才会被扫描到。如果你把 Controller 放到了com.example.controller那它跟启动类不在同一棵子树下Spring 根本看不见它接口访问就是 404而且日志里没有任何报错新手能在这儿卡一整天。3.3 pom.xml 里的三块内容看懂了自己就能改生成的pom.xml不长但每一块都值得说清楚。第一块是父工程parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version3.2.5/version relativePath/ /parentspring-boot-starter-parent是个特殊的父 POM它的作用不是提供代码而是做两件事一是统一管理所有 Spring 官方依赖的版本号所以你在下面写依赖时基本不用写version二是配置了 Maven 插件的默认行为比如资源文件过滤、编译插件版本。relativePath写空表示不去本地父目录找直接去仓库里拉避免本地目录污染导致版本串味。第二块是依赖dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency这一行包含了一整套东西Spring MVC、内嵌 Tomcat、JacksonJSON 序列化、校验框架。这就是所谓“起步依赖”的设计思路用一个坐标换一整组协调好的库省得你自己一个个配版本、调兼容性。想看它到底引入了什么在 IDEA 里对spring-boot-starter-web按Ctrl加鼠标左键能一路点进它的pom.xml看到依赖树。第三块是构建插件build plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId /plugin /plugins /build这个插件是打包的关键。它会把你的代码、依赖的 jar 包、以及一个特殊的启动器一起塞进最终的 jar 里做成所谓的“可执行 Jar”。没有它打出来的 jar 直接java -jar会报找不到主类。它还有个副作用值得注意默认打包时会把你项目里的target/xxx.jar.original也生成一份那是没被重新打包的原始 jar可以忽略。注意如果你把 Spring Boot 版本调得比较新比如 3.4 以上而 JDK 还是 17一般没问题但如果 JDK 是 8构建时会直接报版本不兼容这是编译期的硬性拦截别硬扛换 JDK。4. 从 Hello World 到一个能用的接口项目能建出来只是第一步能跑起来、能响应请求才算真正搭完。4.1 启动类里到底发生了什么SpringBootApplication这个注解看着只是一个注解实际上它是三个注解的组合SpringBootConfiguration // 声明这是一个配置类 EnableAutoConfiguration // 开启自动配置 ComponentScan // 开启包扫描SpringBootConfiguration本质上就是Configuration表示这个类是 Bean 定义的来源。EnableAutoConfiguration是 Spring Boot 的灵魂它会去读 classpath 下所有META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件里注册的自动配置类然后根据条件决定要不要生效。举个具体例子它发现你引入了spring-boot-starter-webclasspath 里有DispatcherServlet于是自动帮你配好 Spring MVC、配好内嵌 Tomcat、设好默认端口 8080。你什么都没写一个 Web 服务器就跑起来了这就是自动配置的价值。ComponentScan则是按第 3.2 节说的规则从启动类所在包往下扫描组件。启动过程完整走一遍是这样的main方法调用SpringApplication.run()先创建SpringApplication实例并推断应用类型Servlet 还是 Reactive然后加载ApplicationContextInitializer和监听器接着准备环境读取配置文件、命令行参数、系统环境变量打印 Banner创建ApplicationContext执行自动配置刷新容器最后启动内嵌的 Web 服务器。控制台那几行启动日志里最值得看的是Tomcat started on port(s): 8080看到这行才算真的起来了。4.2 写第一个 Controller从最简到带参数在启动类同级或者子包下新建一个controller包写一个 HelloControllerpackage com.example.demo.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; RestController public class HelloController { GetMapping(/hello) public String hello(RequestParam(defaultValue world) String name) { return Hello, name !; } }RestController等于Controller加ResponseBody意思是这个类里所有方法的返回值都直接写进响应体不走视图解析。如果你只是想返回一段字符串用这个最省事。GetMapping(/hello)把 HTTP 的 GET 请求/hello映射到这个方法上。RequestParam用来接收 URL 上的查询参数defaultValue保证不传参时也不会报 400。启动项目浏览器访问http://localhost:8080/hello?namespringboot页面上就会出现Hello, springboot!。接下来写一个返回 JSON 的接口这才是实际项目里更常见的形态GetMapping(/user/{id}) public MapString, Object getUser(PathVariable Long id) { MapString, Object user new HashMap(); user.put(id, id); user.put(name, 张三); user.put(age, 28); return user; }PathVariable对应 URL 路径里的占位符。你访问/user/1001返回的响应头里Content-Type会是application/json响应体是{id:1001,name:张三,age:28}。整个过程你一行 JSON 转换代码都没写是 Jackson 在背后干的活spring-boot-starter-web已经把MappingJackson2HttpMessageConverter自动注册好了。这里顺带说一个新手常栽的点返回中文时浏览器显示乱码。原因通常不是 Spring Boot 的问题而是响应头里的字符集或者浏览器默认编码。Spring Boot 3.x 默认字符集已经是 UTF-8如果你遇到乱码先检查是不是用text/plain返回的中文改成返回对象让它走 JSON 就没这问题了。4.3 配置文件选 yml 还是 properties以及多环境怎么切生成的application.properties是键值对格式写起来像这样server.port8081 spring.application.namedemo改成application.yml格式是这样的server: port: 8081 spring: application: name: demo两种格式功能完全等价Spring Boot 都能读。我的偏好是 yml因为层级结构一目了然配数据源、多环境这些嵌套很深的配置时可读性好太多。但有个坑必须提醒yml 对缩进极其敏感必须用空格不能用 Tab同一层级的缩进量必须完全一致。用 Tab 或者两个空格三个空格混着用启动时会直接报解析异常而且报错信息往往指向别的位置很误导。多环境配置是实际项目里一定会用到的。做法是建多个文件application.yml放公共配置application-dev.yml放开发环境application-prod.yml放生产环境然后在主配置里指定激活哪个spring: profiles: active: dev也可以拆成多文档块写在一个文件里用---分隔配合spring.config.activate.on-profile标注。命令行启动时还能覆盖java -jar demo.jar --spring.profiles.activeprod。这个优先级要记住命令行参数 系统环境变量 配置文件。排查“为什么配置不生效”的时候先想想是不是被更高优先级的来源覆盖了。配置值的读取有两种常用方式。简单几个值用Value(${server.port})直接注入到字段上。成组的配置用一个类来承接更合适配合ConfigurationProperties(prefix demo)字段名跟配置项名字对应上就行还能享受到 IDEA 的类型提示。后者在做自定义配置时更推荐因为有类型检查字段改名不会悄悄失效。4.4 打包、运行和改完代码自动重启写完代码不可能一直在 IDEA 里点绿三角最终是要打包成 jar 部署的。在项目根目录执行mvn clean package -DskipTestsclean清掉上次的产物package执行编译加打包-DskipTests跳过单元测试生成的项目自带一个DemoApplicationTests它会真启动一次上下文慢调试阶段跳过更快但正式发版别跳。执行完target目录下会有一个demo-0.0.1-SNAPSHOT.jar这就是最终产物。运行java -jar target/demo-0.0.1-SNAPSHOT.jar想在后台跑Linux 上加nohup ... Windows 上可以写成 bat 脚本或者用start /b。另外还可以指定 JVM 参数比如java -Xms512m -Xmx1024m -jar demo.jar控制堆大小。生产环境一般还会加-Duser.timezoneAsia/Shanghai明确时区避免服务器时区不对导致日志时间错乱。开发阶段还有个提效的点热部署。引入依赖dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-devtools/artifactId optionaltrue/optional /dependencyoptional设为 true 表示这个依赖不会传递给引用你项目的其他项目。加了之后改完 Java 代码IDEA 里按CtrlF9触发一次编译应用就会自动重启。注意它是“重启”不是“热替换”速度比手动停启快很多但也不是瞬间完成对于大项目仍然要几秒钟。修改配置文件则必须手动重启devtools 管不了这个。提示devtools 会把target/classes和第三方 jar 分开处理重启时只重新加载你自己的代码所以快。但也正因为如此它跟某些自定义的类加载器、缓存框架可能冲突生产环境一定不要带上它。5. 踩过的坑和对应的排查路径下面这些是我这些年真实遇到过的以及帮别人看问题时反复出现的。5.1 依赖拉不下来、构建一直转圈最常见的表现是 IDEA 右下角进度条一直在跑或者控制台刷一堆Could not resolve dependencies。排查顺序是这样的。先确认网络浏览器能不能打开maven.aliyun.com打不开就是网络问题跟 Maven 没关系。能打开的话检查 IDEA 里配置的 settings.xml 到底是哪一个Settings → Build Tools → Maven里User settings file那一栏显示的路径是不是你改过镜像的那个文件。这里有个隐蔽情况IDEA 有时候会用C:\Users\你的用户名\.m2\settings.xml而你改的是 Maven 安装目录下的conf/settings.xml两者不是同一个文件。再一个方法是不依赖 IDEA直接在项目根目录开命令行跑mvn clean package。如果命令行能成功、IDEA 不行那就纯是 IDEA 的配置问题重点查 Maven home 和 settings 路径。如果命令行也不行看具体报错。还有一个经典的顽固问题某个依赖死活下载失败报Could not transfer artifact ...。这通常是上次下载中断留下的残留文件导致的。本地仓库里对应目录下会有一个.lastUpdated后缀的文件把这个文件删掉再重新构建。批量清理可以用命令find ~/.m2/repository -name *.lastUpdated -deleteWindows 上用 PowerShell 或者手动在对应目录删。删完记得在 IDEA 里对项目右键 →Maven→Reload Project或者点 Maven 面板左上角的刷新图标。5.2 启动直接失败几种典型报错怎么读Spring Boot 启动失败时报错信息一般会给出APPLICATION FAILED TO START的大标题下面跟着一段Description。这段描述非常关键它通常直接告诉你原因。如果报Web server failed to start. Port 8080 was already in use就是端口被占了。Windows 上排查netstat -ano | findstr :8080 taskkill /PID 上面查到的PID /FLinux 或 macOSlsof -i:8080 kill -9 上面查到的PID不想杀进程也行改端口server.port8081就完事了这是最快的解法。如果报Could not resolve placeholder说明配置里引用了某个不存在的变量常见于Value(${xxx})拼错了名字或者配置文件没被加载。检查一下配置文件的位置对不对必须在src/main/resources下、spring.profiles.active指定的环境文件是不是真的存在。如果启动时抛BeanCreationException往下翻找到Caused by那一行真正的原因在那里。常见的比如数据源配置了但数据库连不上、循环依赖、Bean 名字冲突。这一类问题定位的核心技巧就是永远看最底层的Caused by中间那些层都是包装。5.3 接口 404、参数收不到、返回值不对404 在 Spring Boot 里几乎只有一个原因路由没匹配上。按这个顺序查现象可能原因检查方式访问任何接口都 404启动类包路径不对Controller 不在扫描范围内确认 Controller 与启动类同包或在子包下某个接口 404其他正常路径拼写错误或请求方法不匹配确认用了GetMapping还是PostMapping用 Postman 换方法试类上加RequestMapping(/api)后 404前缀拼错比如多了斜杠或少了斜杠打开启动日志搜RequestMappingHandlerMapping能看到所有已注册的映射一直 404 但日志里有映射前端或者工具发的请求带了额外的 context-path检查server.servlet.context-path配置排查 404 有个非常好用的办法把日志级别调低。在配置文件里加logging: level: org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping: TRACE重启后启动日志里会打印出所有注册的路由一目了然比自己猜快得多。参数收不到的情况通常是RequestParam和RequestBody用混了。URL 上的?a1用RequestParam请求体里的 JSON 用RequestBody。如果前端发的是 JSON 但后端用RequestParam接参数就是 null。另外如果用了RequestBody接一个自定义对象对象里必须有默认构造函数和 setter用 Lombok 的话加Data就够了否则报反序列化异常。5.4 中文乱码和日志输出问题IDE 控制台里的中文日志变成问号或方块八成是文件编码和运行编码不一致。前面 2.2 节提到的三处 UTF-8 设置先确认一遍。如果还是不行在 IDEA 的 VM Options 里加-Dfile.encodingUTF-8并且确认 IDEA 右下角状态栏显示的编码是 UTF-8 而不是 GBK。打包成 jar 之后在 Windows 控制台运行出现乱码那是 Windows 控制台默认代码页是 GBK 造成的跟程序无关。可以用chcp 65001临时切到 UTF-8或者直接加上 JVM 参数。Linux 服务器上一般不会遇到这个问题。还有一种情况日志文件里的中文正常但控制台不正常。那就是输出流的编码问题检查日志框架的 encoder 配置里有没有指定charset。6. 这套最小骨架后续还能怎么用项目跑起来之后pom.xml和目录结构就是一个可以反复复制的基础模板。我自己的做法是把这套骨架单独存一个仓库起新项目时直接复制把 Group、Artifact、包名全局替换一遍就行比每次重新生成再调配置快得多。再往上扩展的话通常在这几个方向加东西。接数据库的话加spring-boot-starter-data-jpa或者 MyBatis 的起步依赖配置文件里配spring.datasource那一组然后就能写 Repository 或者 Mapper 了。加缓存的话spring-boot-starter-data-redis配合Cacheable注解几个注解就能把缓存加进去不用手写 RedisTemplate 的调用。做权限的话spring-boot-starter-security或者轻量的拦截器方案看项目复杂度决定。还有一个很多人不知道的小玩意那个启动时打印的 Spring 图案是可以换的。在src/main/resources下放一个banner.txt里面写什么启动时就打印什么还能用${spring-boot.version}这类占位符。有现成的在线生成工具可以把文字转成 ASCII 艺术字图个乐子。生产环境如果不想要 Banner在启动类里写SpringApplication.setBannerMode(Banner.Mode.OFF)或者在配置里设spring.main.banner-modeoff就行。最后分享一个我踩过的坑换 JDK 大版本之后一定要mvn clean不要直接package。因为target目录里还留着上个 JDK 编译出来的 class 文件增量编译可能不会重新编译每一个类跑起来就会报Unsupported class file major version这种看着莫名其妙的错。清一下再构建问题消失。这种“看起来是配置问题、实际是缓存问题”的情况在 Java 工具链里出现的频率比想象中高得多遇到诡异报错时先 clean 再试往往比盯着配置文件看半天更有效。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询