Spring Boot 项目启动后自动加载体系设置的多种实现方式 ...

打印 上一主题 下一主题

主题 906|帖子 906|积分 2718

Spring Boot 项目启动后自动加载体系设置的多种实现方式

在 Spring Boot 项目中,可以通过以下几种方式实现 在项目启动完成后自动加载体系设置缓存操作 的需求:

1. 使用 CommandLineRunner

CommandLineRunner 是一个接口,可以用来在 Spring Boot 应用启动后立即执行一些逻辑代码。
实现方式:

  1. import org.springframework.boot.CommandLineRunner;
  2. import org.springframework.stereotype.Component;
  3. @Component
  4. public class SystemConfigLoader implements CommandLineRunner {
  5.     @Override
  6.     public void run(String... args) throws Exception {
  7.         // 在这里加载系统配置缓存
  8.         System.out.println("项目启动完成,开始加载系统配置...");
  9.         // 模拟加载配置操作
  10.         loadSystemConfig();
  11.     }
  12.     private void loadSystemConfig() {
  13.         // 假设从数据库中加载配置
  14.         System.out.println("系统配置加载成功!");
  15.     }
  16. }
复制代码

2. 使用 ApplicationRunner

ApplicationRunner 与 CommandLineRunner 类似,但支持吸收一个 ApplicationArguments 对象,用于更机动地处置惩罚传入参数。
实现方式:

  1. import org.springframework.boot.ApplicationArguments;
  2. import org.springframework.boot.ApplicationRunner;
  3. import org.springframework.stereotype.Component;
  4. @Component
  5. public class SystemConfigLoader implements ApplicationRunner {
  6.     @Override
  7.     public void run(ApplicationArguments args) throws Exception {
  8.         // 在这里加载系统配置缓存
  9.         System.out.println("项目启动完成,开始加载系统配置...");
  10.         loadSystemConfig();
  11.     }
  12.     private void loadSystemConfig() {
  13.         // 假设从数据库中加载配置
  14.         System.out.println("系统配置加载成功!");
  15.     }
  16. }
复制代码

3. 使用 @EventListener 监听 ApplicationReadyEvent

通过监听 ApplicationReadyEvent,可以在 Spring Boot 完玉成部启动流程后执行逻辑。
实现方式:

  1. import org.springframework.context.event.ContextRefreshedEvent;
  2. import org.springframework.context.event.EventListener;
  3. import org.springframework.stereotype.Component;
  4. @Component
  5. public class SystemConfigLoader {
  6.     @EventListener(ApplicationReadyEvent.class)
  7.     public void onApplicationReady() {
  8.         // 在项目启动完成后加载系统配置
  9.         System.out.println("项目启动完成,开始加载系统配置...");
  10.         loadSystemConfig();
  11.     }
  12.     private void loadSystemConfig() {
  13.         // 假设从数据库中加载配置
  14.         System.out.println("系统配置加载成功!");
  15.     }
  16. }
复制代码

4. 使用 @PostConstruct 注解

@PostConstruct 注解会在 Bean 初始化后执行,但其执行机遇稍早于项目完全启动完成,因此必要配合延时操作来确保项目完全启动后再执行。
实现方式:

  1. import jakarta.annotation.PostConstruct;
  2. import org.springframework.stereotype.Component;
  3. @Component
  4. public class SystemConfigLoader {
  5.     @PostConstruct
  6.     public void init() {
  7.         // 延时加载以确保项目完全启动
  8.         new Thread(() -> {
  9.             try {
  10.                 Thread.sleep(2000); // 模拟延时
  11.                 System.out.println("项目启动完成,开始加载系统配置...");
  12.                 loadSystemConfig();
  13.             } catch (InterruptedException e) {
  14.                 Thread.currentThread().interrupt();
  15.             }
  16.         }).start();
  17.     }
  18.     private void loadSystemConfig() {
  19.         // 假设从数据库中加载配置
  20.         System.out.println("系统配置加载成功!");
  21.     }
  22. }
复制代码

5. 使用 SmartLifecycle 接口

SmartLifecycle 提供了更机动的控制,可以控制代码的启动和克制机遇。
实现方式:

  1. import org.springframework.context.SmartLifecycle;
  2. import org.springframework.stereotype.Component;
  3. @Component
  4. public class SystemConfigLoader implements SmartLifecycle {
  5.     private boolean running = false;
  6.     @Override
  7.     public void start() {
  8.         // 项目启动完成后执行逻辑
  9.         System.out.println("项目启动完成,开始加载系统配置...");
  10.         loadSystemConfig();
  11.         running = true;
  12.     }
  13.     @Override
  14.     public void stop() {
  15.         // 停止逻辑(可选)
  16.         System.out.println("项目停止时执行清理工作...");
  17.     }
  18.     @Override
  19.     public boolean isRunning() {
  20.         return running;
  21.     }
  22.     private void loadSystemConfig() {
  23.         // 模拟加载配置操作
  24.         System.out.println("系统配置加载成功!");
  25.     }
  26. }
复制代码

对比与推荐


  • 简单场景:

    • 推荐使用 CommandLineRunner 或 ApplicationRunner,实现简单且清晰。

  • 更机动的监听启动事件:

    • 推荐使用 @EventListener 监听 ApplicationReadyEvent,可以确保全部 Bean 初始化完成。

  • 必要更细粒度的控制:

    • 使用 SmartLifecycle 提供更机动的控制。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

商道如狼道

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表