zoukankan      html  css  js  c++  java
  • 五、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

  • 相关阅读:
    eclipse如何与git 配合工作。
    git托管代码(二)
    PPC2003 安装 CFNET 3.5成功
    我的Window Mobile WCF 項目 第三篇 WM窗体设计
    我的Window Mobile WCF 項目 第一篇Mobile开发和WinForm开发的区别
    我的Window Mobile WCF 項目 第七天
    我的Window Mobile WCF 項目 第二篇 WindowsMobile访问WCF
    WCF 用vs2010 和 vs2008的简单对比测试
    vs2010beta1 和 搜狗输入法 冲突,按下 Ctrl 键就报错,重装搜狗解决
    我的Window Mobile WCF 項目 第六天 (二)
  • 原文地址:https://www.cnblogs.com/zhaoyuan72/p/14802189.html
Copyright © 2011-2022 走看看