SpringBoot项目启动后自动加载系统配置的多种实现方式
作者:Dolphin_Home
这篇文章主要介绍了SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
在 Spring Boot 项目中,可以通过以下几种方式实现 在项目启动完成后自动加载系统配置缓存操作 的需求:
1. 使用 CommandLineRunner
CommandLineRunner 是一个接口,可以用来在 Spring Boot 应用启动后立即执行一些逻辑代码。
实现方式:
import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; @Component public class SystemConfigLoader implements CommandLineRunner { @Override public void run(String... args) throws Exception { // 在这里加载系统配置缓存 System.out.println("项目启动完成,开始加载系统配置..."); // 模拟加载配置操作 loadSystemConfig(); } private void loadSystemConfig() { // 假设从数据库中加载配置 System.out.println("系统配置加载成功!"); } }
2. 使用 ApplicationRunner
ApplicationRunner
与 CommandLineRunner
类似,但支持接收一个 ApplicationArguments
对象,用于更灵活地处理传入参数。
实现方式:
import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; @Component public class SystemConfigLoader implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { // 在这里加载系统配置缓存 System.out.println("项目启动完成,开始加载系统配置..."); loadSystemConfig(); } private void loadSystemConfig() { // 假设从数据库中加载配置 System.out.println("系统配置加载成功!"); } }
3. 使用 @EventListener 监听 ApplicationReadyEvent
通过监听 ApplicationReadyEvent
,可以在 Spring Boot 完成所有启动流程后执行逻辑。
实现方式:
import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; @Component public class SystemConfigLoader { @EventListener(ApplicationReadyEvent.class) public void onApplicationReady() { // 在项目启动完成后加载系统配置 System.out.println("项目启动完成,开始加载系统配置..."); loadSystemConfig(); } private void loadSystemConfig() { // 假设从数据库中加载配置 System.out.println("系统配置加载成功!"); } }
4. 使用 @PostConstruct 注解
@PostConstruct
注解会在 Bean 初始化后执行,但其执行时机稍早于项目完全启动完成,因此需要配合延时操作来确保项目完全启动后再执行。
实现方式:
import jakarta.annotation.PostConstruct; import org.springframework.stereotype.Component; @Component public class SystemConfigLoader { @PostConstruct public void init() { // 延时加载以确保项目完全启动 new Thread(() -> { try { Thread.sleep(2000); // 模拟延时 System.out.println("项目启动完成,开始加载系统配置..."); loadSystemConfig(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } }).start(); } private void loadSystemConfig() { // 假设从数据库中加载配置 System.out.println("系统配置加载成功!"); } }
5. 使用 SmartLifecycle 接口
SmartLifecycle
提供了更灵活的控制,可以控制代码的启动和停止时机。
实现方式:
import org.springframework.context.SmartLifecycle; import org.springframework.stereotype.Component; @Component public class SystemConfigLoader implements SmartLifecycle { private boolean running = false; @Override public void start() { // 项目启动完成后执行逻辑 System.out.println("项目启动完成,开始加载系统配置..."); loadSystemConfig(); running = true; } @Override public void stop() { // 停止逻辑(可选) System.out.println("项目停止时执行清理工作..."); } @Override public boolean isRunning() { return running; } private void loadSystemConfig() { // 模拟加载配置操作 System.out.println("系统配置加载成功!"); } }
对比与推荐
简单场景:
- 推荐使用
CommandLineRunner
或ApplicationRunner
,实现简单且清晰。
- 推荐使用
更灵活的监听启动事件:
- 推荐使用
@EventListener
监听ApplicationReadyEvent
,可以确保所有 Bean 初始化完成。
- 推荐使用
需要更细粒度的控制:
- 使用
SmartLifecycle
提供更灵活的控制。
- 使用
以上就是SpringBoot项目启动后自动加载系统配置的多种实现方式的详细内容,更多关于SpringBoot自动加载系统配置的资料请关注脚本之家其它相关文章!