如何在Spring启动的时候执行一些操作

如何在Spring启动的时候执行一些操作

在Spring启动的时候执行一些操作有多种方式。你可以通过实现ApplicationRunner或者CommandLineRunner接口,在Spring Boot应用程序启动后执行特定操作。另外,你也可以使用@PostConstruct注解,在Spring Bean初始化后立即执行特定操作。此外,Spring Boot还提供了事件机制,你可以使用ApplicationListener接口或者@EventListener注解来监听应用程序的不同阶段,并在触发事件时执行相应的操作。

如果你需要处理复杂的命令行参数,建议使用ApplicationRunner;如果只需要简单地处理命令行参数,可以使用CommandLineRunner。通常情况下,根据实际需求选择合适的接口来实现即可。@PostConstruct注解适用于在Spring Bean初始化后立即执行一些必要的操作,例如初始化资源、建立连接、加载配置等。

使用 ApplicationRunner 或者 CommandLineRunner

实现 ApplicationRunnerCommandLineRunner 接口,这两个接口都定义了一个 run 方法,在 Spring Boot 应用程序启动后会执行该方法。

CommandLineRunner 示例:

@Component
public class MyRunner implements CommandLineRunner {@Overridepublic void run(String... args) throws Exception {// 在这里执行一些操作}
}

ApplicationRunner 示例:

@Component
public class MyApplicationRunner implements ApplicationRunner {@Overridepublic void run(ApplicationArguments args) throws Exception {List<String> nonOptionArgs = args.getNonOptionArgs();Set<String> optionNames = args.getOptionNames();// 处理命令行参数}
}

它们的区别在于,ApplicationRunner 接口的 run 方法接受一个 ApplicationArguments 参数,
该对象包含应用程序启动时传递的命令行参数。例如 getOptionNames()getOptionValues(String name) 等。适合处理复杂的命令行参数,例如选项和参数值的组合,以及非标准的参数格式。

CommandLineRunner 接口的 run 方法接受一个字符串数组参数。该数组包含应用程序启动时传递的命令行参数。适合处理简单的命令行参数,例如单个参数或标志。

如果你需要处理复杂的命令行参数,建议使用 ApplicationRunner;如果只需要简单地处理命令行参数,可以使用 CommandLineRunner。通常情况下,根据实际需求选择合适的接口来实现即可。

使用 @PostConstruct 注解

@PostConstruct 注解用于在 Spring Bean 初始化之后执行特定的操作。它通常用于执行一些需要在 Bean 初始化后立即执行的任务,例如初始化资源、建立连接、加载配置等。

@PostConstruct 注解的使用场景:

  1. 初始化资源@PostConstruct 注解可以用于标记一个方法,在 Spring 容器实例化 Bean 并设置好属性之后立即执行该方法。这样可以确保在使用 Bean 之前进行一些必要的初始化工作,例如初始化资源文件、预加载数据等。

    @Component
    public class MyBean {private Resource resource;@PostConstructpublic void init() {// 初始化资源resource = new Resource();}public Resource getResource() {return resource;}
    }
    
  2. 建立连接:在某些情况下,需要在 Bean 初始化后建立一些连接,例如数据库连接、消息队列连接等。可以使用 @PostConstruct 注解来执行这些连接操作,确保在 Bean 使用之前连接已经建立成功。

    @Component
    public class DatabaseConnector {private Connection connection;@PostConstructpublic void init() {// 建立数据库连接connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "username", "password");}public Connection getConnection() {return connection;}
    }
    
  3. 加载配置@PostConstruct 注解也可以用于加载一些配置信息,确保在使用 Bean 之前配置已经加载完毕。这样可以避免在使用 Bean 时还需要手动加载配置的问题。

    @Component
    public class AppConfig {private Properties properties;@PostConstructpublic void init() {// 加载配置文件properties = new Properties();try {properties.load(getClass().getClassLoader().getResourceAsStream("config.properties"));} catch (IOException e) {e.printStackTrace();}}public String getProperty(String key) {return properties.getProperty(key);}
    }
    

使用 Spring Boot 事件机制

Spring Boot 提供了事件机制,可以监听应用程序的不同阶段,并在触发事件时执行相应的操作。你可以实现 ApplicationListener 接口,然后监听 ApplicationStartedEvent 或其他事件。

@Component
public class MyApplicationListener implements ApplicationListener<ApplicationStartedEvent> {@Overridepublic void onApplicationEvent(ApplicationStartedEvent event) {// 在这里执行一些操作}
}

使用 @EventListener 注解

可以使用 @EventListener 注解在方法上监听 Spring 事件,并在事件发生时执行方法。需要注意的是,被注解的方法必须是公共方法。

@Component
public class MyEventListener {@EventListenerpublic void handleContextRefresh(ContextRefreshedEvent event) {// 在这里执行一些操作}
}

参考链接:

  • Spring Boot Docs - ApplicationRunner
  • Spring Boot Docs - CommandLineRunner
  • Spring Boot Docs - @PostConstruct
  • Spring Boot Docs - Events and Listeners

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/706600.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Dubbo配置上的一些概念

对于dubbo在spring中我们可能看到有如下配置&#xff08;可参考Schema 配置参考手册 | Apache Dubbo&#xff09;&#xff1a; dubbo:application:id: dubbo-account-examplename: dubbo-account-example# 是否启用 Dubbo 的 QoS&#xff08;Quality of Service&#xff09;服…

【Fastadmin】自定义404页面

1.修改config.php // 文件路径&#xff1a;application/config.php// 自定义错误码模板http_exception_template > [// 定义404错误的模板渲染404 > APP_PATH . common/view/404/404.html,], 2.需要把debug关闭才能生效 在.env文件中把debug true&#xff0c;改为…

在springboot项目中自定义404页面

今天点击菜单的时候不小心点开了一个不存在的页面&#xff0c;然后看到浏览器给的一个默认的404页面 后端的程序员都觉得这页面太丑了&#xff0c;那么怎么能自定义404页面呢&#xff1f; 很简单&#xff0c;在我们的springboot的静态资源目录下创建一个error包&#xff0c;然…

UL认证储能电表工商业储能智能计量电表ADL3000-E-B/KC

◉概述 ADL3000-E-B 导轨式多功能电能表&#xff0c;是主要针对电力系统&#xff0c;工矿企业&#xff0c;公用设施的电能统计、管理需求而设计的一款智能仪表&#xff0c;产品具有精度高、体积小、安装方便等优点。集成常见电力参数测量及电能计量及考核管理&#xff0c;提供…

LangChain搭建Agent | 使用initialize_agent

1.create_tool_calling_agent 构建agent&#xff0c;这个方法是过时了吗&#xff1f;官方文档也没更新&#xff0c;官方示例也运行错误 from langchain_core.prompts import ChatPromptTemplate from langchain_core.runnables import ConfigurableField from langchain_core…

ES6中数组新增了哪些扩展?

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;JavaScript篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:ES6中数组新增了哪些扩展&#xff1f; 目录 一、扩展运算符的应用 二、构造函数新…

(2)双指针练习:复写零

复写零 题目链接&#xff1a;1089. 复写零 - 力扣&#xff08;LeetCode&#xff09; 给你一个长度固定的整数数组 arr &#xff0c;请你将该数组中出现的每个零都复写一遍&#xff0c;并将其余的元素向右平移。 注意&#xff1a;请不要在超过该数组长度的位置写入元素。请对输入…

oppo手机怎样录屏?新手必看指南来了

“有人知道oppo手机怎样录屏吗&#xff1f;刚刚换了新款的oppo手机&#xff0c;它的屏幕显示效果和性能都让我感到非常满意&#xff0c;但是在尝试使用录屏功能时遇到了些困难&#xff0c;找了半天都没找到正确的开启方式&#xff0c;有没有哪位oppo手机用户知道如何打开录屏功…

美港通正规炒股市场沪指收跌0.82% 证券板块调整

5月15日电 15日,A股三大指数集体下挫。上证指数跌0.82%,报3119.9点;深证成指跌0.88%,报9583.54点;创业板指跌0.9%,报1838.89点。沪深京三市成交额7651亿元,其中沪深两市7611亿元,较上日缩量635亿元。沪深两市超3800只个股下跌。 美港通证券以其专业的服务和较低的管理费用在市…

后台菜单数据递归展示

后台菜单数据递归展示 效果示例图aslide.vueaslideItem.vuemenu 效果示例图 aslide.vue <script setup>import {ref} from vue;const props defineProps({isCollapse: {type: Boolean,default: false}});import AslideItem from "./aslideItem.vue"const def…

IntelliJ IDEA 配置JDK

IntelliJ IDEA-之配置JDK 我们的开发神器IDEA安装好了之后&#xff0c;在实际开发中&#xff0c;我们如何去配置好JDK的版本呢&#xff1f; 注意&#xff1a;需要保证JDK在已经成功安装的情况下&#xff0c;再进行IDEA的配置 现在就行动&#xff0c;让IntelliJ IDEA成为你征…

Nginx启动关闭重启用脚本实现

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 Nginx(“engine x”…