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自动加载系统配置的资料请关注脚本之家其它相关文章!
