springboot自定义事件发布及监听

自定义线程池

java 复制代码
@Configuration
public class MyThreadPool {
    //ThreadPoolTaskExecutor不会自动创建ThreadPoolExecutor,需要手动调initialize才会创建。如果@Bean就不需手动,会自动InitializingBean的afterPropertiesSet来调initialize
    @Bean("myExecutor")
    public Executor createJobExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        // 线程池活跃的线程数
        executor.setCorePoolSize(20);
        // 设置线程队列最大线程数
        executor.setMaxPoolSize(40);
        // 设置等待队列大小
        executor.setQueueCapacity(200);
        // 线程池维护线程所允许的空闲时间
        executor.setKeepAliveSeconds(60);
        // 线程前缀名称
        executor.setThreadNamePrefix("myExecutor---: ");
        executor.initialize();
        return executor;
    }
}

实体类

java 复制代码
public class StudentEvent extends ApplicationEvent{

	private String id;

	private String name;
	
	public StudentEvent(Object source, String id,String name) {
		super(source);
		this.id = id;
		this.name = name;
	}
}

事件发布

sevice层

java 复制代码
public interface StudentService {
	 void sendStudentEvent(String id, String name);
}

serviceImpl层

java 复制代码
@Service
public class StudentServiceImpl implements StudentService {
    @Autowired
    ApplicationEventPublisher eventPublisher;
	
	@Override
    @Async("myExecutor")
	public void sendStudentEvent(String id, String name){
		StudentEvent studentEvent = new StudentEvent(this,id,name);
		eventPublisher.publishEvent(studentEvent);
	}
}

事件监听

java 复制代码
@Component
public class MyStudentEventListener {

    @EventListener
    @Async("myExecutor")
    public void handleStudentEvent(StudentEvent studentEvent) {
        // 处理事件
    }
}

监听器的执行顺序
如果应用程序中有多个事件监听器,可以通过@Order 注解,指定它们的执行顺序。例如:

java 复制代码
@Component
public class MyEventListener1 {

    @EventListener
    @Order(1)
    public void handleEvent(MyEvent event) {
        // 处理事件
    }
}

@Component
public class MyEventListener2 {

    @EventListener
    @Order(2)
    public void handleEvent(MyEvent event) {
        // 处理事件
    }
}

监听器的条件

只想在特定条件下才执行事件监听器,可以使用 @ConditionalOnProperty 注解:

java 复制代码
@Component
@ConditionalOnProperty(name = "myapp.event.listener.enabled", havingValue = "true")
public class MyEventListener {

    @EventListener
    public void handleEvent(MyEvent event) {
        // 处理事件
    }
}

参考博客:https://blog.csdn.net/albert_xjf/article/details/131326148

相关推荐
win x6 分钟前
JavaSE(基础)高频面试点及 知识点
java·面试·职场和发展
Terio_my7 分钟前
简要 Java 面试题学习
java·开发语言·学习
好好研究35 分钟前
Spring Boot - Thymeleaf模板引擎
java·spring boot·后端·thymeleaf
爬山算法36 分钟前
Hibernate(76)如何在混合持久化环境中使用Hibernate?
java·后端·hibernate
编程彩机38 分钟前
互联网大厂Java面试:从分布式缓存到消息队列的技术场景解析
java·redis·面试·kafka·消息队列·微服务架构·分布式缓存
她说..42 分钟前
策略模式+工厂模式实现单接口适配多审核节点
java·spring boot·后端·spring·简单工厂模式·策略模式
csdn_aspnet1 小时前
ASP.NET 8 - Cookie 身份验证
后端·asp.net·cookie·.net8
坚持就完事了1 小时前
Java的OOP
java·开发语言
笔画人生1 小时前
Cursor + 蓝耘API:用自然语言完成全栈项目开发
前端·后端
像少年啦飞驰点、1 小时前
零基础入门 Spring Boot:从“Hello World”到可部署微服务的完整学习路径
java·spring boot·微服务·编程入门·后端开发