SpringBoot 服务启动后,读取配置进行初始化

博客围绕程序需求展开,即要在Spring Boot启动且bean初始化完成后执行程序,并读取配置文件值控制执行。实现方式是实现ApplicationRunner接口,将调用函数写进run方法,配置文件值用@Value注入,冒号后为默认值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:程序需要一个检测的机制,需要等到springboot 启动后,里面的bean都初始化完成后,再执行程序。并且需要读取spring的配置文件中的值来控制程序的执行

实现方式:实现ApplicationRunner 接口,将要调用的函数写入到run方法中

spring配置文件中的值可以使用@Value注入,冒号后面为默认值

@Component
public class AfterComponent implements ApplicationRunner {

    // 是否启用
    private static final String CHECK_EBBUSINESSPARSING_ENABLE          = "${weaver.checkEbBusinessParsing.enable}";

    // 检查到错误,是否中断启动
    private static final String CHECK_EBBUSINESSPARSING_INTERRUPT       = "weaver.checkEbBusinessParsing.interrupt";

    @Value("${weaver.checkEbBusinessParsing.enable:true}")
    private boolean enable;
    @Value("${weaver.checkEbBusinessParsing.interrupt:false}")
    private boolean interrupt;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("");
        if (enable) {
            try {
                List<String> list = checkEbBusinessIdParsing();
                if (list.size() > 0 && interrupt) {
                    throw new RuntimeException("检查到ebBusinessId解析类没写,终止运行!");
                }
            } catch (RuntimeException e) {
                throw e;
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
    }
}

### Spring Boot 启动时的初始化使用场景 Spring Boot启动过程提供了多种机制来支持初始化阶段的任务处理。这些任务可以涉及环境配置、数据预加载以及资源分配等方面。 #### 1. **通过 `ApplicationContextInitializer` 进行上下文初始化** 在 Spring Boot 应用程序初始化期间,可以从 `META-INF/spring.factories` 文件中加载实现 `ApplicationContextInitializer` 接口的类实例[^1]。此类接口允许开发者在容器刷新前对 `ConfigurableApplicationContext` 执行自定义逻辑。例如: ```java public class MyApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> { @Override public void initialize(ConfigurableApplicationContext applicationContext) { System.out.println("Initializing application context..."); // 自定义逻辑,比如修改环境变量或注册监听器 ConfigurableEnvironment environment = applicationContext.getEnvironment(); environment.getPropertySources().addFirst(new MapPropertySource("customProperties", Collections.singletonMap("my.custom.property", "value"))); } } ``` 上述代码展示了如何向环境中注入新的属性源[^2]。 --- #### 2. **利用 `CommandLineRunner` 或 `ApplicationRunner` 实现业务逻辑初始化** 对于需要在应用完全启动后立即执行某些特定业务逻辑的情况,可以使用 `CommandLineRunner` 或 `ApplicationRunner` 接口。它们会在 Spring 容器完成初始化之后运行指定方法中的代码。 以下是基于 `CommandLineRunner` 的简单例子: ```java @Component public class DataLoader implements CommandLineRunner { private final UserRepository userRepository; public DataLoader(UserRepository userRepository) { this.userRepository = userRepository; } @Override public void run(String... args) throws Exception { if (userRepository.count() == 0) { // 如果数据库为空,则插入初始数据 User user = new User("admin", "password"); userRepository.save(user); } } } ``` 此片段说明了如何在启动过程中检查并填充必要的基础数据[^3]。 --- #### 3. **借助 SQL 脚本自动创建表结构和种子数据** 为了简化开发体验,Spring Boot 支持通过内置功能读取位于 `/src/main/resources/db/` 下的 `.sql` 文件,在服务首次部署时构建所需的数据库模式或者导入测试用途的数据集。然而需要注意的是,这种方式仅适用于非生产环境下,因为它可能会包含删除现有记录或其他破坏性的命令[^4]。 示例脚本如下所示: ```sql -- schema.sql CREATE TABLE IF NOT EXISTS users ( id BIGINT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50), password VARCHAR(100) ); -- data.sql INSERT INTO users(username, password) VALUES('john', 'doe'); ``` 以上两步分别完成了表格定义与默认条目录入工作。 --- #### 总结 综上所述,Spring Boot 提供了灵活多样的手段帮助用户在其生命周期的不同节点实施定制化需求。无论是调整全局参数还是针对具体模块做精细化控制都有相应的解决方案可供选用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值