diff --git a/example/example-application/pom.xml b/example/example-application/pom.xml
index ed61908c..c61d2469 100644
--- a/example/example-application/pom.xml
+++ b/example/example-application/pom.xml
@@ -5,7 +5,7 @@
springboot-example
com.codingapi.springboot
- 3.3.5
+ 3.3.6
4.0.0
diff --git a/example/example-application/src/main/java/com/codingapi/example/handler/CHandler.java b/example/example-application/src/main/java/com/codingapi/example/handler/CHandler.java
index a52132c0..b1d2cba3 100644
--- a/example/example-application/src/main/java/com/codingapi/example/handler/CHandler.java
+++ b/example/example-application/src/main/java/com/codingapi/example/handler/CHandler.java
@@ -15,7 +15,7 @@ public void handler(CEvent event) {
log.info("c event:{},eventKey:{}", event, EventTraceContext.getInstance().getEventKey());
// EventPusher.push(new AEvent());
- throw new RuntimeException("c handler error");
+// throw new RuntimeException("c handler error");
}
@Override
diff --git a/example/example-application/src/main/java/com/codingapi/example/handler/GlobalEventHandler.java b/example/example-application/src/main/java/com/codingapi/example/handler/GlobalEventHandler.java
new file mode 100644
index 00000000..eaa77ff2
--- /dev/null
+++ b/example/example-application/src/main/java/com/codingapi/example/handler/GlobalEventHandler.java
@@ -0,0 +1,16 @@
+package com.codingapi.example.handler;
+
+import com.codingapi.springboot.framework.event.IEvent;
+import com.codingapi.springboot.framework.event.IHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class GlobalEventHandler implements IHandler {
+
+ @Override
+ public void handler(IEvent event) {
+ log.info("global event:{}", event);
+ }
+}
diff --git a/example/example-application/src/main/java/com/codingapi/example/handler/Test2Handler.java b/example/example-application/src/main/java/com/codingapi/example/handler/Test2Handler.java
new file mode 100644
index 00000000..b085f437
--- /dev/null
+++ b/example/example-application/src/main/java/com/codingapi/example/handler/Test2Handler.java
@@ -0,0 +1,37 @@
+package com.codingapi.example.handler;
+
+import com.codingapi.example.event.AEvent;
+import com.codingapi.example.event.TestEvent;
+import com.codingapi.example.infra.entity.TestEntity;
+import com.codingapi.example.infra.jpa.TestEntityRepository;
+import com.codingapi.springboot.framework.event.EventPusher;
+import com.codingapi.springboot.framework.event.IHandler;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Repository;
+
+@Repository
+@AllArgsConstructor
+public class Test2Handler implements IHandler {
+
+ private TestEntityRepository testEntityRepository;
+
+ @Override
+ public void handler(TestEvent event) {
+ TestEntity entity = new TestEntity(event.getName()+"123");
+ testEntityRepository.save(entity);
+
+ new Thread(()->{
+ EventPusher.push(new AEvent());
+ }).start();
+
+// new Thread(()->{
+// EventPusher.push(new AEvent());
+// }).start();
+ }
+
+
+ @Override
+ public int order() {
+ return 100;
+ }
+}
diff --git a/example/example-application/src/main/java/com/codingapi/example/handler/TestHandler.java b/example/example-application/src/main/java/com/codingapi/example/handler/TestHandler.java
index 43f874cf..de8439d3 100644
--- a/example/example-application/src/main/java/com/codingapi/example/handler/TestHandler.java
+++ b/example/example-application/src/main/java/com/codingapi/example/handler/TestHandler.java
@@ -24,10 +24,13 @@ public void handler(TestEvent event) {
EventPusher.push(new AEvent());
}).start();
- new Thread(()->{
- EventPusher.push(new AEvent());
- }).start();
+// new Thread(()->{
+// EventPusher.push(new AEvent());
+// }).start();
}
-
+ @Override
+ public int order() {
+ return 10;
+ }
}
diff --git a/example/example-domain/pom.xml b/example/example-domain/pom.xml
index 2afb9745..3a437d43 100644
--- a/example/example-domain/pom.xml
+++ b/example/example-domain/pom.xml
@@ -5,7 +5,7 @@
springboot-example
com.codingapi.springboot
- 3.3.5
+ 3.3.6
4.0.0
diff --git a/example/example-infra-flow/pom.xml b/example/example-infra-flow/pom.xml
index 0a803730..4ede4627 100644
--- a/example/example-infra-flow/pom.xml
+++ b/example/example-infra-flow/pom.xml
@@ -5,7 +5,7 @@
springboot-example
com.codingapi.springboot
- 3.3.5
+ 3.3.6
4.0.0
diff --git a/example/example-infra-jpa/pom.xml b/example/example-infra-jpa/pom.xml
index e3cfd651..9809444d 100644
--- a/example/example-infra-jpa/pom.xml
+++ b/example/example-infra-jpa/pom.xml
@@ -5,7 +5,7 @@
springboot-example
com.codingapi.springboot
- 3.3.5
+ 3.3.6
4.0.0
diff --git a/example/example-server/pom.xml b/example/example-server/pom.xml
index 7cc96d6e..71ec3c93 100644
--- a/example/example-server/pom.xml
+++ b/example/example-server/pom.xml
@@ -5,7 +5,7 @@
springboot-example
com.codingapi.springboot
- 3.3.5
+ 3.3.6
4.0.0
diff --git a/example/pom.xml b/example/pom.xml
index abf2ba2f..7c000f17 100644
--- a/example/pom.xml
+++ b/example/pom.xml
@@ -17,7 +17,7 @@
springboot-example
- 3.3.5
+ 3.3.6
springboot-example
springboot-example project for Spring Boot
diff --git a/pom.xml b/pom.xml
index b2f212b5..59cb5b08 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,13 +6,13 @@
org.springframework.boot
spring-boot-starter-parent
- 3.3.4
+ 3.3.5
com.codingapi.springboot
springboot-parent
- 3.3.5
+ 3.3.6
https://github.com/codingapi/springboot-framewrok
springboot-parent
@@ -31,18 +31,19 @@
1.6.13
3.1.0
${project.version}
- 2.0.42
- 0.12.5
- 2.15.0
+ 2.0.53
+ 0.12.6
+ 2.17.0
+ 3.17.0
1.8.1
- 1.11.0
+ 1.12.0
0.10.2
0.9.16
- 1.77
+ 1.79
1.2.0
2.2
- 4.0.15
- 2.2.224
+ 4.0.24
+ 2.3.232
5.6.2
@@ -108,6 +109,19 @@
${commons-crypto.version}
+
+ commons-io
+ commons-io
+ ${commons-io.version}
+
+
+
+ org.apache.commons
+ commons-lang3
+ ${commons-lang3.version}
+
+
+
org.perf4j
perf4j
@@ -168,12 +182,6 @@
${codingapi.framework.version}
-
- commons-dbutils
- commons-dbutils
- ${commons-dbutils.version}
-
-
org.apache.commons
commons-text
@@ -301,7 +309,7 @@
org.openclover
clover-maven-plugin
- 4.4.1
+ 4.5.2
true
true
diff --git a/springboot-starter-data-fast/pom.xml b/springboot-starter-data-fast/pom.xml
index 531cad62..537cc3ec 100644
--- a/springboot-starter-data-fast/pom.xml
+++ b/springboot-starter-data-fast/pom.xml
@@ -5,7 +5,7 @@
springboot-parent
com.codingapi.springboot
- 3.3.5
+ 3.3.6
4.0.0
diff --git a/springboot-starter-flow/pom.xml b/springboot-starter-flow/pom.xml
index 991c8609..0fedb300 100644
--- a/springboot-starter-flow/pom.xml
+++ b/springboot-starter-flow/pom.xml
@@ -6,7 +6,7 @@
springboot-parent
com.codingapi.springboot
- 3.3.5
+ 3.3.6
springboot-starter-flow
@@ -45,28 +45,6 @@
-
-
-
- org.jacoco
- jacoco-maven-plugin
- 0.8.12
-
-
-
- prepare-agent
-
-
-
- report
- test
-
- report
-
-
-
-
-
-
+
diff --git a/springboot-starter-security/pom.xml b/springboot-starter-security/pom.xml
index 92302bc9..7224f6f0 100644
--- a/springboot-starter-security/pom.xml
+++ b/springboot-starter-security/pom.xml
@@ -6,7 +6,7 @@
springboot-parent
com.codingapi.springboot
- 3.3.5
+ 3.3.6
springboot-starter-security
diff --git a/springboot-starter/pom.xml b/springboot-starter/pom.xml
index ac515675..61ea65e9 100644
--- a/springboot-starter/pom.xml
+++ b/springboot-starter/pom.xml
@@ -5,7 +5,7 @@
com.codingapi.springboot
springboot-parent
- 3.3.5
+ 3.3.6
springboot-starter
diff --git a/springboot-starter/src/main/java/com/codingapi/springboot/framework/event/ApplicationHandlerUtils.java b/springboot-starter/src/main/java/com/codingapi/springboot/framework/event/ApplicationHandlerUtils.java
index 0e97bc4a..5844bbe7 100644
--- a/springboot-starter/src/main/java/com/codingapi/springboot/framework/event/ApplicationHandlerUtils.java
+++ b/springboot-starter/src/main/java/com/codingapi/springboot/framework/event/ApplicationHandlerUtils.java
@@ -2,8 +2,10 @@
import com.codingapi.springboot.framework.exception.EventException;
import com.codingapi.springboot.framework.exception.EventLoopException;
+import org.springframework.core.ResolvableType;
import java.util.ArrayList;
+import java.util.Comparator;
import java.util.List;
class ApplicationHandlerUtils implements IHandler {
@@ -40,18 +42,37 @@ public void addHandler(IHandler handler) {
}
}
+ /**
+ * 获取订阅的事件类型
+ */
+ private Class> getHandlerEventClass(IHandler> handler) {
+ ResolvableType resolvableType = ResolvableType.forClass(handler.getClass()).as(IHandler.class);
+ return resolvableType.getGeneric(0).resolve();
+ }
+
@Override
public void handler(IEvent event) {
Class> eventClass = event.getClass();
+
+ List> matchHandlers = handlers
+ .stream()
+ .filter(handler -> {
+ Class> targetClass = getHandlerEventClass(handler);
+ return targetClass.isAssignableFrom(eventClass);
+ })
+ .sorted(Comparator.comparingInt(IHandler::order))
+ .toList();
+
+ if (matchHandlers.isEmpty()) {
+ return;
+ }
+
List errorStack = new ArrayList<>();
- boolean throwException = false;
- for (IHandler handler : handlers) {
+ boolean hasThrowException = false;
+ for (IHandler handler : matchHandlers) {
try {
- Class> targetClass = handler.getHandlerEventClass();
- if (eventClass.equals(targetClass)) {
- handler.handler(event);
- }
+ handler.handler(event);
} catch (Exception e) {
if (e instanceof EventLoopException) {
throw e;
@@ -60,12 +81,12 @@ public void handler(IEvent event) {
handler.error(e);
errorStack.add(e);
} catch (Exception err) {
- throwException = true;
+ hasThrowException = true;
errorStack.add(err);
}
}
}
- if(throwException){
+ if (hasThrowException) {
throw new EventException(errorStack);
}
}
diff --git a/springboot-starter/src/main/java/com/codingapi/springboot/framework/event/IEvent.java b/springboot-starter/src/main/java/com/codingapi/springboot/framework/event/IEvent.java
index 327ca279..4cc12388 100644
--- a/springboot-starter/src/main/java/com/codingapi/springboot/framework/event/IEvent.java
+++ b/springboot-starter/src/main/java/com/codingapi/springboot/framework/event/IEvent.java
@@ -12,5 +12,4 @@
*/
public interface IEvent extends Serializable {
-
}
diff --git a/springboot-starter/src/main/java/com/codingapi/springboot/framework/event/IHandler.java b/springboot-starter/src/main/java/com/codingapi/springboot/framework/event/IHandler.java
index 226ee17d..46248d8c 100644
--- a/springboot-starter/src/main/java/com/codingapi/springboot/framework/event/IHandler.java
+++ b/springboot-starter/src/main/java/com/codingapi/springboot/framework/event/IHandler.java
@@ -1,7 +1,5 @@
package com.codingapi.springboot.framework.event;
-import org.springframework.core.ResolvableType;
-
/**
* handler 订阅
*
@@ -9,6 +7,14 @@
*/
public interface IHandler {
+ /**
+ * 事件订阅排序
+ * 在同样的事件中,可以通过order来控制订阅的顺序
+ */
+ default int order() {
+ return 0;
+ }
+
/**
* 订阅触发
*
@@ -27,13 +33,6 @@ default void error(Exception exception) throws Exception {
}
- /**
- * 获取订阅的事件类型
- */
- default Class> getHandlerEventClass() {
- ResolvableType resolvableType = ResolvableType.forClass(getClass()).as(IHandler.class);
- return resolvableType.getGeneric(0).resolve();
- }
}