1、直接在启动类下面调用方法

@SpringBootApplication
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
System.out.println("在启动类添加初始下方法");
}
}

2、使用@PostConstruct注解

@Component
public class MyInitStart2 {
@PostConstruct
public void run() {
System.out.println("在MyInitStart2中添加初始下方法");
}
}

3、实现CommandLineRunner接口

@Component
public class MyInitStart3 implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("在MyInitStart3中添加初始下方法");
}
}

4、实现ApplicationRunner接口

@Component
public class MyInitStart4 implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("在MyInitStart4中添加初始下方法");
}
}

5、实现ApplicationListener接口

@Component
public class MyInitStart5 implements ApplicationListener<ApplicationStartedEvent> {
@Override
public void onApplicationEvent(ApplicationStartedEvent event) {
System.out.println("在MyInitStart5中添加初始下方法");
}
}

6、实现InitializingBean接口

@Component
public class MyInitStart6 implements InitializingBean {
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("在MyInitStart6中添加初始下方法");
}
}

7、使用过滤器

@Component
public class MyFilter implements Filter { /**
* init() :该方法在tomcat容器启动初始化过滤器时被调用,它在 Filter 的整个生命周期只会被调用一次。
* doFilter() :容器中的每一次请求都会调用该方法, FilterChain(放行) 用来调用下一个过滤器 Filter。
* destroy(): 当容器销毁过滤器实例时调用该方法,在方法中销毁或关闭资源,在过滤器 Filter 的整个生命周期也只会被调用一次。
*/
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("Filter 前置");
} @Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("Filter 处理中");
filterChain.doFilter(servletRequest, servletResponse);
} @Override
public void destroy() {
System.out.println("Filter 后置");
}
}

8、使用定时器方式

@Component
// 启用定时任务
@EnableScheduling
public class ScheduledTasks { // 每 5 秒执行一次任务。
@Scheduled(cron = "0/5 * * * * ?")
public void performingTasks() {
System.out.println("在定时任务中添加初始化方法");
// 停止定时任务 代码实现省略...
}
}

以上几种方法的打印顺序:

  1. Filter 前置(过滤器)

  2. 在MyInitStart6中添加初始下方法(实现InitializingBean接口)

  3. 在MyInitStart2中添加初始下方法(使用@PostConstruct注解)

  4. 在MyInitStart5中添加初始下方法(实现ApplicationListener接口)

  5. 在MyInitStart4中添加初始下方法(实现ApplicationRunner接口)

  6. 在MyInitStart3中添加初始下方法(实现CommandLineRunner接口)

  7. 在启动类添加初始下方法(启动类)

  8. 在定时任务中添加初始化方法(定时任务)

SpringBoot项目启动执行任务的几种方式的更多相关文章

  1. SSM项目启动的三种方式

    SSM整合Maven项目的三种启动方式 项目部署如图: 1.从父工程的的tomcat插件中直接启动 2.从web子工程的tomcat插件中启动,(需要先执行父工程的install) 如果没有执行父工程 ...

  2. gradle springboot 项目运行的三种方式

    一.java -jar 二.eclipse中 Java Application 三.命令行 gradle bootRun

  3. springboot项目启动成功后执行一段代码的两种方式

    springboot项目启动成功后执行一段代码的两种方式 实现ApplicationRunner接口 package com.lnjecit.lifecycle; import org.springf ...

  4. SpringBoot项目启动后再请求远程接口的实现方式

    场景 有一个SpringBoot项目需要在启动后请求另一个远程服务拿取配置,而不是加载过程中去请求,可能会出现类没有实例化的场景,因此需要实现项目完全启动后再进行请求的场景. 解决 一般会有两种实现方 ...

  5. Springboot 项目启动后执行某些自定义代码

    Springboot 项目启动后执行某些自定义代码 Springboot给我们提供了两种"开机启动"某些方法的方式:ApplicationRunner和CommandLineRun ...

  6. SpringBoot从入门到精通二(SpringBoot整合myBatis的两种方式)

    前言 通过上一章的学习,我们已经对SpringBoot有简单的入门,接下来我们深入学习一下SpringBoot,我们知道任何一个网站的数据大多数都是动态的,也就是说数据是从数据库提取出来的,而非静态数 ...

  7. SpringBoot整合Servlet的两种方式

    SpringBoot整合Servlet有两种方式: 1.通过注解扫描完成Servlet组件的注册: 2.通过方法完成Servlet组件的注册: 现在简单记录一下两种方式的实现 1.通过注解扫描完成Se ...

  8. springboot项目启动之后初始化自定义配置类

    前言 今天在写项目的时候,需要再springboot项目启动之后,加载我自定义的配置类的一些方法,百度了之后特此记录下. 正文 方法有两种: 1. 创建自定义类实现 CommandLineRunner ...

  9. springboot成神之——mybatis在spring-boot中使用的几种方式

    本文介绍mybatis在spring-boot中使用的几种方式 项目结构 依赖 WebConfig DemoApplication 方式一--@Select User DemoApplication ...

  10. Springboot项目启动不了。也不打印任何日志信息。

    Springboot项目启动不了.也不打印任何日志信息. <!-- 在创建Spring Boot工程时,我们引入了spring-boot-starter,其中包含了spring-boot-sta ...

随机推荐

  1. 超级简单实用的CSS3动画,增添网页效果

    有时候做网页,如果都写成静态的没有动态效果,犹如一张张图片,没有视觉感受,没有达到很好的视觉效果. 其实一些简单的CSS3动画,可以增添网页的动态感,使自己设计的网页更有视觉享受.1.图片有一定角度的 ...

  2. 使用js有效括号匹配封装函数

    点击查看代码 function isValidParentheses(str) { // 定义一个栈,用于存储待匹配的左括号 let stack = []; // 定义一个对象,用于快速判断括号是否成 ...

  3. IPv6 — 路由方式

    目录 文章目录 目录 前文列表 IPv6 的路由 前文列表 <IPv6 - 网际协议第 6 版> <IPv6 - 地址格式与寻址模式> <IPv6 - 协议头> & ...

  4. Java面试题:Spring中的循环依赖,给程序员带来的心理阴影

    循环依赖通常发生在两个或多个Spring Bean之间,它们通过构造器.字段(使用@Autowired)或setter方法相互依赖,从而形成一个闭环.下面是一个使用字段注入(即使用@Autowired ...

  5. AIRIOT答疑第3期|如何使用物联网平台的可视化组态引擎?

    丰富组件,满足千人千面! AIRIOT物联网低代码平台的可视化组态引擎,具备丰富的可视化看板及组件,满足各类工艺流程图.数据可视化需求.支持三维编辑.图形绘制.图表设计等设计方式,PPT模式设计软件界 ...

  6. AIRIOT物联网低代码平台如何配置交通部JT-808协议?

    属性配置可配置终端ID和SIM卡号,数据点配置决定设备传上来的哪些数据可以存储展示. 驱动配置可配置采集周期和通讯超时时间. AIRIOT物联网低代码平台如何配置交通部JT-808协议?具体操作如下: ...

  7. 【题解】A18535.来自领导的烦恼

    题目跳转 思路:本题可以使用动态规划或递归的方式来实现,本质上是一道01背包的变型题.假设一共有\(n\)名员工,每一位员工的技能水平用\(a[i]\)表示.要使得两个部门的员工技能总和之差最小,意思 ...

  8. Android 13 - Media框架(15)- OpenMax(三)

    关注公众号免费阅读全文,进入音视频开发技术分享群! 上一节学习了 media.codec 服务中的部分内容,这一节我们将一起了解 OMX IL 层的 API 以及相关的结构体等内容. 1.相关路径 以 ...

  9. Android 13 - Media框架(10)- NuPlayer::Renderer

    关注公众号免费阅读全文,进入音视频开发技术分享群! 这一节我们来了解 NuPlayer Renderer 是如何工作,avsync 机制是如何运行的. 1.创建 Renderer void NuPla ...

  10. 资源编排ROS之模块:实现模板代码复用(进阶篇)

    背景 资源编排服务(Resource Orchestration Service, 简称ROS)是阿里云提供的一项简化云计算资源管理的服务.您可以遵循ROS定义的模板规范编写资源栈模板,在模板中定义所 ...