【企业项目实战】Spring Boot 启动时加载指定方法

简介: 【企业项目实战】Spring Boot 启动时加载指定方法

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO TOP红人

💕💕 感兴趣的同学可以收藏关注下不然下次找不到哟💕💕

✊✊ 感觉对你有帮助的朋友,可以给博主一个三连,非常感谢 🙏🙏🙏

1688650814533.jpg

写在前面

首先先介绍下项目启动时就加载指定方法的这个需求对应的场景。场景的场景如下:
🍉 1、初始化数据:项目表结构升级了,增加了字段,存量的客户那边还是老版本,升级后,必定这些字段都是空数据,那么就需要启动时通过应用程序给这些字段填充数据(当然有些项目是通过调度器的)。

🍉 2、缓存预热:项目启动时,我们需要初始化某些数据到缓存中。

🍉 3、启动时加载配置:项目启动时,需要从配置中心加载配置,或者将配置信息加载到远端。

🍉 4、任务调度:有些自己写的调度器,是项目启动时需要加载的。

🍉 5、启动时校验:有些项目启动时需要做很多校验,可能是程序上的(如:sql校验),也可能是业务上的。

1、Spring Boot 启动时加载指定方法都有哪些方式的?

常用的方式有以下几种:

🍉 1. 实现 CommandLineRunner 接口或 ApplicationRunner 接口:这两个接口提供了一个 run 方法,在应用程序启动后立即执行。您可以在这个方法中编写您希望在应用程序启动时执行的代码。

🍉 2. 使用 @PostConstruct 注解:您可以将 @PostConstruct 注解添加到自定义类的方法上,该方法将在该类的实例被创建后立即执行。这样,您可以在该方法中编写您希望在应用程序启动时执行的代码。

🍉 3. 使用 ApplicationListener 接口:您可以实现 ApplicationListener 接口,并监听 ApplicationStartedEvent 事件。当应用程序启动时,该事件将被触发,您可以在监听器中编写您的自定义逻辑。

🍉 4. 使用 @EventListener 注解:您可以将 @EventListener 注解添加到自定义类的方法上,并指定要监听的事件类型。当指定的事件发生时,该方法将被调用,您可以在其中编写您的自定义逻辑。例如,您可以监听 ApplicationStartedEvent 事件。

2、CommandLineRunner 方式

CommandLineRunner 接口是Spring Boot提供的一个回调接口,可以在应用程序启动后执行特定的方法。您可以创建一个实现 CommandLineRunner 接口的类,并重写 run 方法,在其中编写需要在启动时执行的逻辑。

使用代码如下:

package com.pany.camp.load;

import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

/**
 *
 * @description:  CommandLineRunner
 * @copyright: @Copyright (c) 2022 
 * @company: Aiocloud
 * @author: pany
 * @version: 1.0.0 
 * @createTime: 2023-07-06 21:54
 */
@Component
public class MyCommandLineRunner implements CommandLineRunner {
   
   

    @Override
    public void run(String... args) throws Exception {
   
   
        // 在启动时执行的逻辑
        System.out.println("应用程序启动时执行的方法");
    }
}

3、ApplicationRunner 方式

ApplicationRunner 接口与 CommandLineRunner 接口类似,也是Spring Boot提供的一个回调接口,用于在应用程序启动后执行特定的方法。与 CommandLineRunner 不同的是, ApplicationRunner 的 run 方法接收一个 ApplicationArguments 对象,可以用于获取应用程序启动参数。

使用代码如下:

package com.pany.camp.load;

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

/**
 *
 * @description:  ApplicationRunner
 * @copyright: @Copyright (c) 2022
 * @company: Aiocloud
 * @author: pany
 * @version: 1.0.0
 * @createTime: 2023-07-06 22:04
 */
@Component
public class MyApplicationRunner implements ApplicationRunner {
   
   

    @Override
    public void run(ApplicationArguments args) throws Exception {
   
   
        // 在启动时执行的逻辑
        System.out.println("应用程序启动时执行的方法");
    }
}

4、@PostConstruct 方式

@PostConstruct 注解是Java EE提供的一个标准注解,用于指定在构造函数执行完毕后立即执行的方法。在Spring Boot中,您可以在任何一个Bean中使用 @PostConstruct 注解来标记需要在启动时执行的方法。

使用代码如下:

package com.pany.camp.load;

import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;

/**
 *
 * @description: PostConstruct
 * @copyright: @Copyright (c) 2022
 * @company: Aiocloud
 * @author: pany
 * @version: 1.0.0
 * @createTime: 2023-07-06 22:07
 */
@Component
public class MyPostConstruct {
   
   

    @PostConstruct
    public void init() {
   
   
        // 在启动时执行的逻辑
        System.out.println("应用程序启动时执行的方法");
    }
}

5、ApplicationListener 方式

ApplicationListener 是 Spring Framework 提供的一个接口,用于监听应用程序中的事件并执行相应的逻辑。您可以实现 ApplicationListener 接口,并重写 onApplicationEvent 方法来处理特定的事件。

使用代码如下:

package com.pany.camp.load;

import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

/**
 *
 * @description: ApplicationListener
 * @copyright: @Copyright (c) 2022 
 * @company: Aiocloud
 * @author: pany
 * @version: 1.0.0 
 * @createTime: 2023-07-06 22:09
 */
@Component
public class MyEventListener implements ApplicationListener<ApplicationEvent> {
   
   

    @Override
    public void onApplicationEvent(ApplicationEvent event) {
   
   
        // 在这里处理特定的事件逻辑
        System.out.println("收到应用程序事件:" + event.toString());
    }
}

在上述示例中, MyEventListener 类实现了 ApplicationListener 接口,并指定了泛型参数为 ApplicationEvent ,表示监听所有类型的应用程序事件。您可以根据实际需求,将泛型参数指定为特定的事件类型。

当应用程序触发事件时, onApplicationEvent 方法会被调用,并传入相应的事件对象。您可以在该方法中编写处理事件的逻辑。

要注意的是,为了让 Spring Boot 自动注册 MyEventListener ,需要将其标记为 @Component 或使用其他方式将其纳入 Spring 容器的管理范围。

6、@EventListener 方式

@EventListener 注解可以用于监听 Spring 应用程序中的各种事件,包括启动事件。当应用程序启动时,带有 @EventListener 注解的方法会被自动触发。

使用代码如下:

package com.pany.camp.load;

import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;

/**
 *
 * @description:  @EventListener
 * @copyright: @Copyright (c) 2022 
 * @company: Aiocloud
 * @author: pany
 * @version: 1.0.0 
 * @createTime: 2023-07-06 22:11
 */
@Component
public class MyEventListenerExample {
   
   

    @EventListener
    public void handleContextRefresh(ContextRefreshedEvent event) {
   
   
        // 在这里添加应用程序启动时的逻辑
        System.out.println(" @EventListener 应用程序已启动!" + event.toString());
    }
}

上述示例中, handleContextRefresh 方法被标记为 @EventListener ,并指定了 ContextRefreshedEvent 类型的事件。当应用程序启动并完成刷新时,该方法会被自动触发。

您可以在 handleContextRefresh 方法中添加应用程序启动时需要执行的逻辑。例如,您可以初始化一些数据、启动定时任务等。

请注意,为了让 Spring Boot 自动注册 MyApplication 类中的事件监听器,需要将其标记为 @SpringBootApplication 或使用其他方式将其纳入 Spring 容器的管理范围。

💕💕 本文由激流原创,原创不易,感谢支持
💕💕喜欢的话记得点赞收藏啊
1687869804912.jpg

目录
相关文章
|
人工智能 前端开发 JavaScript
SpringBoot实现网页消息推送的5种方法
本文详细介绍了在SpringBoot中实现网页消息推送的几种主流方案,包括短轮询、长轮询、SSE(Server-Sent Events)、WebSocket以及STOMP。每种方案各有优缺点,适用于不同的场景需求。短轮询简单易实现但效率低;长轮询提升了实时性但仍有限制;SSE适合单向通信且轻量高效;WebSocket支持全双工通信,适合高实时性要求的场景;STOMP基于WebSocket,提供更高级的消息传递功能。通过对比分析,开发者可根据业务需求、性能要求及浏览器兼容性选择最适合的技术方案,同时可结合多种技术实现优雅降级,优化用户体验。
2232 57
|
Java Spring
【Spring】方法注解@Bean,配置类扫描路径
@Bean方法注解,如何在同一个类下面定义多个Bean对象,配置扫描路径
725 73
|
人工智能 自然语言处理 Java
Spring 集成 DeepSeek 的 3大方法(史上最全)
DeepSeek 的 API 接口和 OpenAI 是兼容的。我们可以自定义 http client,按照 OpenAI 的rest 接口格式,去访问 DeepSeek。自定义 Client 集成DeepSeek ,可以通过以下步骤实现。步骤 1:准备工作访问 DeepSeek 的开发者平台,注册并获取 API 密钥。DeepSeek 提供了与 OpenAI 兼容的 API 端点(例如),确保你已获取正确的 API 地址。
Spring 集成 DeepSeek 的 3大方法(史上最全)
|
缓存 安全 Java
深入解析HTTP请求方法:Spring Boot实战与最佳实践
这篇博客结合了HTTP规范、Spring Boot实现和实际工程经验,通过代码示例、对比表格和架构图等方式,系统性地讲解了不同HTTP方法的应用场景和最佳实践。
1167 5
|
Java Spring 容器
两种Spring Boot 项目启动自动执行方法的实现方式
在Spring Boot项目启动后执行特定代码的实际应用场景中,可通过实现`ApplicationRunner`或`CommandLineRunner`接口完成初始化操作,如系统常量或配置加载。两者均支持通过`@Order`注解控制执行顺序,值越小优先级越高。区别在于参数接收方式:`CommandLineRunner`使用字符串数组,而`ApplicationRunner`采用`ApplicationArguments`对象。注意,`@Order`仅影响Bean执行顺序,不影响加载顺序。
1026 2
|
缓存 NoSQL Java
springboot怎么使用rides缓存方法的返回值 完整例子
通过上述步骤,我们成功地在 Spring Boot 项目中集成了 Redis 缓存,并通过注解的方式实现了方法返回值的缓存。这种方式不仅提高了系统的性能,还简化了缓存管理的复杂度。使用 Spring Boot 的缓存注解和 Redis,可以轻松地实现高效、可靠的缓存机制。
399 23
|
监控 IDE Java
如何在无需重新启动服务器的情况下在 Spring Boot 上重新加载我的更改?
如何在无需重新启动服务器的情况下在 Spring Boot 上重新加载我的更改?
1650 8
|
前端开发 Java Spring
Spring MVC源码分析之DispatcherServlet#getHandlerAdapter方法
`DispatcherServlet`的 `getHandlerAdapter`方法是Spring MVC处理请求的核心部分之一。它通过遍历预定义的 `HandlerAdapter`列表,找到适用于当前处理器的适配器,并调用适配器执行具体的处理逻辑。理解这个方法有助于深入了解Spring MVC的工作机制和扩展点。
221 1
|
前端开发 Java Spring
Spring MVC源码分析之DispatcherServlet#getHandlerAdapter方法
`DispatcherServlet`的 `getHandlerAdapter`方法是Spring MVC处理请求的核心部分之一。它通过遍历预定义的 `HandlerAdapter`列表,找到适用于当前处理器的适配器,并调用适配器执行具体的处理逻辑。理解这个方法有助于深入了解Spring MVC的工作机制和扩展点。
268 1
|
前端开发 Java Spring
Spring MVC源码分析之DispatcherServlet#getHandlerAdapter方法
`DispatcherServlet`的 `getHandlerAdapter`方法是Spring MVC处理请求的核心部分之一。它通过遍历预定义的 `HandlerAdapter`列表,找到适用于当前处理器的适配器,并调用适配器执行具体的处理逻辑。理解这个方法有助于深入了解Spring MVC的工作机制和扩展点。
232 0