美文网首页
用实现ApplicationListener来实现项目启动时运行

用实现ApplicationListener来实现项目启动时运行

作者: hzhqk | 来源:发表于2020-04-05 01:09 被阅读0次

    PS: 格式化之前的文章

    起初在网上搜索在项目启动时运行某些程序时,看到其中有用实现ApplicationListener来做的一种方法,当时没有直接复制他们的代码,而是手动写的。如下:

    import ...;
    
    @Component
    
    public class MyListener implements ApplicationListener<ApplicationContextEvent> {
    @Override
    public void onApplicationEvent(ApplicationContextEvent event) {
    
    if (event.getApplicationContext().getParent() == null) {
    
      String contextName = event.getApplicationContext().getDisplayName();
    
      String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
    
      System.out.println(String.format("=================================web application event================================"
    
      + " %s-->>%s-->>%s", contextName, time, " application event....\r\n"));
    
        }
    
      }
    
    }
    

    但是启动后发现确实有打印启动信息,似乎达到了预想中的结果。但是当我stop server停止tomcat时却发现控制台又出来同样的消息,尴尬......后在网上搜索自定义的listener为何在服务器停止时也会执行未果,便试着把ApplicationContextEvent换成ContextRefreshedEvent 发现在服务器停止后不再打印消息。通过字面意思发现,ApplicationContextEvent监听的是项目容器事件(启动、停止等),而ContextRefreshedEvent 字面理解即是容器刷新(启动或说初始化),根据其javadoc也可以知道意思:Event raised when anApplicationContextgets initialized or refreshed。在此记录提醒有同样疑惑的朋友,以后注重javadoc的阅读。

    以下是做项目启动执行的正确使用代码:

    import ...;
    
    @Component
    
    public class MyListener implements ApplicationListener<ContextRefreshedEvent> {
    
    public void onApplicationEvent(ContextRefreshedEvent event) {
    
      if (event.getApplicationContext().getParent() == null) {
    
      String contextName = event.getApplicationContext().getDisplayName();
    
      String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
    
      System.out.println(String.format("=================================web application event================================"
    
      + " %s-->>%s-->>%s", contextName, time, " application event....\r\n"));
    
        }
    
      }
    
    }
    

    相关文章

      网友评论

          本文标题:用实现ApplicationListener来实现项目启动时运行

          本文链接:https://www.haomeiwen.com/subject/lknephtx.html