Spring Boot Events

Spring has events that can help facility functionalities of your application such as sending emails, calling a third party API, or processing an event asynchronously. The design pattern publisher and subscribers is exactly what spring boot events are.

First, create a spring event

To create a spring event, your event class has to extend the spring ApplicationEvent class. Here is an example of UserCreateEvent.

public class UserCreateEvent extends ApplicationEvent {
	
	private Logger log = LoggerFactory.getLogger(this.getClass());
	
	public UserCreateEvent(User user) {
		super(user);
		log.info("UserCreateEvent, user={}", ObjectUtils.toJson(user));
	}

}

Second, create a publisher

A publisher has to be a spring bean. A publisher has to have a ApplicationEventPublisher field. You can create a method to call the publishEvent method on the ApplicationEventPublish class. Here is an example of a publisher.

@Component
public class UserEventPublisher {
	
	private Logger log = LoggerFactory.getLogger(this.getClass());

	@Autowired
    private ApplicationEventPublisher applicationEventPublisher;
	
	public void processUserCreate(User user) {
		
		UserCreateEvent userEvent = new UserCreateEvent(user);
		log.info("processUserCreate, userEvent={}",ObjectUtils.toJson(userEvent));
		
		applicationEventPublisher.publishEvent(userEvent);
	}
}

Lastly, create a listener

A spring event listener must be a spring bean. Anotate the event listener with @EventListener. There can be multiple listeners for an event. Listeners are by default synchronous. You can make listeners asychronous by adding @Async the method. Here is an example of a spring event listener.

@Component
public class UserEventListener{
	
	private Logger log = LoggerFactory.getLogger(this.getClass());

	
	@Async
    @EventListener
    public void handleUserCreateEvent(UserCreateEvent createEvent) {
		log.info("handleUserCreateEvent, event={}",ObjectUtils.toJson(createEvent));
    }
}

Source code in Github




Subscribe To Our Newsletter
You will receive our latest post and tutorial.
Thank you for subscribing!

required
required


Leave a Reply

Your email address will not be published. Required fields are marked *