十年前我刚接触Java Web开发时,光搭建一个SSH框架的环境就要折腾大半天。直到2014年SpringBoot问世,我才真正体会到什么叫"开箱即用"。现在每次新项目启动,我的终端里第一个命令永远是spring init。
SpringBoot本质上是对Spring框架的再封装,它解决了传统Spring项目中最让人头疼的两个问题:复杂的配置和依赖管理。还记得以前配一个DataSource要写几十行XML吗?现在只需要在application.yml里写四行:
yaml复制spring:
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password: 123456
我习惯使用IntelliJ IDEA作为主力IDE,不是因为它比Eclipse强多少,而是它对SpringBoot的支持确实更智能。社区版就够用,但终极版的Database工具和HTTP Client确实能提升效率。
安装时有个小技巧:通过JetBrains Toolbox安装可以自动更新。配置Maven时建议修改settings.xml的镜像源:
xml复制<mirror>
<id>aliyun</id>
<mirrorOf>*</mirrorOf>
<name>阿里云</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
在IDEA里直接选Spring Initializr虽然方便,但我更推荐用官网的start.spring.io生成项目。有两个隐藏技巧:
&type=gradle-project参数可以生成Gradle项目创建完成后,注意检查.mvn/wrapper目录是否存在。有次我删了这个目录导致mvnw命令失效,后来才知道这是SpringBoot的Maven包装器。
code复制src/
├── main/
│ ├── java/
│ │ └── com/example/demo/
│ │ ├── DemoApplication.java
│ │ ├── controller/
│ │ ├── service/
│ │ └── repository/
│ └── resources/
│ ├── static/
│ ├── templates/
│ └── application.yml
└── test/
这个结构看似简单,但有几个易错点:
SpringBoot的魔法在于@SpringBootApplication注解,它实际包含三个核心注解:
@Configuration:标记配置类@ComponentScan:自动扫描组件@EnableAutoConfiguration:开启自动配置自动配置通过spring-boot-autoconfigure包的META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件实现。比如当classpath存在HikariCP时,会自动配置数据源。
创建Controller时我强烈建议用@RestController而不是@Controller,除非你真的需要返回视图。一个标准的用户接口如下:
java复制@RestController
@RequestMapping("/api/users")
public class UserController {
@GetMapping
public List<User> list() {
return userService.list();
}
@PostMapping
public User create(@RequestBody User user) {
return userService.create(user);
}
}
重要提示:永远不要在Controller里写业务逻辑!
我推荐用Spring Data JPA + Hibernate组合。配置时注意这两个参数:
yaml复制spring:
jpa:
show-sql: true
hibernate:
ddl-auto: update
实际项目中ddl-auto千万别用create-drop,我有次测试环境数据全被清空了。建议开发用update,生产用none配合Flyway。
如果遇到"Unable to find main class"错误,检查:
当出现"Port 8080 already in use"时,可以:
lsof -i:8080然后kill -9 PIDserver.port=8081server.port=0在application.yml添加:
yaml复制spring:
main:
lazy-initialization: true
这会让Bean延迟初始化,我的测试项目启动时间从4.2秒降到了2.8秒。但要注意这可能导致首次请求变慢。
添加JVM参数:
code复制-XX:TieredStopAtLevel=1
-XX:+UseSerialGC
这些参数在开发时特别有用,能显著降低内存占用。生产环境建议用G1GC。
掌握基础后,建议按这个顺序深入:
我最近在写一个自定义Starter时发现,META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件的格式要求非常严格,必须每行一个全类名,不能有空格或空行。