弹簧引导定义系统启动任务的多种方式

  

在Servlet/Jsp项目中,如果涉及到系统任务,例如在项目启动阶段要做一些数据初始化操作,这些操作有一个共同的特点,只在项目启动时进行,以后都不再执行,这里,容易想到web基础中的三大组件(Servlet过滤器,侦听器)之一听众,这种情况下,一般定义一个ServletContextListener,然后就可以监听到项目启动和销毁,进而做出相应的数据初始化和销毁操作,例如下面这样:

        公共类MyListener实现ServletContextListener {   @Override   公共空间contextInitialized (ServletContextEvent sce) {//在这里做数据初始化操作   }   @Override   公共空间contextDestroyed (ServletContextEvent sce) {//在这里做数据备份操作   }   }      

当然,这是基础web项目的解决方案,如果使用了弹簧引导,那么我们可以使用更为简便的方式.Spring引导中针对系统启动任务提供了两种解决方案,分别是CommandLineRunner和ApplicationRunner,分别来看。

  

CommandLineRunner   

使用CommandLineRunner时,首先自定义MyCommandLineRunner1并且实现CommandLineRunner接口:
  

        @ component   @Order (100)   公共类MyCommandLineRunner1实现CommandLineRunner {   @Override   公共空间运行(字符串…args)抛出异常{   }   }      

关于这段代码,我做如下解释:

  

1。首先通过@Compoent注解将MyCommandLineRunner1注册为春容器中的一个Bean。
  

  

2。添加@Order注解,表示这个启动任务的执行优先级,因为在一个项目中,启动任务可能有多个,所以需要有一个排序.@Order注解中,数字越小,优先级越大,默认情况下,优先级的值为整数。MAX_VALUE,表示优先级最低。
  

  

3。在运行方法中,写启动任务的核心逻辑,当项目启动时,运行方法会被自动执行。
  

  

4.运行方法的参数,来自于项目的启动参数,即项目入口类中,主方法的参数会被传到这里。

  

春天引导定义系统启动任务的多种方式

  

此时启动项目,运行方法就会被执行,至于参数,可以通过两种方式来传递,如果是在想法中,可以通过如下方式来配置参数:

  

另一种方式,则是将项目打包,在命令行中启动项目,然后启动时在命令行传入参数,如下:
  

  

java jar devtools-0.0.1-SNAPSHOT。jar三国演义西游记

  

注意,这里参数传递时没有钥匙,直接写价值即可,执行结果如下:

  

春天引导定义系统启动任务的多种方式

  

<强> ApplicationRunner

  

ApplicationRunner和CommandLineRunner功能一致,用法也基本一致,唯一的区别主要体现在对参数的处理上,ApplicationRunner可以接收更多类型的参数(ApplicationRunner除了可以接收CommandLineRunner的参数之外,还可以接收键/值形式的参数)。

  

使用ApplicationRunner,自定义类实现ApplicationRunner接口即可,组件注册以及组件优先级的配置都和CommandLineRunner一致,如下:

        @ component   @Order (98)   公共类MyApplicationRunner1实现ApplicationRunner {   @Override   公共空间运行(ApplicationArguments args){抛出异常   ListnonOptionArgs=args.getNonOptionArgs ();   System.out.println (“, MyApplicationRunner1>的在祝辞”+ nonOptionArgs);   SetoptionNames=args.getOptionNames ();   (字符串键:optionNames) {   System.out.println (“MyApplicationRunner1>在祝辞:“+键+ + args.getOptionValues(键));   }   String [] sourceArgs=args.getSourceArgs ();   System.out.println (“, MyApplicationRunner1>的在祝辞”+ Arrays.toString (sourceArgs));   }   }      

当项目启动时,这里的运行方法就会被自动执行,关于运行方法的参数ApplicationArguments,我说如下几点:
  

  

1. args.getnonoptionargs();可以用来获取命令行中的无关键参数(和CommandLineRunner一样)。
  2. args.getoptionnames();可以用来获取所有键/值形式的参数的关键。
  3. args.getoptionvalues(关键));可以根据关键获取键/值形式的参数的价值。
  4. args.getsourceargs ();则表示获取命令行中的所有参数。

  

ApplicationRunner定义完成后,传启动参数也是两种方式,参数类型也有两种,第一种和CommandLineRunner一致,第二种则是——键=值的形式,在想法中定义方式如下:

弹簧引导定义系统启动任务的多种方式