package com.tutego.ch_03.eventHandling;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.event.ApplicationEventMulticaster;
import org.springframework.context.event.SimpleApplicationEventMulticaster;
import org.springframework.core.task.SimpleAsyncTaskExecutor;
import org.springframework.scheduling.support.TaskUtils;


@Configuration
public class EventMultiCasterConfiguration {

    @Bean /* name of the bean actually matters!!! */
    public ApplicationEventMulticaster applicationEventMulticaster() {
        var multicaster = new SimpleApplicationEventMulticaster();
        // with this multicaster all event handlers are being called asynchronously by default, without using the @Async
        multicaster.setTaskExecutor(new SimpleAsyncTaskExecutor());
        multicaster.setErrorHandler(TaskUtils.LOG_AND_PROPAGATE_ERROR_HANDLER);
        return multicaster;
    }
}