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(); - } }