Можно ли поддерживать синхронизацию и асинхронные события приложений в Spring[5]

<bean id="applicationEventMulticaster"
        class="com.test.listener.CustomApplicationEventMulticaster">
        <property name="taskExecutor" >
            <bean class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
                <property name="maxPoolSize" value="10"/>
                <property name="corePoolSize" value="10"/>
                <property name="waitForTasksToCompleteOnShutdown" value="true"/>
                <property name="awaitTerminationSeconds" value="200"/>
            </bean>
        </property>
    </bean>


public class CustomApplicationEventMulticaster extends SimpleApplicationEventMulticaster {
    
    @Override
    public void multicastEvent(final ApplicationEvent event, ResolvableType eventType) {
        
            boolean async = (event instanceof AbstractApplicationEvent) ? ((AbstractApplicationEvent) event).isAsyncEvent()
                    : true;
            final SecurityContext sc = SecurityContextHolder.getContext();
            ResolvableType defaultEventType = ResolvableType.forInstance(event);
            for (final ApplicationListener listener : getApplicationListeners(event, defaultEventType)) {
                Executor executor = getTaskExecutor();
                if (async && executor != null) {
                    executor.execute(() -> {
                            try {
                                SecurityContextHolder.setContext(sc);
                                listener.onApplicationEvent(event);
                            } finally {
                                SecurityContextHolder.clearContext();
                            }
                    });
                } else {
                    listener.onApplicationEvent(event);
                }
            }
        
    }

}

В приложении я пытаюсь запустить синхронизацию и асинхронное событие.

Это нормально делать?


person Zuned Ahmed    schedule 15.07.2020    source источник
comment
Когда вы публикуете событие, как вы указываете, хотите ли вы синхронное или асинхронное поведение?   -  person carduque    schedule 05.02.2021