Spring Boot实现在启动时执行一次的功能

这篇具有很好参考价值的文章主要介绍了Spring Boot实现在启动时执行一次的功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

方法一:@PostConstruct

此方法可能是最常用的

可以使用Spring Boot的@PostConstruct注解来实现在启动时执行一次的功能。@PostConstruct注解标记的方法会在Bean初始化完成后自动调用,可以在该方法中执行只需要在启动时执行一次的操作。

如果想在生成对象时完成某些初始化操作,而偏偏这些初始化操作又依赖于依赖注入,那么就无法在构造函数中实现。为此,可以使用@PostConstruct注解一个方法来完成初始化,@PostConstruct注解的方法将会在依赖注入完成后被自动调用。

Constructor >> @Autowired >> @PostConstruct

例如,在一个Spring Boot应用程序的启动类中添加一个@PostConstruct注解标记的方法:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import javax.annotation.PostConstruct;

@SpringBootApplication
public class MyApplication {

    @PostConstruct
    public void init() {
        // 在这里执行仅需在启动时执行一次的操作
    }

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

在以上示例代码中,init()方法被标记为@PostConstruct注解,表示它会在MyApplication Bean初始化完成后自动调用。在init()方法中可以执行只需要在启动时执行一次的操作,例如初始化一些数据、建立数据库连接等。

方法二:使用Spring Boot提供的CommandLineRunner接口或ApplicationRunner接口

此方法已经在项目中实践使用ok。

除了@PostConstruct注解,还可以使用Spring Boot提供的CommandLineRunner接口或ApplicationRunner接口来实现在启动时执行一次的功能。

这两个接口都有一个run()方法,在应用程序启动后会被自动调用。需要在该方法中实现需要在启动时执行的操作,例如初始化数据、开启定时任务等。

如果需要多个操作在启动时执行,可以定义多个实现了CommandLineRunner或ApplicationRunner接口的Bean,并通过@Order注解指定它们的执行顺序。

示例代码如下:

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

@Component
@Order(1) // 可以通过@Order注解指定执行顺序,数字越小越先执行
public class MyCommandLineRunner implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {
        // 在这里执行启动时需要执行的操作
    }
}

@Component
@Order(2)
public class MyApplicationRunner implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments args) throws Exception {
        // 在这里执行启动时需要执行的操作
    }
}

以上示例代码定义了两个Bean,分别是实现CommandLineRunner接口的MyCommandLineRunner和实现ApplicationRunner接口的MyApplicationRunner。它们的run()方法会在应用程序启动后自动调用,可以在这里实现需要在启动时执行的操作。其中,@Order注解用于指定它们的执行顺序,数字越小越先执行。

方法三:使用Spring Boot提供的ApplicationListener接口

此方法暂未实践

还可以使用Spring Boot提供的ApplicationListener接口来实现在应用程序启动时执行一次的功能。这个接口定义了监听Spring Boot应用程序事件的方法,当应用程序触发相应的事件时,监听器会自动调用相应的方法进行处理。

具体实现步骤如下:

创建一个实现ApplicationListener接口的类,例如MyApplicationListener。

实现onApplicationEvent()方法,在该方法中编写需要在启动时执行的操作,例如初始化数据、建立数据库连接等。

通过@Component注解或@Bean注解将MyApplicationListener注册成Spring Bean。

示例代码如下:

import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

@Component
public class MyApplicationListener implements ApplicationListener<ApplicationReadyEvent> {

    @Override
    public void onApplicationEvent(ApplicationReadyEvent event) {
        // 在这里执行启动时需要执行的操作
    }
}

以上示例代码创建了一个名为MyApplicationListener的Bean,并实现了ApplicationListener接口,用于监听ApplicationReadyEvent事件。在onApplicationEvent()方法中编写需要在启动时执行的操作。最后通过@Component注解将MyApplicationListener注册成Spring Bean。

当应用程序启动完成后,MyApplicationListener会自动监听到ApplicationReadyEvent事件并执行其中的代码。可以在这里实现需要在启动时执行一次的操作,确保其只在应用程序启动时执行一次。文章来源地址https://www.toymoban.com/news/detail-460754.html

到了这里,关于Spring Boot实现在启动时执行一次的功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring WebFlux 实现同一个方法在短时间内只执行一次

    要在 Spring WebFlux 中实现同一个方法在短时间内只执行一次,你可以使用一种常见的技术,即通过限制并发访问来保证只有一个请求能够执行。 以下是一种可能的实现方式: 使用 AtomicBoolean 进行标记:在你的方法中,声明一个 AtomicBoolean 类型的变量,用于标记方法是否已经在

    2024年02月16日
    浏览(36)
  • 【Spring Boot】Spring Boot实现完整论坛功能示例代码

    以下是一个简单的Spring Boot论坛系统示例代码: 首先是数据库设计,我们创建以下几张表: user表,存储用户信息,包括id、username、password、email、create_time等字段。 topic表,存储帖子信息,包括id、title、content、user_id、create_time等字段。 comment表,存储评论信息,包括id、con

    2024年02月11日
    浏览(37)
  • 月薪近万,工地转行测试,这一次的选择,真正实现了薪资翻倍~

    有很多朋友在面临转行时都会有这样一个问题,就是不知道自己是否能够胜任,总是存在疑虑和害怕。 其实大部分人在转行时都会有这个心态,但事实上,很多时候,需要尝试才知道自己究竟是否能够成功。 小马,从工地资料员,到成为一名软件测试工程师,短短三个月,

    2024年02月02日
    浏览(59)
  • Spring Boot项目实现无数据库启动

    今天需要创建一个不连接数据库的Spring Boot工程, 结果一切配置好后项目却启动失败, 提示如下: 查询了一下资料, 发现原来Spring Boot启动时是默认是要连接数据库的, 这样一来只需要把数据库的一些配置排除掉就可以了: 重新启动, 项目成功运行了。另外, pom.xml文件中也不要引入

    2024年02月15日
    浏览(51)
  • 《剑指 Offer》专项突破版 - 面试题 4 : 只出现一次的数字(C++ 实现)

    题目链接 :137. 只出现一次的数字 II - 力扣(LeetCode) 题目 : 输入一个整数数组,数组中只有一个数字出现了一次,而其他数字都出现了 3 次。请找出那个只出现一次的数字。例如,如果输入的数组为 [0, 1, 0, 1, 0, 1, 100],则只出现一次的数字是 100。 分析 : 这个题目有一个

    2024年02月02日
    浏览(44)
  • Spring Boot 实现审核功能,实战来了!

    1、普通 方案 :经办时入A表,审核后从A表读取数据,然后操作目标B表; 优势 :思路简单 劣势 :对后端功能实行高度的嵌入;审核功能数据操作不统一 2、弹框式 方案 :前台实现,操作时判断是否需要权限控制,如果需要,则弹出框,由审核人员进行审核,审核通过后,

    2024年02月08日
    浏览(42)
  • Java spring boot 实现批量删除功能

    根据前面的删除的功能的实现,现在我们来实现一个可以批量删除的功能,不懂删除功能的可以跳到主页去搜索Java删除的功能即可,这里就不多进行啰嗦,那么进入正题! 原理: 批量删除的原理是通过一个循环来遍历要删除的用户信息的ID数组,然后依次调用单个删除矿工

    2024年02月12日
    浏览(53)
  • Android前端+Spring Boot后端 登录功能实现

    创建项目后,自己添加包,框架如下   userController里的一些内容,只供参考,代码不全,无法实现 数据库是直接在社区版IDEA里连接Mysql,在控制台端创建的数据库和user表,用于数据交互。 Activity包里是Activity Java类,主要响应layout包里activity_login.xml等页面布局内的按钮响应 a

    2024年02月12日
    浏览(71)
  • Spring Boot实训项目 瑞吉外卖功能实现

    1 实训基本信息 1.1 实训项目名称 “外卖点餐”系统。 1.2 实训时间及地点 2 实训内容简介 本项目(“外卖点餐”系统)是专门为餐饮企业(餐厅、饭店)定制的-款软件产品,包括系统管理后台和移动端应用两部分。 其中系统管理后台主要提供给餐饮企业内部员工使用,可以对餐

    2024年02月07日
    浏览(58)
  • [Spring Boot]12 ElasticSearch实现分词搜索功能

    我们在使用搜索功能的时候,有时,为了使搜索的结果更多更广,比如搜索字符串“领导力”,希望有这些组合的结果(领导力、领导、领、导、力)都要能够全部展示出来。 这里我们引入ElasticSearch结合分词插件,来实现这样的搜索功能。 比如:一款app需要对“课程”进行

    2024年02月03日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包