Spring Boot - 在app启动期间/之前运行代码的正确方法?

问题描述 投票:1回答:1

在启动时在Spring Boot Web应用程序中实现逻辑似乎存在不同的意见。但没有就“最佳实践”达成共识,也没有对其他人采取偏好的方式。

我有以下代码在启动时实现ApplicationRunner接口(带有一些虚拟输出):

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

@Component
@Slf4j
public class AppStartupRunner implements ApplicationRunner {

    public static int counter;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        log.info("Application started with option names : {}",
                args.getOptionNames());
        log.info("Increment counter");
        counter++;
    }
}

这种方法被认为是“正确的”(因为没有更好的术语)吗?我的目的是运行一些代码来从数据库启动时获取值,使用Ehcache存储它们,以及其他一些“初始化”位。

这似乎是hackish,所以不确定是否有更清洁或更合适的方式来解决这个问题。

java spring spring-boot spring-mvc
1个回答
1
投票

ApplicationRunnerCommandLineRunner是实现执行业务逻辑的正确接口,需要在启动时注入依赖项。两者之间没有太大区别。

CommandLineRunner将允许您访问启动时传递的原始String参数数组。 ApplicationRunner会给你一个更有条理的ApplicationArguments,但就是这样。

您可以拥有多个启动跑步者,甚至可以订购它们。


这看起来很骇人听闻

不,这不对。 ApplicationRunnerCommandLineRunner JavaDoc

用于表示bean在SpringApplication中包含时应运行的接口。

© www.soinside.com 2019 - 2024. All rights reserved.