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

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

我的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 + "]");

}

}

}

标签:java,spring,asynchronous

来源: https://codeday.me/bug/20191010/1886911.html

java同步变异步框架_java-如何使用Spring配置异步和同步事件发布者相关推荐

  1. java检查注入sql框架_Java:检查器框架

    java检查注入sql框架 我在JavaOne 2012上 了解的有趣的工具之一是Checker Framework . Checker Framework的网页之一 指出 ,Checker Fram ...

  2. java中的集合框架_JAVA中的集合框架(上)List

    第一节 JAVA中的集合框架概述 集合的概念,现实生活中:很多事物凑在一起就是一个集合:数学中的集合:具有相同属性事物的总体:JAVA中的集合:是一种工具类,就像是容器,储存任意数量的具有共同属性的对 ...

  3. 【重温SSM框架系列】2 - Spring配置数据源连接池(手动创建与配置)

    Spring配置数据源) 数据源(连接池概述) 自定义数据源(手动创建) 1. 导入Druid和mysql数据库驱动依赖包 2. 创建数据源对象并配置基本连接信息 使用JDBC操作数据库,打印user ...

  4. Zotero+OneDrive多平台在线同步完美解决方案(一):安装配置、云端同步文献数据

    1 下载安装 Zotero下载官网:软件下载界面 微软用户直接点击"Download",其他系统用户选择对应的安装包下载就可以 用什么浏览器打开就会显示对应的Zotero Conn ...

  5. Java自己封装mysql框架_java封装

    jar,war,ear区别及java基础杂七八 jar,war,earqu区别 这三种文件都可以看作是java的压缩格式,其实质是实现了不同的封装: jar--封装类war--封装web站点ear-- ...

  6. JAVA异步爬虫_Java 爬虫遇上数据异步加载,试试这两种办法!

    这是 Java 爬虫系列博文的第三篇,在上一篇 Java 爬虫遇到需要登录的网站,该怎么办? 中,我们简单的讲解了爬虫时遇到登录问题的解决办法,在这篇文章中我们一起来聊一聊爬虫时遇到数据异步加载的问题 ...

  7. java 搭建企业应用框架_java培训一般要学多久

    "Java就业薪资高薪,通过体系性的培训年收入就是20-30万",最近在接待学员的过程中发现很多机构打着高薪招募学员,其实Java培训出来的薪资有没有那么多高,肯定是有部分学员能达 ...

  8. java微信支付异步通知_Java中微信支付退款异步通知解码

    微信所有的支付结果都是加密处理的,他和订单支付成功的异步通知不一样. 他的基本返回是: SUCCESS 我们需要对req_info解码才能看到退款的明文 解码后会得到明文: 解密步骤如下: (1)对加 ...

  9. java搭建线程池框架_JAVA线程池经管及分布式HADOOP调剂框架搭建

    日常平凡的开辟中线程是个少不了的器材,比如tomcat里的servlet就是线程,没有线程我们如何供给多用户接见呢?不过很多刚开端接触线程的开辟攻城师却在这个上方吃了不少苦头.怎么做一套简便的线程开辟 ...

最新文章

  1. 中国联通备战5G MWC发布《Edge-Cloud平台架构及产业生态白皮书》
  2. asp.net动态添加控件学习
  3. 华为软件编程规范和范例 函数、过程
  4. PAT (Advanced Level) 1070. Mooncake (25)
  5. vue 混入对象_特性和混入不是面向对象的
  6. C# 托管资源和非托管资源(Dispose、析构函数)
  7. iOS自动布局进阶用法
  8. cesium广告牌_公路广告牌
  9. Origin绘制区间图,并添加折线
  10. LR学习笔记十 之 场景分析
  11. docfx daylybuild
  12. tagwriter汉化版_【NFC TagWriter by NXP电脑版下载2020】NFC TagWriter by NXP PC端最新版「含模拟器」...
  13. 腾讯云服务器购买与备案
  14. 2014-04-12腾讯实习生笔试题目及解析
  15. Trivy是CD流水线上面向容器的脆弱性扫描器
  16. 计算机毕业设计Java河南省农村多元化养老服务管理系统设计与实现(源码+系统+mysql数据库+lw文档)
  17. java不属于约束,【单选题】在Java中,以下哪个约束符可以用来定义成员常量()。 A. static B. finally C. abstract D. final...
  18. httpclient的两个重要的参数maxPerRoute及MaxTotal
  19. transition transform translate 之间的区别
  20. jsp报错500解决办法

热门文章

  1. 重磅!GitHub 全部源代码被泄露?
  2. 华为提出十大数学挑战!解出一个就是年薪百万!
  3. Mybatis 强大的结果映射器ResultMap
  4. 带来高收入的三大竞争力技巧,可以涨到40W了!
  5. Java中的即时编译(Just-in-time compilation)
  6. 状态图和活动图的区别
  7. SVN 服务器发送了意外的返回值(405 Method Not Allowed),在响应 “MKCOL” 的请求
  8. vmmem 内存占用高
  9. pytorch 单机多卡训练distributedDataParallel
  10. cv2.fillConvexPoly填充多边形