对于在Spring应用程序启动时实现逻辑,似乎有不同的看法。但在“最佳做法”或优先于其他方式等问题上没有达成共识。
我有以下代码在启动时实现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将它们存储在其中,以及其他一些“初始化”位。
这似乎有点麻烦,所以不确定是否有一个更干净或更合适的方法来解决这个问题。
发布于 2019-03-29 22:10:04
ApplicationRunner和CommandLineRunner是执行业务逻辑的正确接口,这需要在启动时注入依赖项。两者之间并没有太大的差别。
CommandLineRunner将允许您访问启动时传递的参数的原始String数组。
ApplicationRunner会给您一个更结构化的ApplicationArguments,但仅此而已。
你可以有多个新手,你甚至可以订购他们。
这听起来有点刺耳
不,不是的。ApplicationRunner和CommandLineRunner JavaDoc
接口,用于指示当bean包含在
SpringApplication中时,它应该运行。
https://stackoverflow.com/questions/55425494
复制相似问题