springboot开启一个监听线程执行任务
public class StartApplicationListener implements ApplicationListener<ContextRefreshedEvent> { @Override public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { ApplicationContext applicationContext = contextRefreshedEvent.getApplicationContext(); ApplicationContext parent = applicationContext.getParent(); if (parent == null) { CacheManager cacheManager = applicationContext.getBean(CacheManager.class); Cache cache = cacheManager.getCache(MsConstants.NODE_CACHE_NAME); new Thread(new Runnable() { @Override public void run() { //代码 } }).start(); } }
public static void main(String[] args) { SpringApplication app = new SpringApplication(FigureServerApplication.class); app.addListeners(new StartApplicationListener()); app.run(args); }
springboot中监听事件的创建流程
在Spring Boot项目中,您可以使用注解@Async来实现异步处理,而事件监听有同步和异步两种方式可供选择。
事件的大体步骤
1:定义一个事件。
2: 创建一个监听器。
3:确保监听器在容器内。
4:发布事件,进行测试。
废话不多说,简单叙述几个不同方式的demo。
首先,我们先创建一个springboot项目。
第一种
1:定义一个事件,需要继承ApplicationEvent
public class MyEvent extends ApplicationEvent { public MyEvent(Object source) { super(source); System.out.println("我是一个事件,目前在事件的构造器内"); } }
2:创建一个监听器。直接实现ApplicationListener接口,重写其中onApplicationEvent方法.
public class MyEventListener implements ApplicationListener<MyEvent> { @Override public void onApplicationEvent(MyEvent event) { System.out.println("现在开始执行监听器中的内容,我是直接实现ApplicationListener接口的方式进行的"); System.out.println("event.getSource() = " + event.getSource()); } }
3:将监听器手动添加进应用容器内,并进行发布事件。
@SpringBootApplication public class EventTestApplication { public static void main(String[] args) { // SpringApplication.run(EventTestApplication.class, args); //第一种:自己手动将监听器添加到application中 SpringApplication application = new SpringApplication(EventTestApplication.class); //添加监听器 application.addListeners(new MyEventListener()); ConfigurableApplicationContext context = application.run(args); //进行发布事件 context.publishEvent(new MyEvent("Event数据源")); context.close(); } }
4:启动主启动类,进行打印测试。
第二种
1:同第一种的1
2:创建一个监听器。
/** *第二种:打上Compoent注解, 将事件监听器自动加入到应用容器中 * 这种方式不需要手动加入到容器中。 * */ @Component public class MyEventListener2 implements ApplicationListener<MyEvent> { @Override public void onApplicationEvent(MyEvent event) { System.out.println("现在开始执行监听器中的内容,我是打Compoent注解的方式进行的"); System.out.println("event.getSource() = " + event.getSource()); } }
3:发布事件,后续进行启动类测试即可。
@SpringBootApplication public class EventTestApplication { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(EventTestApplication.class, args); //发布事件 context.publishEvent(new MyEvent("source")); context.close(); } }
第三种
全部采用注解的方式
1:同第一种的1
2:创建一个监听器。
/** *第三种:采用@EventListener注解的方式,不需要在类上实现ApplicationListener接口。 * 直接采用的是通过注解,将方法标识为一个监听器。 * */ @Component public class MyEventListener3 { @Async//异步注解。开启一个新线程。 去掉此注解则会变成同步监听。 @EventListener(classes = MyEvent.class) public void TestListener(MyEvent myEvent){ System.out.println("我是@EventListener注解的方式实现的监听器"); System.out.println("myEvent.getSource() = " + myEvent.getSource()); } }
3:发布事件,后续进行启动类测试即可。
@SpringBootApplication public class EventTestApplication { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(EventTestApplication.class, args); //发布事件 context.publishEvent(new MyEvent("source")); context.close(); } }
下面是代码的结构图:
以上是springboot怎么开启一个监听线程执行任务的详细内容。更多信息请关注PHP中文网其他相关文章!

Canal工作原理Canal模拟MySQLslave的交互协议,伪装自己为MySQLslave,向MySQLmaster发送dump协议MySQLmaster收到dump请求,开始推送binarylog给slave(也就是Canal)Canal解析binarylog对象(原始为byte流)MySQL打开binlog模式在MySQL配置文件my.cnf设置如下信息:[mysqld]#打开binloglog-bin=mysql-bin#选择ROW(行)模式binlog-format=ROW#配置My

前言SSE简单的来说就是服务器主动向前端推送数据的一种技术,它是单向的,也就是说前端是不能向服务器发送数据的。SSE适用于消息推送,监控等只需要服务器推送数据的场景中,下面是使用SpringBoot来实现一个简单的模拟向前端推动进度数据,前端页面接受后展示进度条。服务端在SpringBoot中使用时需要注意,最好使用SpringWeb提供的SseEmitter这个类来进行操作,我在刚开始时使用网上说的将Content-Type设置为text-stream这种方式发现每次前端每次都会重新创建接。最

一、手机扫二维码登录的原理二维码扫码登录是一种基于OAuth3.0协议的授权登录方式。在这种方式下,应用程序不需要获取用户的用户名和密码,只需要获取用户的授权即可。二维码扫码登录主要有以下几个步骤:应用程序生成一个二维码,并将该二维码展示给用户。用户使用扫码工具扫描该二维码,并在授权页面中授权。用户授权后,应用程序会获取一个授权码。应用程序使用该授权码向授权服务器请求访问令牌。授权服务器返回一个访问令牌给应用程序。应用程序使用该访问令牌访问资源服务器。通过以上步骤,二维码扫码登录可以实现用户的快

我们使用jasypt最新版本对敏感信息进行加解密。1.在项目pom文件中加入如下依赖:com.github.ulisesbocchiojasypt-spring-boot-starter3.0.32.创建加解密公用类:packagecom.myproject.common.utils;importorg.jasypt.encryption.pbe.PooledPBEStringEncryptor;importorg.jasypt.encryption.pbe.config.SimpleStrin

1.springboot2.x及以上版本在SpringBoot2.xAOP中会默认使用Cglib来实现,但是Spring5中默认还是使用jdk动态代理。SpringAOP默认使用JDK动态代理,如果对象没有实现接口,则使用CGLIB代理。当然,也可以强制使用CGLIB代理。在SpringBoot中,通过AopAutoConfiguration来自动装配AOP.2.Springboot1.xSpringboot1.xAOP默认还是使用JDK动态代理的3.SpringBoot2.x为何默认使用Cgl

知识准备需要理解ApachePOI遵循的标准(OfficeOpenXML(OOXML)标准和微软的OLE2复合文档格式(OLE2)),这将对应着API的依赖包。什么是POIApachePOI是用Java编写的免费开源的跨平台的JavaAPI,ApachePOI提供API给Java程序对MicrosoftOffice格式档案读和写的功能。POI为“PoorObfuscationImplementation”的首字母缩写,意为“简洁版的模糊实现”。ApachePOI是创建和维护操作各种符合Offic

1.首先新建一个shiroConfigshiro的配置类,代码如下:@ConfigurationpublicclassSpringShiroConfig{/***@paramrealms这儿使用接口集合是为了实现多验证登录时使用的*@return*/@BeanpublicSecurityManagersecurityManager(Collectionrealms){DefaultWebSecurityManagersManager=newDefaultWebSecurityManager();

一、定义视频上传请求接口publicAjaxResultvideoUploadFile(MultipartFilefile){try{if(null==file||file.isEmpty()){returnAjaxResult.error("文件为空");}StringossFilePrefix=StringUtils.genUUID();StringfileName=ossFilePrefix+"-"+file.getOriginalFilename(


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Dreamweaver CS6
视觉化网页开发工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),