文章目录
- 1. 巧用 `application.yml` 和 `application.properties` 配置文件
- 2. 使用 `@ConfigurationProperties` 管理复杂配置
- 3. 自定义 Banner:让启动更个性化
- 4. 用 `@SpringBootApplication` 的排除功能减少组件加载
- 5. 使用 `CommandLineRunner` 执行启动任务
- 6. 用 `SpringApplicationBuilder` 自定义启动方式
- 7. 灵活使用 `@Profile` 切换不同环境配置
- 8. 用 `@ConditionalOnProperty` 控制 Bean 的加载
- 9. 使用 DevTools 加快开发效率
- 10. 使用 `@Value` 和 `@ConfigurationProperties` 动态获取配置信息
- 11. 巧用 Actuator 监控和管理应用
- 12. 使用 `@RestControllerAdvice` 实现全局异常处理
- 结语
- 推荐阅读文章
Spring Boot 因其简化配置和强大易用而被广泛应用。但在日常开发中,还有很多人不知道的 Spring Boot 小技巧,能帮助你更加高效地使用它。今天就为大家总结一些 Spring Boot 的实用技巧,让你写代码更得心应手。
1. 巧用 application.yml
和 application.properties
配置文件
Spring Boot 项目默认使用 application.properties
配置文件。对于简单的应用,使用 .properties
文件即可,但如果配置较为复杂,推荐使用 .yml
文件,它支持层次结构,便于维护。例如:
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: password
yml
文件的结构化格式让配置更清晰,适合配置量较大的项目。
2. 使用 @ConfigurationProperties
管理复杂配置
在复杂项目中,配置可能非常多。@ConfigurationProperties
能帮助你将多个相关配置映射到一个类中,便于管理。例如:
@ConfigurationProperties(prefix = "app")
public class AppProperties {
private String name;
private int version;
// getters and setters
}
配置文件:
app:
name: MySpringApp
version: 1
使用:
@Autowired
private AppProperties appProperties;
这样就可以直接使用 appProperties.getName()
来获取配置,代码更清晰。
3. 自定义 Banner:让启动更个性化
你可以通过创建 banner.txt
文件在 Spring Boot 启动时显示个性化的 Banner 信息,把它放在 src/main/resources
下即可。例如:
____ _ _ _
| _ \ | | (_) | |
| |_) | __ _ ___| |__ _ _ __ ___ __ _| |_
| _ < / _` |/ __| '_ \| | '_ ` _ \ / _` | __|
| |_) | (_| | (__| | | | | | | | | | (_| | |_
|____/ \__,_|\___|_| |_|_|_| |_| |_|\__,_|\__|
还可以在 application.properties
中自定义颜色:
spring.banner.location=classpath:banner.txt
spring.banner.color=blue
让项目启动也能充满乐趣和个性。
4. 用 @SpringBootApplication
的排除功能减少组件加载
有时我们并不需要加载 Spring Boot 提供的所有自动配置,可以使用 exclude
来排除不需要的模块:
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
这样可以加快启动速度,减少不必要的内存占用。
5. 使用 CommandLineRunner
执行启动任务
CommandLineRunner
是 Spring Boot 提供的接口,用于在应用启动时执行任务,比如初始化数据库或加载默认数据:
@Component
public class StartupRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("Application started, running initial tasks...");
}
}
你可以定义多个 CommandLineRunner
,它们会按顺序执行。
6. 用 SpringApplicationBuilder
自定义启动方式
SpringApplicationBuilder
提供了更多的启动配置项,比如可以使用链式调用配置应用属性:
new SpringApplicationBuilder(MyApplication.class)
.profiles("dev")
.properties("server.port=8081")
.run(args);
通过这种方式,可以在代码层面控制 Spring Boot 应用的启动参数,适合一些灵活的需求。
7. 灵活使用 @Profile
切换不同环境配置
在开发、测试、生产环境中,配置需求往往不同。使用 @Profile
注解可以轻松实现配置切换:
@Bean
@Profile("dev")
public DataSource devDataSource() {
// 开发环境数据源配置
}
@Bean
@Profile("prod")
public DataSource prodDataSource() {
// 生产环境数据源配置
}
在 application.properties
中指定激活的环境:
spring.profiles.active=dev
这样,Spring Boot 会自动加载与当前环境对应的 Bean 配置。
8. 用 @ConditionalOnProperty
控制 Bean 的加载
有时你可能需要根据配置来加载 Bean,比如当某个功能被启用时才加载对应的 Bean。使用 @ConditionalOnProperty
可以做到按需加载 Bean:
@Bean
@ConditionalOnProperty(name = "featureX.enabled", havingValue = "true")
public FeatureX featureX() {
return new FeatureX();
}
在配置文件中:
featureX.enabled=true
这样就实现了按配置加载 Bean 的效果,非常适合动态功能的需求。
9. 使用 DevTools 加快开发效率
Spring Boot DevTools
是一个开发辅助工具,提供了代码热重载、缓存禁用等功能,可以大大加快开发调试效率。只需在 pom.xml
中引入依赖即可:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
引入 DevTools 后,修改代码后自动重启应用,不再需要手动重启。
10. 使用 @Value
和 @ConfigurationProperties
动态获取配置信息
在 Spring Boot 中,可以使用 @Value
注解直接获取配置文件中的值:
@Value("${app.name}")
private String appName;
对于更复杂的配置,可以使用 @ConfigurationProperties
,将相关配置聚合到一个类中:
@ConfigurationProperties(prefix = "app")
public class AppConfig {
private String name;
private String version;
// getter 和 setter
}
这样,在配置文件中更新相关参数即可,简化了配置管理。
11. 巧用 Actuator 监控和管理应用
Spring Boot Actuator
提供了一组强大的 REST 接口,用于监控和管理应用。只需添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
然后在 application.properties
中配置权限:
management.endpoints.web.exposure.include=*
启动后,可以访问 /actuator/health
、/actuator/metrics
等接口,查看系统健康状况、内存使用等指标,非常适合生产环境的监控需求。
12. 使用 @RestControllerAdvice
实现全局异常处理
在 Spring Boot 项目中,我们可以通过 @RestControllerAdvice
实现全局的异常处理,方便统一管理异常返回结果:
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleException(Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body("Oops! Something went wrong.");
}
}
这样,当应用中出现异常时,会自动进入该处理逻辑,为用户返回友好的错误信息。
结语
Spring Boot 提供了非常多的实用工具和灵活配置,以上技巧只是冰山一角。通过掌握这些技巧,可以更轻松地实现开发需求,并有效提高项目的效率。希望这些 Spring Boot 技巧能帮助你写出更简洁、高效的代码!
推荐阅读文章
- 由 Spring 静态注入引发的一个线上T0级别事故(真的以后得避坑)
- 如何理解 HTTP 是无状态的,以及它与 Cookie 和 Session 之间的联系
- HTTP、HTTPS、Cookie 和 Session 之间的关系
- 什么是 Cookie?简单介绍与使用方法
- 什么是 Session?如何应用?
- 使用 Spring 框架构建 MVC 应用程序:初学者教程
- 有缺陷的 Java 代码:Java 开发人员最常犯的 10 大错误
- 如何理解应用 Java 多线程与并发编程?
- 把握Java泛型的艺术:协变、逆变与不可变性一网打尽
- Java Spring 中常用的 @PostConstruct 注解使用总结
- 如何理解线程安全这个概念?
- 理解 Java 桥接方法
- Spring 整合嵌入式 Tomcat 容器
- Tomcat 如何加载 SpringMVC 组件
- “在什么情况下类需要实现 Serializable,什么情况下又不需要(一)?”
- “避免序列化灾难:掌握实现 Serializable 的真相!(二)”
- 如何自定义一个自己的 Spring Boot Starter 组件(从入门到实践)
- 解密 Redis:如何通过 IO 多路复用征服高并发挑战!
- 线程 vs 虚拟线程:深入理解及区别
- 深度解读 JDK 8、JDK 11、JDK 17 和 JDK 21 的区别
- 10大程序员提升代码优雅度的必杀技,瞬间让你成为团队宠儿!
- “打破重复代码的魔咒:使用 Function 接口在 Java 8 中实现优雅重构!”
- Java 中消除 If-else 技巧总结
- 线程池的核心参数配置(仅供参考)
- 【人工智能】聊聊Transformer,深度学习的一股清流(13)
- Java 枚举的几个常用技巧,你可以试着用用