我正在处理Spring 4.2.0.BUILD-SNAPSHOT事件,由于一些我还没有弄清楚的原因,监听器在发布任何事件(无论是从ApplicationEvent扩展还是任何任意事件)后触发了两次,但是在运行测试用例时一切都按预期工作,现在想知道Spring MVC上下文中的注释驱动事件发生了什么
事件发布界面
public interface ListingRegistrationService {
public void registerListing(ListingResource listing);
}
@Component
class ListingRegistrationServiceImpl implements ListingRegistrationService{
private final ApplicationEventPublisher publisher;
@Autowired
public ListingRegistrationServiceImpl(ApplicationEventPublisher publisher) {
this.publisher = publisher;
}
@Override
public void registerListing(ListingResource listing) {
//process
publisher.publishEvent(new ListingCreatedEvent(listing));
System.out.println("Event above...");
}
}
事件监听器
@EventListener
@Async
public void sendMailForSuggestedListing(Supplier<ListingResource> listingCreatedEvent) {
System.out.println("Event fired...");
}
终点/入口点
public ResponseEntity<ResponseStatus> registerListing(@RequestBody @Valid ListingResource listing,BindingResult result) throws URISyntaxException {
ResponseEntity<ResponseStatus> response = null;
listingService.registerListing(listing); // publish the event
response = ResponseEntity.created(new URI(""));
return response;
}
结果:事件触发…事件触发…以上事件。。
我确实怀疑EventListener bean注册了两次。您可以启用org.springframework.context.event。EventListenerMethodProcessor设置为跟踪级别,以检查此特定类发生了什么。
- 斯特凡·尼科尔
TRACE组织.Spring框架工作.上下文.事件事件侦听器方法处理器
它正在发生两次
12:02:32,878 DEBUG ntext.event.EventListenerMethodProcessor: 138 - 1 @EventListener methods processed on bean 'mailServiceImpl': [public void com.service.MailServiceImpl.sendMailForSuggestedListing(com.service.events.CreationEvent)]
12:02:32,878 DEBUG ntext.event.EventListenerMethodProcessor: 138 - 1 @EventListener methods processed on bean 'mailServiceImpl': [public void com.service.MailServiceImpl.sendMailForSuggestedListing(com.service.events.CreationEvent)]
12:02:32,878 TRACE ntext.event.EventListenerMethodProcessor: 132 - No @EventListener annotations found on bean class: class com.service.MetaServiceImpl
12:02:32,878 TRACE ntext.event.EventListenerMethodProcessor: 132 - No @EventListener annotations found on bean class: class com.service.MetaServiceImpl
Java配置
@Configuration
@ComponentScan(basePackages = {"com.**.domain",
"com.**.repositories", "com.**.service",
"com.**.security" })
@PropertySource(value = { "classpath:application.properties" })
public class ServiceConfig
Configuration
@EnableWebMvc
@EnableSwagger
@EnableSpringDataWebSupport
@EnableMongoRepositories("com.**.repositories")
@ComponentScan(basePackages = {"com.**.config","com.**.rest.controllers","com.**.rest.tokens"})
public class WebConfig extends WebMvcConfigurerAdapter {
@Configuration
@EnableMongoRepositories("com.**.**.repositories")
public class MongoRepositoryConfig extends AbstractMongoConfiguration
遇到过类似的情况——事件发布两次。
在我的案例中,根本原因是web中的web应用程序上下文配置错误。xml
:DispatcherServlet
与传递给servlet监听器的上下文xml文件相同。将DispatcherServlet
声明中的重复引用替换为空引用,如下所示:
如果不需要应用程序上下文层次结构,应用程序可以只配置“根”上下文,并将contextConfigLocation Servlet参数留空。
这为我解决了这个问题。
我有同样的问题。给我的。。。我注册了两次事件侦听器,因为我在一个配置类中覆盖了扫描的整个包路径
@ComponentScan( basePackages = {"my.root.package"} )
@Configuration
public class MyAppConfig {
//...
}
然后我在另一个配置类中手工添加了相同的eventListener bean,如下所示
@Configuration
public class SpringConfig {
...
// SomeEventListener was located @ my.root.package.event and had @Component annotation
@Bean
public SomeEventListener someEventListener() {
return new SomeEventListener();
}
...
}
导致其注册两次。
问题内容: 我有以下代码,但我的问题是该事件被触发了两次。我不知道是什么原因造成的。我怀疑是由供应商前缀引起的,但并非如此。即使我只离开,它仍然会开火两次。 CSS JS 问题答案: 对于您和,每个已转换的属性都会触发。 您可以在访问与事件关联的属性。 没有“ transition s end”事件,因此您可能需要一些技巧,例如仅过滤其中一个过渡属性的回调处理。例如: ps。没有浏览器会触发该事件
我部署了一个用Python2编写的服务。7使用AWS Lambda,它是关于从一些页面提取数据并将结果发送到web应用程序。该服务由AWS CloudWatch事件触发(固定速率为5分钟)。 但是,我发现有时服务会一次触发两次。我得到这个是因为有两个日志流打印了相同的数据和结果,但具有不同的Request estID。并且数据库有重复的数据,这表明两者都成功工作。看起来服务几乎无缘无故地同时触发了
我通过infinispan缓存添加了CacheEntryExpired侦听器的n实现。addListener()方法。 侦听器事件在条目过期时激发。问题是,每次事件触发两次。 我验证(使用调试器和cache.getListeners())缓存不包含我的同一个侦听器的两个实例。getListeners的结果是: 所以只有一个听众。侦听器实现接口: 一个实现看起来像: 但是从接口中删除@CacheEn
问题内容: 我尝试解除绑定click事件,但有时会触发两次,有时会触发5次!现在有点烦了! 来自的代码 更新 : 基本上我正在将以下代码 更多信息 : 这仅在我触发事件时发生,关闭模式对话框,然后使用其他对话框重新打开 数据结构: main.asp :负载> modal.asp :modal.asp包含上面的jquery +此页面上的两个div,其中包含panel1.asp和panel2.asp数
el-dropdown添加command事件,执行了两次,这是为什么? 查了别人的类似的两次触发问题,查文档证实,command为官方提供方法,不存在.native与二次同时被处罚的情况存在。
我有一个 Blob 存储容器,其中配置了事件网格触发器(Blob 已创建)。我正在通过数据工厂加载此 blob 存储文件,很多时候,许多文件可能会在一次尝试中出现在此 blob 中。也许我们可以举一个20个文件的例子。 好消息是我的事件网格触发器启动了,函数app被调用。然而,我发现有时对于同一个文件,事件网格触发器被触发了不止一次。 在这20个文件中,很少有文件非常大,比如300 MB,但其他文