当前位置: 首页 > news >正文

网站建设与管理工资/可以入侵的网站

网站建设与管理工资,可以入侵的网站,wordpress 相册 链接,金融网站建设方案文章目录 背景说明一、入门级:启动main方法中添加初始化逻辑二、黄金级:实现ApplicationRunner或CommandLineRunner接口三、大神级:ApplicationListener监听启动完成事件 背景说明 在我们使用Spring Boot进行项目开发时,偶尔会遇…

文章目录

  • 背景说明
  • 一、入门级:启动main方法中添加初始化逻辑
  • 二、黄金级:实现ApplicationRunner或CommandLineRunner接口
  • 三、大神级:ApplicationListener监听启动完成事件


背景说明

在我们使用Spring Boot进行项目开发时,偶尔会遇到在Spring Boot项目启动完成后需要执行一些初始化的逻辑,比如缓存预加载,数据库初始化等。 那么这种需求我们需要怎么实现呢?本文将提供3种方法供大家参考。


一、入门级:启动main方法中添加初始化逻辑

在Spring Boot的main入口启动方法中,执行SpringApplication.run(LimitApplication.class, args)是可以返回ApplicationContext对象的,我们可以从ApplicationContext中获取指定的bean对象,执行初始化逻辑。

@SpringBootApplication(scanBasePackages = {"com.laowan.limit"})
public class LimitApplication {public static void main(String[] args){//启动的run方法ApplicationContext context =  SpringApplication.run(LimitApplication.class, args);//启动执行操作:从context中获取指定的bean,调度初始化逻辑AService aService = (AService)context.getBean("AServiceImpl");aService.preLoadCache();}}

初始化逻辑:

@Service
public class AServiceImpl implements AService {@Overridepublic void preLoadCache(){System.out.println("应用启动完成:可以执行缓存预加载操作");}
}

二、黄金级:实现ApplicationRunner或CommandLineRunner接口

在Spring Boot框架中,给我们提供了ApplicationRunner和CommandLineRunner接口来帮助我们解决项目启动后的初始化资源操作。
如果有多个ApplicationRunner、CommandLineRunner的实现类,可以通过@Order注解进行排序,参数值越小越早执行。

实现CommandLineRunner接口:

@Order(1)
@Component
@Slf4j
public class CommandLineRunnerImpl implements CommandLineRunner {@Overridepublic void run(String... args) throws Exception {System.out.println("应用启动完成:执行CommandLineRunner方法完成资源初始化");}
}

实现ApplicationRunner接口:

@Order(2)
@Component
@Slf4j
public class ApplicationRunnerImpl implements ApplicationRunner {@Overridepublic void run(ApplicationArguments args) throws Exception {System.out.println("应用启动完成:执行ApplicationRunner方法完成资源初始化");}
}

启动方法:

@SpringBootApplication(scanBasePackages = {"com.laowan.limit"})
public class LimitApplication {public static void main(String[] args){SpringApplication.run(LimitApplication.class, args);}
}

执行结果:

2023-06-01 10:50:20.158  INFO 24785 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2023-06-01 10:50:20.230  INFO 24785 --- [           main] com.laowan.limit.LimitApplication        : Started LimitApplication in 2.454 seconds (JVM running for 2.891)
应用启动完成:执行CommandLineRunner方法完成资源初始化
应用启动完成:执行ApplicationRunner方法完成资源初始化

源码分析:
在SpringApplication的run方法中,有这么一段核心代码

public ConfigurableApplicationContext run(String... args) {……
try {ApplicationArguments applicationArguments = new DefaultApplicationArguments(args);ConfigurableEnvironment environment = this.prepareEnvironment(listeners, bootstrapContext, applicationArguments);this.configureIgnoreBeanInfo(environment);Banner printedBanner = this.printBanner(environment);context = this.createApplicationContext();context.setApplicationStartup(this.applicationStartup);this.prepareContext(bootstrapContext, context, environment, listeners, applicationArguments, printedBanner);this.refreshContext(context);this.afterRefresh(context, applicationArguments);//通知所有监听器:spring boot已经启动完成listeners.started(context);//调用所有Runner方法,即CommandLineRunner和ApplicationRunnerthis.callRunners(context, applicationArguments);} catch (Throwable var10) {this.handleRunFailure(context, var10, listeners);throw new IllegalStateException(var10);}……  }      

三、大神级:ApplicationListener监听启动完成事件

通过源码,我们发现在Spring Boot启动过程中,框架内部定义了很多事件SpringApplicationEvent,用来通知SpringApplicationRunListener监听器,以针对各种事件执行对应的逻辑处理。而Spring Boot启动完成的事件对应的是ApplicationStartedEvent,我们可以通过自定义监听器来监听ApplicationStartedEvent事件,然后执行初始化资源的相关操作。

@Component
public class StartedEventListener implements ApplicationListener<ApplicationStartedEvent> {@Overridepublic void onApplicationEvent(ApplicationStartedEvent event) {System.out.println("应用启动完成,通知监听器执行缓存预加载操作");}
}
http://www.jmfq.cn/news/4788379.html

相关文章:

  • 此网站正在建设中/社交网络的推广方法有哪些
  • 辽宁响应式网站建设推荐/手机怎么在百度上发布信息
  • 毕业论文网站开发需要多少钱/8大营销工具指的是哪些
  • 网站设计介绍怎么写/网络推广推广
  • 山东省日照市有专业做网站的/长沙关键词优化方法
  • 迪虎科技网站建设/刚刚地震最新消息今天
  • 中国海关进出口信息查询/优化设计电子课本
  • wordpress邮箱如何解析/seo技术教程
  • 网站开发移动app/海外品牌推广
  • 做销售网站的好做么/seo入门教程视频
  • 上海网站建设费用多少/百度贴吧官网入口
  • 做网站跟app的区别/软文代发布
  • 监控视频怎么做直播网站/网站流量查询平台
  • 旅游找什么网站好/精准客源app
  • 网站建设公司武汉/品牌策略有哪些
  • 对视频播放网站做性能测试/抖音seo供应商
  • 电信网站备案流程图/蚁百杭州网站seo优化
  • 乐清 做网站 多少钱/百度有哪些app产品
  • 微信服务号菜单链接网站怎么做的/疫情放开最新消息今天
  • 学校html网站模板代码/淘宝关键词优化技巧
  • 做污事网站/想做电商怎么入手
  • 网站推广成功案例/中国百强企业榜单
  • 广州番禺服装网站建设/谷歌seo关键词优化
  • 湖南常德天气/seo排名优化厂家
  • 可以做fiting网站/网络营销策划书应该怎么写
  • 做视频的素材网站/网络营销案例
  • 大连金州网站建设/网站优化检测
  • 做网站写个人日志/可以发广告的平台
  • 做网站排名费用多少/有效的网络推广
  • 域名和网站/最新的全国疫情数据