在启动时在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,所以不确定是否有更清洁或更合适的方式来解决这个问题。
ApplicationRunner
和CommandLineRunner
是实现执行业务逻辑的正确接口,需要在启动时注入依赖项。两者之间没有太大区别。
CommandLineRunner
将允许您访问启动时传递的原始String
参数数组。
ApplicationRunner
会给你一个更有条理的ApplicationArguments
,但就是这样。
您可以拥有多个启动跑步者,甚至可以订购它们。
这看起来很骇人听闻
不,这不对。 ApplicationRunner
和CommandLineRunner
JavaDoc
用于表示bean在
SpringApplication
中包含时应运行的接口。