Loading

五、SpringBoot随系统启动任务的方式(SpringBoot系列)

不使用框架监听器实现

在servlet/Jsp项目中,可以通过监听器来实现,ServletContextListener能够监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期。

@Component
public class MyListener implements {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        //在这里做数据初始化操作
    }
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        //在这里做数据备份操作
    }
}
## SpringBoo提供的系统启动任务两种解决方案

- CommandLineRunner
- ApplicationRunner

### CommandLineRunner

```java
@Component
// 可以配置多个,用@Order指定先后加载顺序,数字越大,加载的越晚
@Order(98)
public class MyCommandLineRunner implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        // args这个参数就是启动类中的参数
  System.out.println("MyCommandLineRunner2>>>"+Arrays.toString(args));
    }
}

image-20210521171440903

传入启动参数的两种方法:

  1. idea中这个启动参数,就是启动类中接收到的参数

image-20210521171501222

  1. 用jar包启动的方式,参数直接跟在启动命令后面,多个参数用空格隔开即可

启动参数,有两种数据样式:

  • kay-value:java -jar hello.jar --name=三国演义 (CommandLineRunner接收这种数据格式的没办法区分什么是key-value,只会当作是一个字符串接收)
  • value:java -jar hellp.jar 三国演义 西游记
  • 两种数据格式可以同时出现:java -jar hellp.jar --name=三国演义 西游记

ApplicationRunner

和CommandLineRunner使用方法基本一样,不过能够接收的参数形式更多

例如:jar包的启动 java -jar hello.jar --name=zy --age=2 hello word

@Component
@Order(99)
public class MyApplicationRunner01 implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) throws Exception {
        String[] sourceArgs = args.getSourceArgs();//获取启动的所有参数
        System.out.println("sourceArgs:" + Arrays.toString(sourceArgs));
        List<String> nonOptionArgs = args.getNonOptionArgs(); // 获取没有key的值
        System.out.println("nonOptionArgs:" + nonOptionArgs);
        Set<String> optionNames = args.getOptionNames();// 获取key-vlue形式值的key
        for (String optionName : optionNames) {
            // 获取获取key-vlue的值
            System.out.println(optionName + ":" + args.getOptionValues(optionName));
        }
        System.out.println(">>>>>>>>>>>>>>>MyApplicationRunner01结束>>>>>>>>>>>>>>>>");
    }
}

输出结果如下:

image-20210521211512325

posted @ 2021-05-23 21:05  半瓶牛奶🥛  阅读(304)  评论(0编辑  收藏  举报