• 五、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

  • 相关阅读:
    WebUpLoder 能自动预览,能多实例,包括后台demo
    ajax请求总是进入Error里
    c#_1:后台post请求
    Echarts_1:水平柱体
    Hello World!
    python正则表达式
    python web.py出现ValueError: need more than 1 value to unpack
    web.py端口被占用的错误
    github commit时出现 Please tell me who you are.以及项目名称管理
    打飞机小游戏 python+pygame
  • 原文地址:https://www.cnblogs.com/zhaoyuan72/p/14802189.html
Copyright © 2020-2023  润新知