资讯动态

Spring Boot开发环境搭建与启动排错:JDK/Maven/IDEA配置

发布时间:2026/10/9 6:03:19 来源:尧图企业网站定制
开门见山说一句Spring Boot开发环境搭建这件事说难真不难但说简单第一次搞的人十个里有八个会卡在某个莫名其妙的环节。不是Maven依赖下载到一半不动了就是项目起来之后端口被占再不然就是IDEA启动慢到让人怀疑电脑是不是该换了。这篇文章不绕弯子直接把从零搭建Spring Boot开发环境、创建项目、跑通启动流程的完整路径走一遍包括JDK和Maven怎么选、IDEA怎么调、项目启动报错怎么排查这些实操细节全部摊开讲。适合刚接触Spring Boot的Java新人也适合换电脑之后要快速重建开发环境的同学参考。我尽量把这几年被环境问题折磨过的经验浓缩成一套固定流程你照着做大概率半小时内能让第一个项目跑起来。1. 环境选型JDK、Maven、IDE三件套怎么配才不返工1.1 JDK版本选择不是越新越好要看Spring Boot版本先说JDK。很多新手上来直接装一个最新版JDK结果发现Spring Boot项目启动报错回头还得卸了重装。这里面的核心逻辑很简单Spring Boot 2.x系列最低要求Java 8官方推荐8或11Spring Boot 3.x开始强制要求Java 17及以上因为3.x是基于Jakarta EE规范的底层做了大改。所以第一步不是急着下载而是先想清楚你要用哪个Spring Boot版本。如果跟着老教程或者公司老项目走大概率还是2.x老老实实装JDK 8或者11最稳妥如果是新学新做直接用JDK 17配合Spring Boot 3.x毕竟新版本在性能和安全上都有不少改进而且官方对旧版的支持力度在逐渐下降。至于JDK发行版的选择我的建议是直接下载Eclipse TemurinAdoptium项目或者微软的OpenJDK也行。Oracle JDK现在商用收费个人用倒无所谓但没必要给自己找麻烦。下载安装之后记得配环境变量Windows下就是设JAVA_HOME指向JDK安装目录再把%JAVA_HOME%\bin加进Path。配完之后在命令行敲java -version能正常输出版本号这一步就算过了。提示如果你电脑上同时装了多个JDK建议在IDEA里面单独设置项目的JDK路径而不是依赖系统全局变量。IDEA里通过File - Project Structure - SDKs可以添加不同版本的JDK避免项目切换时版本混乱。1.2 Maven安装与镜像配置卡依赖下载的时候九成是这里没配Maven是Java项目最常用的构建工具Spring Boot项目神也用Maven管理依赖。很多新手卡在Maven下载依赖这一步屏幕上一堆Downloading...过了十分钟还在那转圈其实就是默认中央仓库太远了。安装Maven本身很简单去官网下载二进制压缩包解压到一个路径配置MAVEN_HOME和Path和JDK一样的方式。难点在配置settings.xml这个文件在Maven安装目录的conf目录下。我个人拿到Maven的第一件事就是改两个东西本地仓库位置和镜像源。settings !-- 本地仓库路径默认在用户目录/.m2/repository我习惯单独放 -- localRepositoryD:/maven-repo/localRepository mirrors mirror idaliyunmaven/id mirrorOfcentral/mirrorOf name阿里云公共仓库/name urlhttps://maven.aliyun.com/repository/public/url /mirror /mirrors /settings镜像配置不复杂核心是mirrorOfcentral/mirrorOf表示拦截所有中央仓库的请求都转发到阿里云的镜像。配完之后在命令行执行mvn -v确认Maven可用再随便建一个空项目执行mvn compile测试依赖下载速度你就知道什么叫丝滑了。1.3 IDE选型IDEA社区版够用VSCode是备选IDE这块没什么好纠结的Java后端开发首选IntelliJ IDEA。官方社区版免费功能已经覆盖日常开发所需。如果你没有特殊偏好直接下载Ultimate试用也行但社区版真的够用。IDEA的好处是内置了Spring Initializr支持、Maven集成、调试器这些全套工具不用额外配。当然也可以用VSCode加Spring Boot扩展包轻量是真的轻启动快配置也简单。不过说实话VSCode上的Java调试体验和IDEA比还是有差距的尤其是断点调试多线程代码的时候差距比较明显。我的建议是日常主力用IDEAVSCode留着当备用查看器。安装IDEA之后还需要把Maven配置指过去。路径是Settings - Build, Execution, Deployment - Build Tools - Maven把Maven home directory指向你自己安装的Maven而不是IDEA自带的。顺便把User settings file改成你刚改的settings.xml这样IDEA下载依赖就也走阿里云镜像了。2. 创建第一个Spring Boot项目从脚手架到启动成功2.1 用Spring Initializr生成项目骨架项目脚手架我推荐用Spring Initializr就是 start.spring.io 这个网页好处是官方维护、依赖版本帮你匹配好、生成的项目结构规整。IDEA社区版新建项目时也会内嵌这个功能但网页版更直观。填写的几个关键项Group一般写公司域名倒写个人项目可以写com.example。Artifact项目名比如demo或者user-service。Java Version根据你装的JDK版本选别选错了。Dependencies第一次跑demo最少勾一个Spring Web因为要启动Web项目访问接口。后续如果连数据库再加MySQL Driver和MyBatis Framework或者Spring Data JPA。生成之后得到一个zip压缩包解压到工作目录然后在IDEA里File - Open选中项目根目录IDEA会识别出Maven项目的pom.xml并自动导入依赖。第一次导入会下载一堆依赖这期间正好把镜像配置对不对测试一下。这里说个技巧如果你不想每次都用网页生成可以直接把start.spring.io的URL当接口用。在浏览器地址栏输入https://start.spring.io/starter.zip?groupIdcom.exampleartifactIddemodependenciesweb,mysql,mybatis就能直接下载一个包含Spring Web、MySQL、MyBatis依赖的项目压缩包比手动勾选还快。2.2 项目结构一眼看懂启动类、配置文件、资源目录项目导入成功后你先别急着点运行花两分钟把目录结构看明白。Spring Boot的标准布局是这样的src/main/java写Java代码的地方启动类放在根包下比如com.example.demo下的DemoApplication.java。src/main/resources放配置文件、静态资源和模板文件application.properties或application.yml在这里。src/test/java测试代码放这里。其中启动类是核心它上面有个SpringBootApplication注解。这个注解其实是组合注解包含SpringBootConfiguration、EnableAutoConfiguration和ComponentScan。简单理解就是告诉Spring Boot开启自动配置、扫描当前包及子包下的组件。所以你的Controller、Service、Mapper这些类必须放在启动类所在包或者子包里面放外面就扫不到接口404别怪我没提醒。package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }这一步能跑通你的Spring Boot开发环境就算正式工作了。2.3 项目启动的三种方式和端口修改启动方式其实有三种场景不同用不同的。第一种在IDEA里面直接右键启动类的main方法点Run。这种方式最方便日常开发就用它。注意看控制台输出的日志出现Started DemoApplication in x.x seconds就说明启动成功了日志里还会显示Tomcat started on port(s): 8080。第二种命令行用Maven插件启动。在项目根目录执行mvn spring-boot:run效果和IDEA里点运行基本一样适合不用IDE的场景。前提是项目依赖已经下载过不然第一次会比较慢。第三种先打包再运行。执行mvn package生成jar文件然后java -jar target/demo-0.0.1-SNAPSHOT.jar运行。这种方式最接近生产环境部署实际项目上线就是这种形态。启动之后默认端口是8080。如果你要改端口最简单的在src/main/resources/application.yml里加一行配置server: port: 9090或者用命令行参数覆盖java -jar demo.jar --server.port9090这个方式的优先级比配置文件高。再或者用环境变量SERVER_PORT9090 java -jar demo.jar。Spring Boot的配置优先级机制很灵活理解成“外面传的覆盖配置文件的”就差不多了。验证项目是否启动成功浏览器访问http://localhost:8080。因为是demo项目没有写Controller可能会看到Whitelabel Error Page或者404这是正常的。你能看到页面说明Spring Boot已经正常响应了。下一步写一个Hello接口试试import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; RestController public class HelloController { GetMapping(/hello) public String hello() { return Hello, Spring Boot!; } }重启项目访问/hello能返回这段字符串你的第一个Spring Boot项目就算真正跑通了。3. 开发环境第一天热部署、调试与IDEA启动提速3.1 热部署配置改代码不用反复重启的加杠杆操作项目跑起来之后马上会遇到一个痛点每次改点代码都要手动重启开发效率极低。这时候引入Spring Boot的devtools热部署依赖能帮你省掉大量无用功。在pom.xml里面加一个依赖dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-devtools/artifactId scoperuntime/scope optionaltrue/optional /dependency加了依赖之后IDEA默认并不会自动编译改动后的代码还需要两步设置。第一步打开Settings - Build, Execution, Deployment - Compiler勾选Build project automatically。第二步按CtrlShiftAlt/macOS是CmdShiftAlt/打开Registry勾选compiler.automake.allow.when.app.running。搞定这步之后改完代码按一下CtrlF9手动编译项目就会自动重启不用你手动点。devtools的原理其实是用两个类加载器来实现的一个加载不会变化的第三方依赖另一个加载你自己写的类。检测到代码变化后只替换第二个类加载器里的内容所以比全量重启快很多。说实话对这种机制的理解不需要太深知道它解决的是什么问题就够了。注意spring-boot-devtools只应该用在开发环境打包进生产环境的jar里纯属给自己找麻烦。这也是为什么scope要设置成runtimeoptional要设成true。生产部署时它根本不会生效。3.2 IDEA启动慢的自查清单从依赖下载到堆内存分配“IDEA启动项目慢”这个痛点我实在太有发言权了。搭好环境第一周我就在跟这个问题搏斗后来总结下来慢的原因基本就这几类。第一类依赖下载慢。第一次启动项目要下载所有依赖这一步慢的根源百分之九十九是Maven镜像没配置好按我之前说的阿里云镜像配置好基本能提速十倍以上。验证方法很简单打开IDEA的Maven工具窗口看下载进度如果卡在某个jar上长时间不动把那个dependency的坐标拿来在浏览器里用国内镜像搜一下看看是不是源的问题。第二类IDEA本身内存不够。IDEA是吃内存大户默认分配的内存对大型项目不够用。打开Help - Change Memory Settings把堆内存调到2G以上前提是你电脑内存不低于8G。我的经验是4G最舒服再多也没必要。改完重启IDEA明显感觉Build和索引阶段都流畅了。第三类扫描文件太慢。打开Settings - Project: xxx - Project Structure看Modules那栏把不需要的目录exclude掉比如target目录、node_modules目录。排除之后IDEA建索引的时候就会跳过这些目录启动速度提升立竿见影。第四类杀毒软件实时扫描。这个在Windows上比较明显安全软件对磁盘上新建的class文件逐字节扫描开发体验被拖垮。把IDEA的项目目录和Maven本地仓库目录加入白名单或者排除项能解决不少麻烦。说到底IDEA启动慢这个问题本质上是资源分配和配置问题不太可能是IDEA本身烂。只要你愿意花半小时按这个清单排查一遍体验会有质的改善。4. 端口、数据库、多环境配置文件项目启动踩坑实录4.1 端口占用报错APPLICATION FAILED TO START怎么处理默认端口8080电脑上稍微跑几个服务端口就容易被占用。启动Spring Boot项目时报下面的错就是典型的端口冲突*************************** APPLICATION FAILED TO START *************************** Description: Web server failed to start. Port 8080 was already in use.解决办法有两个方向。第一个方向杀掉占用端口的进程。Windows下用netstat -ano | findstr 8080查到PID再用taskkill /pid PID /f强杀macOS或者Linux下用lsof -i:8080查出PID再用kill -9 PID结束进程。注意在Linux上端口小于1024时要用sudo不过8080这个范围一般没这个问题。第二个方向如果你不想杀进程就换一个端口启动。直接用--server.port9090跑一次或者持久化改到application.yml里面。我的建议是开发环境固定一个端口别每次启动都靠命令行参数传不然你看不到项目真实端口。其实还有一个更隐蔽的坑Windows的“Hyper-V保留端口范围”会在某些情况下占用随机动态端口导致明明netstat看不到任何进程占着8080但Spring Boot就是起不来。遇到这种玄学问题用管理员权限在命令行执行net stop winnat再net start winnat或者执行netsh interface ipv4 show excludedportrange protocoltcp查看被保留的端口段改个不在范围内的端口即可。4.2 多环境配置开发、测试、生产三套环境切换不迷路一个正经点的项目至少得区分开发环境、测试环境、生产环境。每套环境的数据库地址、日志级别、接口超时时间都不一样。如果靠注释代码来切换那迟早翻车。Spring Boot对多环境的支持做得很好核心就是profiles机制。做法很简单在src/main/resources目录下建多个配置文件application.yml公共配置所有环境都生效。application-dev.yml开发环境配置。application-prod.yml生产环境配置。公共配置文件里指定当前激活哪个环境spring: profiles: active: dev开发时active设为dev要切换环境改这一行就行。更灵活的做法是在启动时指定java -jar demo.jar --spring.profiles.activeprod或者用环境变量SPRING_PROFILES_ACTIVEprod来传这样不用改代码就能适配不同运行环境。每个环境配置文件里可以放各自的数据库连接、Redis地址、日志级别这些内容。比如开发环境用本地数据库生产环境用云数据库把连接串分别写进两个profile文件一键切换再也不用在代码里改连接串然后重新打包了。4.3 MyBatis和MySQL驱动的数据源配置项目如果连数据库光勾了依赖还不够必须把数据源配置写清楚否则项目启动会直接报错提示配置DataSource失败或者找不到合适的驱动。这是很多新手会卡的一个点。MySQL 8.x版本对应的配置长这样spring: datasource: url: jdbc:mysql://localhost:3306/demo_db?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver注意几个细节。第一driver-class-name在MySQL 8.x必须写com.mysql.cj.jdbc.Driver旧版的com.mysql.jdbc.Driver已经废弃了。第二URL里一定要带serverTimezoneAsia/Shanghai不然会报时区相关的错误这是MySQL 8.x驱动的硬性要求。第三数据库demo_db得提前创建好Spring Boot默认不会自动建库。如果你用的是MyBatis还需要加一个MapperScan注解告诉Spring Boot去哪里找Mapper接口。常用写法是在启动类上加MapperScan(com.example.demo.mapper)不加这个注解运行时会报找不到Mapper的Bean表现为启动能过一调用接口就报Invalid bound statement (not found)。这个坑我踩过印象很深。5. 启动报错速查表与排查习惯养成5.1 高频启动报错对照表为了让你少走弯路我把这几年遇到的高频错误整理成一张速查表建议保存备用。报错症状根本原因解决方式Port 8080 was already in use端口被占用查进程杀掉或改server.portFailed to configure a DataSource缺数据源配置或依赖没加补全yml中的url/username/passwordAccess denied for user rootlocalhost数据库密码错误核对用户名密码Unknown database demo_db数据库不存在手动建库或修改库名Communications link failure数据库地址或端口错误检查url中的host和portInvalid bound statement (not found)Mapper扫描或XML位置不对检查MapperScan和XML路径Cannot determine embedded database driver class没引入JDBC相关依赖添加mysql-connector或h2依赖ClassNotFoundException: org.springframework.boot...依赖版本与JDK不匹配检查JDK版本与Spring Boot版本兼容性启动日志出现ERROR然后进程退出某个Bean加载失败或端口冲突按日志中Caused by一层层查根因排查报错有个总原则看日志不要只看最上面的红字要从下往上找Caused by那一行那才是错误的真正根源。很多新手只看到最上面的Exception名字就慌了其实根本原因藏在下面越往下的Caused by越接近真实原因。5.2 养成三个排查好习惯省一半踩坑时间第一个习惯启动前先看一眼端口。尤其Windows机器上开着微信、钉钉、各种开发工具8080被占的概率不低。先执行netstat -ano | findstr 8080Linux/macOS用lsof -i:8080确认端口干净了再启动项目。第二个习惯启动之后立刻验证接口。直接在IDEA的终端里curl http://localhost:8080/hello而不是打开浏览器手动刷新。curl返回结果和HTTP状态码比浏览器直观得多。每次改完代码重启顺手敲一遍curl接口挂没挂立刻知道。第三个习惯不要把Spring Boot的启动日志当摆设。日志里Tomcat started on port(s): 8080意味着Web容器起来了Started DemoApplication意味着所有自动配置都成功了。如果启动后长时间卡在某一行没下文多半是某个Bean初始化慢或者连数据库超时CtrlC停掉仔细看卡住的那一行和它之前的日志一般是能看出名堂的。6. 我的几个土办法给新人的额外建议最后分享几个我自己的土办法纯经验积累没有教材会告诉你。第一个IDE里的控制台字体调大一点。看起来是小事但排查日志的时候真的能救眼睛尤其是报错信息一大屏的时候小字体根本看不下去。IDEA里Settings - Editor - Font把字体调到18号你会感谢我的。第二个给自己的Maven加一个-T参数并行构建。在IDEA的Maven设置里加上-T 1C意思是利用CPU核数并行构建。项目模块多了以后这个参数能显著缩短编译等待时间说是提效神器也不夸张。第三个本地开发环境配一套最小化数据库。如果只是为了跑通启动流程不一定要装完整MySQL数据库。用H2内存数据库Spring Boot支持只要改一行配置或者用Docker起一个MySQL容器都比重装一套数据库服务来得干净。我个人现在开发机上跑Docker容器装MySQL需要的时候秒启秒停完全不污染宿主机环境。个人体验最深的还是Maven镜像。第一次搭环境的时候我在没有任何镜像配置的情况下创建了一个依赖稍多的Spring Boot项目光是等依赖下载就快一个小时中途还经常出现下载失败重试。后来用了阿里云镜像同一个项目从创建到启动五分钟出头就搞定了。差别就是这么大所以这篇文章里凡是和依赖下载有关的地方我都反复强调镜像配置真的重要。如果你现在正卡在某个环节我的建议是先别乱改配置按照本文顺序检查一遍大概率能找到原因。这一套流程跑通之后后面开发的路就会顺很多。希望这篇文章能帮你少踩几个坑早点把时间花在真正有意思的业务代码上。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑