国际网站平台,中国网站排名榜,太原建站模板系统,深圳网站开发外包哪家好在本快速教程中#xff0c;我们将探索Spring Boot中两个非常流行的界面#xff1a; CommandLineRunner和ApplicationRunner 。 这些接口的一种常见用例是在应用程序启动时加载一些静态数据。 虽然#xff0c;我看到这种用法主要用于测试数据设置。 它们都是带有run#x… 在本快速教程中我们将探索Spring Boot中两个非常流行的界面 CommandLineRunner和ApplicationRunner 。 这些接口的一种常见用例是在应用程序启动时加载一些静态数据。 虽然我看到这种用法主要用于测试数据设置。 它们都是带有run方法的功能接口。 此Run方法在ApplicationContext加载之后和SpringApplicationrun方法执行结束之前立即执行。 我们可以在CommandLineRunner的run方法中以原始String的形式访问应用程序参数。 让我们借助示例来看看。 首先让我们编写一个实现CommandLineRunner接口的bean Component public class SampleCmdRunner implements CommandLineRunner { private static final Logger LOG LoggerFactory.getLogger(SampleCmdRunner. class ); Override public void run(String[] args) { LOG.info( Executing the command line runner, Application arguments: Arrays.toString(args)); } } 现在让我们引导我们的Spring Boot应用程序可执行jar java -jar SampleApp- 1.0 .jar parameter1 parameter2 parameter3 以及三个命令行参数 parameter1parameter2和parameter3 。 我们的控制台日志将是 sbcetTomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) Executing the command line runner, Application arguments: [parameter1, parameter2, parameter3] 2019 - 09 - 02 11 : 02 : 10.111 INFO 7676 --- [main] com.programmergirl.SampleApp : Started SampleApp in 2.11 seconds 列出所有提供的参数的位置。 类似地我们可以定义实现ApplicationRunner接口的bean Component public class SampleAppRunner implements ApplicationRunner { private static final Logger LOG LoggerFactory.getLogger(SampleAppRunner. class ); Override public void run(ApplicationArguments args) { LOG.info( Executing SampleAppRunner ); } } ApplicationRunner提供对ApplicationArguments的访问而不仅仅是原始String参数。 从技术上来讲这是它们之间的唯一区别。 有多少 我们可以根据需要自由定义任意数量的CommandLineRunner和ApplicationRunner实现。 Java 8定义 使用Java 8 lambda 我们可以有一个代码 SpringBootApplication public class SampleApp { public static void main(String[] args) { SpringApplication.run(SampleApp. class , args); } Bean CommandLineRunner commandLineRunner() { return args - System.out.println( CommandLineRunner with args: Arrays.toString(args)); } Bean ApplicationRunner applicationRunner() { return args - System.out.println( ApplicationRunner with args: Arrays.toString(args.getSourceArgs())) } } 它在我们的Application类本身中定义了这些接口的实现。 订购 我们还可以使用Order注释对这些bean的执行施加顺序。 说我们有两个CommandLineRunner实现 Component Order ( 1 ) public class CmdRunner1 implements CommandLineRunner { private static final Logger LOG LoggerFactory.getLogger(CmdRunner1. class ); Override public void run(String[] args) { LOG.info( In CmdRunner1 ); } } Component Order ( 3 ) public class CmdRunner2 implements CommandLineRunner { private static final Logger LOG LoggerFactory.getLogger(CmdRunner2. class ); Override public void run(String[] args) { LOG.info( In CmdRunner2 ); } } 连同实现ApplicationRunner的类 Component Order ( 2 ) public class AppRunner implements ApplicationRunner { private static final Logger LOG LoggerFactory.getLogger(AppRunner. class ); Override public void run(ApplicationArguments args) { LOG.info( In AppRunner ); } } 显然我们的CmdRunner1将首先执行然后是AppRunner 最后是CmdRunner2。 结论 在本教程中我们讨论了Spring Boot提供的CommandLineRunner和ApplicationRunner接口。 翻译自: https://www.javacodegeeks.com/2019/09/spring-boot-commandlinerunner-and-applicationrunner.html