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自动加载系统配置的资料请关注脚本之家其它相关文章!
相关文章
SpringBoot整合Springsecurity实现数据库登录及权限控制功能
本教程详细介绍了如何使用SpringBoot整合SpringSecurity实现数据库登录和权限控制,本文分步骤结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧2024-10-10
通过IEAD+Maven快速搭建SSM项目的过程(Spring + Spring MVC + Mybatis)
这篇文章主要介绍了通过IEAD+Maven快速搭建SSM项目的过程(Spring + Spring MVC + Mybatis),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-01-01
构建springboot自动生成mapper文件和dao接口项目的步骤和配置方法
这篇文章主要介绍了构建springboot自动生成mapper文件和dao接口项目的步骤和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-05-05
spring的事务传播属性REQUIRED_NESTED原理
这篇文章主要介绍了spring的事务传播属性REQUIRED_NESTED原理,在spring中,要想使用事务中的回滚点,可以使用传播属性NESTED,需要的朋友可以参考下2023-05-05
Springboot+MybatisPlus实现带验证码的登录
本文主要介绍了Springboot+MybatisPlus实现带验证码的登录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2024-05-05
springboot2中session超时,退到登录页面方式
这篇文章主要介绍了springboot2中session超时,退到登录页面方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-01-01


最新评论