Java 多次触发的BitBucket分支创建和删除事件
我正在开发一个BitBucket附加组件,用于通知用户存储库和分支事件。在测试分支事件时,我注意到delete和create事件被触发了不止一次(我没有听BranchChangedEvent)。据我所知,事件也是为继承的类触发的,并由下面所示的两个方法处理Java 多次触发的BitBucket分支创建和删除事件,java,events,bitbucket,branch,bitbucket-server,Java,Events,Bitbucket,Branch,Bitbucket Server,我正在开发一个BitBucket附加组件,用于通知用户存储库和分支事件。在测试分支事件时,我注意到delete和create事件被触发了不止一次(我没有听BranchChangedEvent)。据我所知,事件也是为继承的类触发的,并由下面所示的两个方法处理 @EventListener public void onBranchCreatedEvent(BranchDeletedEvent event) { //do something } @EventListener public v
@EventListener
public void onBranchCreatedEvent(BranchDeletedEvent event) {
//do something
}
@EventListener
public void onBranchCreatedEvent(BranchCreatedEvent event) {
//do something
}
有没有一个好的方法来处理这两个问题,而不跟踪已经处理的事情?我的要求是捕获创建/删除的分支的名称和相对URL 为了解决这个问题,我在类级别保留了@Component注释,如下所示,并在atlassian-plugin.xml文件中添加了组件注册
@Component
public class MyEventListener implements DisposableBean {
... ctor with injected EventPublisher eventPublisher
@EventListener
public void onBranchCreatedEvent(BranchDeletedEvent event) {
//do something
}
@EventListener
public void onBranchCreatedEvent(BranchCreatedEvent event) {
//do something
}
public void destroy() throws Exception {
eventPublisher.unregister(this);
}
}
atlassian-plugin.xml
<component key="bitbucket-activity-listener" class="my.package.name.MyEventListener">
</component>
别忘了从bitbucket maven插件下的pom.xml中删除Atlassian插件密钥标记
希望这有帮助。我是Bitbucket服务器开发人员之一。不清楚您是如何从发布的代码片段注册事件侦听器的。您的附加组件是如何打包的也不清楚,这一点也很重要 如果您有一个组件(无论是使用
@component
和spring scanner
创建的,还是使用atlassian plugin.xml
中的
标记创建的),您都不需要显式引用EventPublisher.register
或unregister
。Bitbucket服务器包括一个帮助程序,它在创建/销毁附加组件时检测@EventListener
注释,并自动处理它们的注册/注销。这意味着,如果使用EventPublisher
手动注册侦听器实例,它将注册两次,并接收两次每个事件
不过,另一种可能性是,您实际上最终注册了两个侦听器实例。您通常可以在调试器中轻松地“看到”这一点,方法是在@EventListener
方法中放置一个断点,并在每次命中断点时查看System.identityHashCode(this)
(其中this
是您的侦听器实例)。如果您从identityHashCode
获得多个结果,则表示您有多个实例。(如果您没有在侦听器上重写toString()
,您还应该能够使用它来确定您是否有多个实例,因为默认实现将标识hashcode作为十六进制字符包含。)我已经帮助其他插件开发人员解决了他们有多个侦听器实例的问题;比如,。这条线索可能对你也有用
如果您想分享有关附加组件的更多详细信息,我很乐意帮助您进一步调查。您不知道正在处理的Bitbucket服务器的版本,这使得帮助变得更加困难。不过,你不需要这样做。通过从pom.xml中删除“Atlassian Plugin Key”,您将从预转换的插件切换到已转换的插件。这意味着您的@Component注释被忽略,创建侦听器的唯一原因是您在atlassian-plugin.xml中添加了。