如何使用Spring配置异步和同步事件发布者

用户名

我正在尝试使用spring事件实现事件框架。我知道spring事件框架的默认行为是sync。但是在春季上下文初始化期间,如果它找到ID为applicationEventMulticaster的bean,则其行为为Async。

现在,我希望在我的应用程序中同时具有同步和异步事件发布者,因为某些事件需要同步发布。我尝试使用SysncTaskExecutor配置同步事件多播程序,但找不到将其注入到AsyncEventPublisher的applicationEventPublisher属性中的方法。我的spring配置文件如下

<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor" destroy-method="shutdown">
        <property name="corePoolSize" value="5" />
        <property name="maxPoolSize" value="10" />
        <property name="WaitForTasksToCompleteOnShutdown" value="true" />
    </bean>  

    <bean id="syncTaskExecutor" class="org.springframework.core.task.SyncTaskExecutor" />

    <bean id="customEventPublisher" class="x.spring.event.CustomEventPublisher" />
    <bean id="customEventHandler" class="x.spring.event.CustomEventHandler" />  
    <bean id="eventSource" class="x.spring.event.EventSource" /> 
    <bean id="responseHandler" class="x.spring.event.ResponseHandler" /> 
    <bean id="syncEventSource" class="x.spring.event.syncEventSource" /> 


    <bean id="applicationEventMulticaster" class="org.springframework.context.event.SimpleApplicationEventMulticaster">
        <property name="taskExecutor" ref="taskExecutor" />         
    </bean>    

    <bean id="syncApplicationEventMulticaster" class="org.springframework.context.event.SimpleApplicationEventMulticaster">
        <property name="taskExecutor" ref="syncTaskExecutor" />         
    </bean>    

有人可以帮我从这里出去吗 ?

zg_spring

不,您不能这样做,spring initApplicationEventMulticaster只能初始化一个,并且BeanName必须是applicationEventMulticaster。因此您可以选择以下执行器之一:

-org.springframework.core.task.SyncTaskExecutor

-org.springframework.core.task.SimpleAsyncTaskExecutor

-您自己的执行器:org.springframework.scheduling.concurrent.ThreadPoolTask​​Executor

无论如何,您都可以修改org.springframework.context.event.SimpleApplicationEventMulticaster以添加逻辑,然后可以控制是否需要同步/异步

    /**
 * Initialize the ApplicationEventMulticaster.
 * Uses SimpleApplicationEventMulticaster if none defined in the context.
 * @see org.springframework.context.event.SimpleApplicationEventMulticaster
 */
protected void initApplicationEventMulticaster() {
    ConfigurableListableBeanFactory beanFactory = getBeanFactory();
    if (beanFactory.containsLocalBean(APPLICATION_EVENT_MULTICASTER_BEAN_NAME)) {
        this.applicationEventMulticaster =
                beanFactory.getBean(APPLICATION_EVENT_MULTICASTER_BEAN_NAME, ApplicationEventMulticaster.class);
        if (logger.isDebugEnabled()) {
            logger.debug("Using ApplicationEventMulticaster [" + this.applicationEventMulticaster + "]");
        }
    }
    else {
        this.applicationEventMulticaster = new SimpleApplicationEventMulticaster(beanFactory);
        beanFactory.registerSingleton(APPLICATION_EVENT_MULTICASTER_BEAN_NAME, this.applicationEventMulticaster);
        if (logger.isDebugEnabled()) {
            logger.debug("Unable to locate ApplicationEventMulticaster with name '" +
                    APPLICATION_EVENT_MULTICASTER_BEAN_NAME +
                    "': using default [" + this.applicationEventMulticaster + "]");
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

同步提交发布者

来自分类Dev

同步提交发布者

来自分类Dev

在SwiftUI中异步更新后如何触发发布者?

来自分类Dev

发布/订阅中的发布者应该是同步的还是异步的?

来自分类Dev

Spring AMQP确认如何配置“端到端”发布者

来自分类Dev

如何在发布者中获得事件的响应?

来自分类Dev

如何设置Spring Amqp发布者确认并退货?

来自分类Dev

Spring AMQP中的“发布者退货”如何发生/工作?

来自分类Dev

如何从两个发布者A和B创建一个Swift Combine发布者,其中发布者B消耗发布者A的价值?

来自分类Dev

ZeroMQ:如何使用C <C11使用多个发布者和一个客户端

来自分类Dev

使用app.setLoginItemSettings({openAtLogin:true})时如何更改自动启动名称,发布者和图标

来自分类Dev

Spring RabbitTemplate-如何在发布者确认模式下保留NACK的已发布消息

来自分类Dev

合并:如何取消flatMap的发布者

来自分类Dev

当发布者线程数比使用者数高得多时,Spring Reactor会受益

来自分类Dev

如何从广播的Akka流中获取订阅者和发布者?

来自分类Dev

Swift Combine-如何获取发布者,该发布者为UITextField的text属性的每个字符更改提供事件

来自分类Dev

使用发布者的通用集合时,C#订阅事件

来自分类Dev

当发布者和处理者是同一对象时,我应该取消订阅事件吗?

来自分类Dev

ASP.NET Web Api的事件发布者

来自分类Dev

Jenkins中的ZMQ事件发布者未发送通知

来自分类Dev

opentok:发布者和订阅者视频显示相同

来自分类Dev

nanomsg (nng) 中的多个发布者和订阅者

来自分类Dev

我如何默认将发布者证书安装到“受信任的发布者”中?

来自分类Dev

在其他发布者的地图中使用发布者的结果

来自分类Dev

如何等待多个Flux和Mono发布者同时完成

来自分类Dev

如何等待多个Flux和Mono发布者同时完成

来自分类Dev

如何使连续发布价值的合并发布者?

来自分类Dev

使用$ .deferred作为发布者/订阅者?

来自分类Dev

当发布者的失败类型不相等时,如何使用CombineLates?

Related 相关文章

  1. 1

    同步提交发布者

  2. 2

    同步提交发布者

  3. 3

    在SwiftUI中异步更新后如何触发发布者?

  4. 4

    发布/订阅中的发布者应该是同步的还是异步的?

  5. 5

    Spring AMQP确认如何配置“端到端”发布者

  6. 6

    如何在发布者中获得事件的响应?

  7. 7

    如何设置Spring Amqp发布者确认并退货?

  8. 8

    Spring AMQP中的“发布者退货”如何发生/工作?

  9. 9

    如何从两个发布者A和B创建一个Swift Combine发布者,其中发布者B消耗发布者A的价值?

  10. 10

    ZeroMQ:如何使用C <C11使用多个发布者和一个客户端

  11. 11

    使用app.setLoginItemSettings({openAtLogin:true})时如何更改自动启动名称,发布者和图标

  12. 12

    Spring RabbitTemplate-如何在发布者确认模式下保留NACK的已发布消息

  13. 13

    合并:如何取消flatMap的发布者

  14. 14

    当发布者线程数比使用者数高得多时,Spring Reactor会受益

  15. 15

    如何从广播的Akka流中获取订阅者和发布者?

  16. 16

    Swift Combine-如何获取发布者,该发布者为UITextField的text属性的每个字符更改提供事件

  17. 17

    使用发布者的通用集合时,C#订阅事件

  18. 18

    当发布者和处理者是同一对象时,我应该取消订阅事件吗?

  19. 19

    ASP.NET Web Api的事件发布者

  20. 20

    Jenkins中的ZMQ事件发布者未发送通知

  21. 21

    opentok:发布者和订阅者视频显示相同

  22. 22

    nanomsg (nng) 中的多个发布者和订阅者

  23. 23

    我如何默认将发布者证书安装到“受信任的发布者”中?

  24. 24

    在其他发布者的地图中使用发布者的结果

  25. 25

    如何等待多个Flux和Mono发布者同时完成

  26. 26

    如何等待多个Flux和Mono发布者同时完成

  27. 27

    如何使连续发布价值的合并发布者?

  28. 28

    使用$ .deferred作为发布者/订阅者?

  29. 29

    当发布者的失败类型不相等时,如何使用CombineLates?

热门标签

归档