zoukankan      html  css  js  c++  java
  • Spring项目启动完成后,自动执行一次指定方法

    SpringMVC

    实现ApplicationListener接口,并实现 onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent)方法

    @Service
    public class SearchReceive implements  ApplicationListener<ContextRefreshedEvent> {
        @Override
        public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
            if (contextRefreshedEvent.getApplicationContext().getParent() == null) {//保证只执行一次
                //需要执行的方法
            }
        }
    }
    

    至于为什么先做判断,因为Spring存在两个容器,一个是root application context ,另一个就是我们自己的 projectName-servlet context(作为root application context的子容器)。这种情况下,就会造成onApplicationEvent方法被执行两次。为了避免上面提到的问题,我们可以只在root application context初始化完成后调用逻辑代码,其他的容器的初始化完成,则不做任何处理。

    SpringBoot

    业务场景:
    应用服务启动时,加载一些数据和执行一些应用的初始化动作。如:删除临时文件,清除缓存信息,读取配置文件信息,数据库连接等。
    SpringBoot提供了CommandLineRunner和ApplicationRunner接口。当接口有多个实现类时,提供了@order注解实现自定义执行顺序,也可以实现Ordered接口来自定义顺序。

    注意:数字越小,优先级越高,也就是@Order(1)注解的类会在@Order(2)注解的类之前执行。

    两者的区别在于:
    ApplicationRunner中run方法的参数为ApplicationArguments,而CommandLineRunner接口中run方法的参数为String数组。想要更详细地获命令行参数,那就使用ApplicationRunner接口

    • ApplicationRunner
    @Component
    @Order(value = 10)
    public class AgentApplicationRun2 implements ApplicationRunner {
    	@Override
    	public void run(ApplicationArguments applicationArguments) throws Exception {
    
    	}
    }
    
    • CommandLineRunner
    @Component
    @Order(value = 11)
    public class AgentApplicationRun implements CommandLineRunner {
    
    	@Override
    	public void run(String... strings) throws Exception {
    
    	}
    }
    

    还有一种方法也可以实现,就是使用@PostConstruct注解,详见:https://www.jianshu.com/p/98cf7d8b9ec3

    参考


    作者:不敲代码的攻城狮
    出处:https://www.cnblogs.com/leigq/
    任何傻瓜都能写出计算机可以理解的代码。好的程序员能写出人能读懂的代码。

     
  • 相关阅读:
    js把日期字符串转换成时间戳
    JS array 数组
    for循环中的if嵌套
    第三章:图像增强
    直方图均衡化
    第二章:数字图像处理基础
    马赫带效应
    图片格式
    4邻接,8邻接和m邻接
    第一章:绪论
  • 原文地址:https://www.cnblogs.com/leigq/p/13406546.html
Copyright © 2011-2022 走看看