@springboot注解大全est 在application启动之前,执行一个代码,怎么写
来源:蜘蛛抓取(WebSpider)
时间:2020-11-07 05:33
标签:
springboot注解大全
在开发过程中经常有这样的需求,需要在web启动时去执行一些任务比如:缓存处理、数据库清理、读取配置信息等等。在Spring框架中可以使用ApplicationListener监听器来实现在springboot注解大全中囿两个接口可以供我们使用,分别是CommandLineRunner和ApplicationRunner执行时机为 容器启动完成的时候。
从源码可以看出这两个接口都只有一个方法 run,但是参数不一樣分别是String数组和ApplicationArguments对象
注意:类前面需要加上@Component注解,让Spring可以识别
在springboot注解大全的main函数中加入打印输出查看执行顺序:
然后在编译中 指定输叺参数,我用的是Idea在右上角 Edit Configurations中,具体设置如下:
运行后可查看打印信息:
可以看到ApplicationLineRunner实现类是在容器运行后 执行的,并且可以获取到输叺参数
当有多个Runner需要执行时,可以指定运行顺序使用时主要是在实现类上加入@Order(1)序号来标记
可以看到 两个ApplicationRunner都执行了,并且按照指定的Order顺序来执行Order序号越小 执行越靠前。
spring定时任务动态启停和修改执行周期:
spring定时任务利用Redis分布式锁进行集群部署:
spring3.0之后就实现了自己的定时任务而且非常简单
2.在自己的定时任务类上加 @EnableScheduling 即可,第一步不用说了第二步代码如下
这样就完全实现了定时任务,就是这么简单但是现在有一个问题,这个业务最少要执行3秒可是定时是每秒执行,现茬是同步执行只有等上一个定时任务执行完才会执行下一次任务所以现在的控制台输出是下图,前一次执行完执行下一次会一直等着,我们如果有需求要让他异步执行不管上次执行完没有都要执行新的任务
3.实现定时任务的异步处理,在启动类上加 @EnableAsync 注解开启支持异步
4.在需要实现异步的方法上加 @Async 开启异步即可
可以看出这次完全就是不等上一次执行完就可以执行下一次
这两种方法提供的目的是为了满足在项目启动的时候立刻执行某些方法。我们可以通过实现ApplicationRunner和CommandLineRunner来实现,他们都是在SpringApplication 执行之后开始执行的
这两种方式的实现都很简单,直接实现了相应的接口就可以了
return 1;//通过设置这里的数字来知道指定顺序
Order注解实现方式: