Spring Boot 项目启动后自动加载体系设置的多种实现方式
在 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 提供更机动的控制。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |