From 68e51485d74a261cec0b58857d0bbb6ed2117b22 Mon Sep 17 00:00:00 2001 From: jiangw <39796328+b6688c@users.noreply.github.com> Date: Sun, 22 Oct 2023 00:28:11 +0800 Subject: [PATCH] =?UTF-8?q?feat=201.=E5=8D=87=E7=BA=A7springboot=E8=87=B33?= =?UTF-8?q?.1.5=E7=89=88=E6=9C=AC=EF=BC=8C=E5=90=8C=E6=AD=A5=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=E7=9B=B8=E5=85=B3=E7=9A=84=E5=8C=85=EF=BC=8Cmybatis-p?= =?UTF-8?q?lus=E3=80=81elasticsearch=E4=BB=A5=E5=8F=8A=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E7=9A=84=E4=BE=9D=E8=B5=96=E7=9A=84=E5=8C=85=EF=BC=8C=E5=8D=87?= =?UTF-8?q?=E7=BA=A7jdk=E4=B8=BA21.=202.=E7=A7=BB=E9=99=A4flink=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=EF=BC=8C=E7=A7=BB=E9=99=A4cache=203.=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=8D=87=E7=BA=A7=E5=90=8E=E7=9A=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 44 +-- uno-auto/pom.xml | 2 +- uno-bom/pom.xml | 107 +---- uno-components/pom.xml | 3 +- uno-components/uno-component-flink/pom.xml | 45 --- .../cc/allio/uno/component/flink/Input.java | 19 - .../cc/allio/uno/component/flink/Output.java | 19 - .../component/flink/UnoFlinkProperties.java | 78 ---- .../flink/concurrent/JobRichContext.java | 127 ------ .../BaseCountDownRichMapFunction.java | 49 --- .../BaseCountDownRichSinkFunction.java | 49 --- .../BaseCountDownRichSourceFunction.java | 50 --- .../flink/function/CountDownFunction.java | 21 - .../datasource/FluxSinkQueueDataSource.java | 106 ----- .../sink/FluxSinkRichSinkFunction.java | 55 --- .../flink/task/AbstractFlinkTask.java | 121 ------ .../flink/task/AccumulatedCountTask.java | 56 --- .../flink/task/AccumulatedEventTimeTask.java | 107 ----- .../uno/component/flink/task/Builder.java | 18 - .../CompositionAccumulateEventTimeTask.java | 61 --- .../component/flink/task/FlinkEnvBuilder.java | 103 ----- .../flink/task/FlinkTaskBuilder.java | 371 ------------------ .../flink/task/OrdinaryFlinkTask.java | 24 -- .../task/FlinkAccumulatedCountTaskTest.java | 67 ---- .../FlinkAccumulatedEventTimeTaskTest.java | 57 --- .../src/test/resources/log4j2.xml | 14 - uno-components/uno-component-http/pom.xml | 2 +- .../http/metadata/ClientResponseWrapper.java | 8 +- .../http/metadata/HttpResponseMetadata.java | 6 +- .../interceptor/TokenInterceptor.java | 7 +- uno-components/uno-component-kafka/pom.xml | 2 +- uno-components/uno-component-netty/pom.xml | 2 +- .../cc/allio/uno/component/netty/Invoker.java | 2 +- .../uno-component-sequential/pom.xml | 2 +- .../sequential/washer/WashMachine.java | 4 +- .../uno-component-websocket/pom.xml | 2 +- .../websocket/BaseWebsocketEndpoint.java | 2 +- .../websocket/ConnectionAuthenticator.java | 3 +- .../websocket/ConnectionContext.java | 3 +- .../websocket/EndpointAuthenticator.java | 9 +- .../MessagePublishAuthenticator.java | 3 +- .../MessageReceiveAuthenticator.java | 3 +- .../UnicastMessageAuthenticator.java | 2 +- .../websocket/UnicastWebSocketEndpoint.java | 3 +- .../websocket/WebSocketEndpoint.java | 6 +- uno-core/pom.xml | 27 +- .../uno/core/annotation/AnnotatedField.java | 2 +- .../allio/uno/core/aop/JoinPointDelegate.java | 9 +- .../java/cc/allio/uno/core/cache/Cache.java | 1 - .../cc/allio/uno/core/cache/RedisCache.java | 203 ---------- .../ConfigurationPropertiesRefresh.java | 109 ----- .../uno/core/config/SpringValueRefresh.java | 129 ------ .../allio/uno/core/config/ValueRefresh.java | 29 -- .../core/proxy/ByteBuddyProxyInvocation.java | 2 +- .../ComposableInvocationInterceptor.java | 2 +- .../uno/core/task/CacheableCalculateTask.java | 105 ----- .../cc/allio/uno/core/util/ClassUtils.java | 33 -- .../uno/core/util/calculate/Calculator.java | 36 -- uno-data/pom.xml | 4 +- .../elasticsearch/EsSQLCommandExecutor.java | 3 +- .../uno/data/orm/jpa/model/BaseEntity.java | 2 +- .../orm/jpa/repository/JpaRepositoryImpl.java | 3 +- .../orm/repository/ApplicationRepository.java | 23 -- .../data/orm/repository/LocalRepository.java | 111 ------ .../repository/ReactiveLocalRepository.java | 148 ------- .../allio/uno/data/orm/sql/FromStatement.java | 5 +- .../allio/uno/data/orm/sql/PojoWrapper.java | 6 +- .../allio/uno/data/orm/sql/SQLColumnDef.java | 4 +- .../orm/sql/dml/druid/DruidSelectFrom.java | 2 +- .../uno/data/query/mybatis/HigherQuery.java | 2 - .../UnoDataMybatisAutoConfiguration.java | 17 - .../data/query/mybatis/UnoSqlInjector.java | 35 -- .../query/mybatis/injector/QueryList.java | 82 ---- .../mybatis/injector/QuerySqlInjector.java | 31 -- .../mybatis/injector/QuerySqlScriptUtil.java | 46 --- .../allio/uno/data/query/stream/Sampling.java | 2 +- uno-demo/pom.xml | 2 +- uno-demo/uno-liquibase-demo/pom.xml | 2 +- uno-demo/uno-websocket-demo/pom.xml | 2 +- .../websocket/demo/DemoWebSocketEndpoint.java | 4 +- uno-gis/pom.xml | 2 +- uno-plugins/pom.xml | 2 +- uno-plugins/uno-plugins-manager/pom.xml | 2 +- uno-plugins/uno-plugins-platform/pom.xml | 2 +- uno-rule/pom.xml | 6 +- uno-starters/pom.xml | 3 +- uno-starters/uno-starter-core/pom.xml | 2 +- uno-starters/uno-starter-flink/pom.xml | 20 - .../flink/UnoFlinkAutoConfiguration.java | 28 -- uno-starters/uno-starter-kafka/pom.xml | 2 +- uno-starters/uno-starter-liquibase/README.md | 2 +- uno-starters/uno-starter-liquibase/pom.xml | 2 +- uno-starters/uno-starter-redis/pom.xml | 2 +- uno-starters/uno-starter-sequential/pom.xml | 2 +- uno-starters/uno-starter-websocket/pom.xml | 2 +- uno-test/pom.xml | 38 +- .../cc/allio/uno/test/BaseSpringTest.java | 29 +- .../main/java/cc/allio/uno/test/RunTest.java | 2 - .../java/cc/allio/uno/test/TestManager.java | 3 - .../java/cc/allio/uno/test/WebListener.java | 3 +- .../uno/test/env/DataSourceEnvironment.java | 2 +- .../allio/uno/test/env/EasyEsEnvironment.java | 31 -- .../allio/uno/test/env/FeignEnvironment.java | 47 --- .../uno/test/env/MybatisEnvironment.java | 2 +- .../uno/test/env/MybatisPlusEnvironment.java | 2 +- .../test/env/ReactiveFeignEnvironment.java | 33 -- .../test/env/annotation/FeignConfigure.java | 28 -- .../uno/test/env/annotation/FeignEnv.java | 84 ---- .../properties/DataSourceProperties.java | 7 - .../annotation/properties/EsProperties.java | 3 - .../properties/FeignHttpClientProperties.java | 62 --- .../cc/allio/uno/test/feign/FeignRunner.java | 224 ----------- .../feign/ReactiveFeignClientFactoryBean.java | 287 -------------- .../ReactiveFeignClientSpecification.java | 78 ---- .../feign/ReactiveFeignClientsRegistrar.java | 237 ----------- .../test/feign/ReactiveFeignConfigurator.java | 29 -- .../cc/allio/uno/test/feign/RunFeignTest.java | 59 --- .../allio/uno/test/runner/InjectRunner.java | 2 +- uno-web/pom.xml | 4 +- 119 files changed, 134 insertions(+), 4308 deletions(-) delete mode 100644 uno-components/uno-component-flink/pom.xml delete mode 100644 uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/Input.java delete mode 100644 uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/Output.java delete mode 100644 uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/UnoFlinkProperties.java delete mode 100644 uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/concurrent/JobRichContext.java delete mode 100644 uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/function/BaseCountDownRichMapFunction.java delete mode 100644 uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/function/BaseCountDownRichSinkFunction.java delete mode 100644 uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/function/BaseCountDownRichSourceFunction.java delete mode 100644 uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/function/CountDownFunction.java delete mode 100644 uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/function/datasource/FluxSinkQueueDataSource.java delete mode 100644 uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/function/sink/FluxSinkRichSinkFunction.java delete mode 100644 uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/AbstractFlinkTask.java delete mode 100644 uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/AccumulatedCountTask.java delete mode 100644 uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/AccumulatedEventTimeTask.java delete mode 100644 uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/Builder.java delete mode 100644 uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/CompositionAccumulateEventTimeTask.java delete mode 100644 uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/FlinkEnvBuilder.java delete mode 100644 uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/FlinkTaskBuilder.java delete mode 100644 uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/OrdinaryFlinkTask.java delete mode 100644 uno-components/uno-component-flink/src/test/java/cc/allio/uno/component/flink/task/FlinkAccumulatedCountTaskTest.java delete mode 100644 uno-components/uno-component-flink/src/test/java/cc/allio/uno/component/flink/task/FlinkAccumulatedEventTimeTaskTest.java delete mode 100644 uno-components/uno-component-flink/src/test/resources/log4j2.xml delete mode 100644 uno-core/src/main/java/cc/allio/uno/core/cache/RedisCache.java delete mode 100644 uno-core/src/main/java/cc/allio/uno/core/config/ConfigurationPropertiesRefresh.java delete mode 100644 uno-core/src/main/java/cc/allio/uno/core/config/SpringValueRefresh.java delete mode 100644 uno-core/src/main/java/cc/allio/uno/core/config/ValueRefresh.java delete mode 100644 uno-core/src/main/java/cc/allio/uno/core/task/CacheableCalculateTask.java delete mode 100644 uno-core/src/main/java/cc/allio/uno/core/util/calculate/Calculator.java delete mode 100644 uno-data/src/main/java/cc/allio/uno/data/orm/repository/ApplicationRepository.java delete mode 100644 uno-data/src/main/java/cc/allio/uno/data/orm/repository/LocalRepository.java delete mode 100644 uno-data/src/main/java/cc/allio/uno/data/orm/repository/ReactiveLocalRepository.java delete mode 100644 uno-data/src/main/java/cc/allio/uno/data/query/mybatis/UnoSqlInjector.java delete mode 100644 uno-data/src/main/java/cc/allio/uno/data/query/mybatis/injector/QueryList.java delete mode 100644 uno-data/src/main/java/cc/allio/uno/data/query/mybatis/injector/QuerySqlInjector.java delete mode 100644 uno-data/src/main/java/cc/allio/uno/data/query/mybatis/injector/QuerySqlScriptUtil.java delete mode 100644 uno-starters/uno-starter-flink/pom.xml delete mode 100644 uno-starters/uno-starter-flink/src/main/java/cc/allio/uno/starter/flink/UnoFlinkAutoConfiguration.java delete mode 100644 uno-test/src/main/java/cc/allio/uno/test/env/EasyEsEnvironment.java delete mode 100644 uno-test/src/main/java/cc/allio/uno/test/env/FeignEnvironment.java delete mode 100644 uno-test/src/main/java/cc/allio/uno/test/env/ReactiveFeignEnvironment.java delete mode 100644 uno-test/src/main/java/cc/allio/uno/test/env/annotation/FeignConfigure.java delete mode 100644 uno-test/src/main/java/cc/allio/uno/test/env/annotation/FeignEnv.java delete mode 100644 uno-test/src/main/java/cc/allio/uno/test/env/annotation/properties/FeignHttpClientProperties.java delete mode 100644 uno-test/src/main/java/cc/allio/uno/test/feign/FeignRunner.java delete mode 100644 uno-test/src/main/java/cc/allio/uno/test/feign/ReactiveFeignClientFactoryBean.java delete mode 100644 uno-test/src/main/java/cc/allio/uno/test/feign/ReactiveFeignClientSpecification.java delete mode 100644 uno-test/src/main/java/cc/allio/uno/test/feign/ReactiveFeignClientsRegistrar.java delete mode 100644 uno-test/src/main/java/cc/allio/uno/test/feign/ReactiveFeignConfigurator.java delete mode 100644 uno-test/src/main/java/cc/allio/uno/test/feign/RunFeignTest.java diff --git a/pom.xml b/pom.xml index 70d5e691..7d1dff02 100644 --- a/pom.xml +++ b/pom.xml @@ -7,16 +7,15 @@ cc.allio uno pom - 1.1.4.RELEASE + 1.1.5.RELEASE 构建大型应用需要的基本能力 --- all in one - + https://github.com/b6688c/uno - jiangwei + j.x jiangw1027@gmail.com - uno-bom uno-core @@ -33,10 +32,9 @@ - 1.8 + 21 2020.0.12 - 2.3.12.RELEASE - Cairo-SR8 + 3.1.5 3.2.1 3.8.1 3.1.0 @@ -46,10 +44,6 @@ - - org.springframework.boot - spring-boot-starter-aop - org.projectlombok lombok @@ -63,6 +57,13 @@ + + org.springframework.boot + spring-boot-dependencies + ${spring.boot.version} + pom + import + org.testcontainers testcontainers-bom @@ -84,27 +85,6 @@ pom import - - org.springframework.boot - spring-boot-dependencies - ${spring.boot.version} - pom - import - - - io.spring.platform - platform-bom - ${spring.platform.version} - pom - import - - - org.springframework.cloud - spring-cloud-dependencies - ${spring.cloud.version} - pom - import - org.drools drools-bom diff --git a/uno-auto/pom.xml b/uno-auto/pom.xml index 644c1e3a..c0c40516 100644 --- a/uno-auto/pom.xml +++ b/uno-auto/pom.xml @@ -5,7 +5,7 @@ uno cc.allio - 1.1.4.RELEASE + 1.1.5.RELEASE 4.0.0 diff --git a/uno-bom/pom.xml b/uno-bom/pom.xml index a234a08a..77e51d0e 100644 --- a/uno-bom/pom.xml +++ b/uno-bom/pom.xml @@ -12,12 +12,12 @@ 4.0.0 cc.allio uno-bom - 1.1.4.RELEASE + 1.1.5.RELEASE pom - 1.1.4.RELEASE + 1.1.5.RELEASE 1.5.9 @@ -28,20 +28,17 @@ 1.12.2 3.3.0 - 5.2.15.RELEASE 1.18.22 5.6.2 4.0.0 30.1.1-jre - 2.1.11 + 2.2.17 1.6.2 3.2.0 - 2.2.1 - 3.4.2 - 1.14.3 - 1.2 + 3.0.2 + 3.5.3 4.0.11 @@ -53,19 +50,13 @@ 3.3.6 0.31.0 - - 0.9.40 - - 2.0.15 - 2.2.10 - 2.10.5 + 3.0.0 27.0 2.5.1 - 5.3.2 4.4.0 1.8 - 7.17.7 + 8.7.1 6.7.0 5.3.1 @@ -73,8 +64,7 @@ 3.2.4 - 4.1.0 - 2.2.0.RELEASE + 3.2.1 2.0.1 0.4.6 @@ -104,11 +94,6 @@ uno-component-http ${uno.version} - - cc.allio - uno-component-flink - ${uno.version} - cc.allio uno-component-websocket @@ -130,11 +115,6 @@ uno-starter-core ${uno.version} - - cc.allio - uno-starter-flink - ${uno.version} - cc.allio uno-starter-kafka @@ -192,12 +172,6 @@ spring-statemachine-core ${spring-statemachine.version} - - org.springframework - spring-webflux - ${spring-webflux.version} - provided - cglib @@ -308,31 +282,6 @@ ${mybatis-plus-boot.version} provided - - org.apache.flink - flink-streaming-java_2.12 - ${flink.version} - - - org.apache.flink - flink-clients_2.12 - ${flink.version} - - - org.apache.flink - flink-connector-kafka_2.12 - ${flink.version} - - - org.apache.flink - flink-connector-jdbc_2.12 - ${flink.version} - - - com.esotericsoftware.minlog - minlog - ${flink-minlog.version} - @@ -394,11 +343,6 @@ opentracing-util ${oepntracing.version} - - cn.easy-es - easy-es-boot-starter - 2.0.0-beta1 - com.playtika.reactivefeign feign-reactor-cloud @@ -414,11 +358,6 @@ feign-reactor-spring-configuration ${feign-reactor.version} - - com.alibaba - easyexcel - ${easyexcel.version} - io.springfox springfox-swagger2 @@ -444,11 +383,6 @@ postgis-jdbc ${postgis-jdbc.version} - - com.googlecode.aviator - aviator - ${aviator.version} - cn.afterturn easypoi-annotation @@ -469,26 +403,6 @@ commons-csv ${appache-commons-csv.version} - - co.elastic.clients - elasticsearch-java - ${elasticsearch-client.version} - - - org.elasticsearch.client - elasticsearch-rest-high-level-client - ${elasticsearch-client.version} - - - org.elasticsearch.client - elasticsearch-rest-client - ${elasticsearch-client.version} - - - org.elasticsearch - elasticsearch - ${elasticsearch-client.version} - com.influxdb influxdb-client-java @@ -520,11 +434,6 @@ shardingsphere-sql-parser-oracle ${shardingsphere.version} - - org.jeasy - easy-rules-core - ${easy-rules.version} - jakarta.json jakarta.json-api diff --git a/uno-components/pom.xml b/uno-components/pom.xml index 54cb16df..84f65179 100644 --- a/uno-components/pom.xml +++ b/uno-components/pom.xml @@ -5,7 +5,7 @@ uno cc.allio - 1.1.4.RELEASE + 1.1.5.RELEASE 4.0.0 @@ -14,7 +14,6 @@ uno-component-http - uno-component-flink uno-component-websocket uno-component-sequential uno-component-kafka diff --git a/uno-components/uno-component-flink/pom.xml b/uno-components/uno-component-flink/pom.xml deleted file mode 100644 index 75210a35..00000000 --- a/uno-components/uno-component-flink/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - uno-components - cc.allio - 1.1.4.RELEASE - - 4.0.0 - - uno-component-flink - - - - cc.allio - uno-core - - - org.apache.flink - flink-streaming-java_2.12 - - - org.apache.flink - flink-clients_2.12 - - - org.apache.flink - flink-connector-kafka_2.12 - - - org.apache.flink - flink-connector-jdbc_2.12 - - - com.esotericsoftware.minlog - minlog - - - cc.allio - uno-test - test - - - \ No newline at end of file diff --git a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/Input.java b/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/Input.java deleted file mode 100644 index 6fd8c8e0..00000000 --- a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/Input.java +++ /dev/null @@ -1,19 +0,0 @@ -package cc.allio.uno.component.flink; - -/** - * 输入 - * - * @param 输入数据类型 - * @author jiangwei - * @date 2022/2/23 14:20 - * @since 1.0 - */ -public interface Input { - - /** - * 向数据源中输入数据 - * - * @param data 数据 - */ - void input(T data); -} diff --git a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/Output.java b/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/Output.java deleted file mode 100644 index b6e1c8f6..00000000 --- a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/Output.java +++ /dev/null @@ -1,19 +0,0 @@ -package cc.allio.uno.component.flink; - -/** - * 数据 - * - * @author jiangwei - * @date 2022/2/23 14:22 - * @since 1.0 - */ -public interface Output { - - /** - * 输出数据 - * - * @return 数据输出 - * @throws Exception 输出产生异常时抛出 - */ - C output() throws Exception; -} diff --git a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/UnoFlinkProperties.java b/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/UnoFlinkProperties.java deleted file mode 100644 index 346cc479..00000000 --- a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/UnoFlinkProperties.java +++ /dev/null @@ -1,78 +0,0 @@ -package cc.allio.uno.component.flink; - -import lombok.Data; -import org.apache.flink.streaming.api.CheckpointingMode; -import org.apache.flink.streaming.api.environment.CheckpointConfig; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; - -@Data -@ConfigurationProperties("allio.uno.flink") -public class UnoFlinkProperties { - - /** - * 并行度 - * - * @see StreamExecutionEnvironment#setParallelism(int) - */ - private Integer parallelism = 5; - - private final Checkpoint checkpoint = new Checkpoint(); - - @Data - public static class Checkpoint { - - /** - * 是否开启checkpoint - */ - private boolean enable = true; - - /** - * checkpoint周期 - * - * @see StreamExecutionEnvironment#enableCheckpointing(long) - */ - private Long checkpointPeriod = 60000L; - - /** - * 是否强制进行checkpoint - */ - private boolean forceCheckpointing = true; - - /** - * checkpoint模式 - * - * @see CheckpointingMode - */ - private CheckpointingMode checkpointMode = CheckpointingMode.EXACTLY_ONCE; - - /** - * checkpoint最小间隔 - */ - private Long minPauseBetweenCheckpoints = 60000L; - - /** - * checkpoint超时时间 - */ - private Long checkPointTimeout = 180000L; - - /** - * 允许的并发检查点 - */ - private Integer maxConcurrentCheckpoints = 1; - - /** - * 表示一旦Flink处理程序被cancel后,会保留Checkpoint数据,以便根据实际需要恢复到指定的Checkpoint【详细解释见备注】 - * ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION:表示一旦Flink处理程序被cancel后,会保留Checkpoint数据,以便根据实际需要恢复到指定的Checkpoint - * ExternalizedCheckpointCleanup.DELETE_ON_CANCELLATION: 表示一旦Flink处理程序被cancel后,会删除Checkpoint数据,只有job执行失败的时候才会保存checkpoint - * - * @see CheckpointConfig.ExternalizedCheckpointCleanup - */ - private CheckpointConfig.ExternalizedCheckpointCleanup externalizedCheckpointCleanup = CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION; - - /** - * checkpoint路径 - */ - private String checkpointPath = "file:///Users/jiangwei/Miscellaneous/flink"; - } -} diff --git a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/concurrent/JobRichContext.java b/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/concurrent/JobRichContext.java deleted file mode 100644 index fe10bf91..00000000 --- a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/concurrent/JobRichContext.java +++ /dev/null @@ -1,127 +0,0 @@ -package cc.allio.uno.component.flink.concurrent; - -import cc.allio.uno.component.flink.Input; -import cc.allio.uno.component.flink.Output; -import org.apache.flink.api.common.JobID; -import org.apache.flink.api.common.functions.RichFunction; -import org.apache.flink.api.common.time.Time; -import org.apache.flink.configuration.Configuration; -import org.apache.flink.runtime.deployment.TaskDeploymentDescriptor; -import org.apache.flink.runtime.jobmanager.slots.TaskManagerGateway; -import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; -import org.springframework.util.CollectionUtils; - -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.CountDownLatch; -import java.util.stream.Collectors; - -/** - * 基于JobId创建的计数器,它的目的是为了解决flink function序列化的问题所产生的
- *
    - *
  1. 在Flink序列化中,无法维护没有实现序列化的对象,导致function中使用那些外部对象一定为null。解决这个问题是实现{@link RichFunction#open(Configuration)}来解决这个问题
  2. - *
  3. 但又引出另外一个问题,触发{@link RichFunction#open(Configuration)}方法,是因为{@link TaskManagerGateway#submitTask(TaskDeploymentDescriptor, Time)}提交任务之后触发
  4. - *
  5. 而提交任务是因为JobManager通过rpc进行触发,这个一个异步的过程。实现中,使用{@link StreamExecutionEnvironment#execute()}同步提交等待触发, - * 但我需要的不是同步提交,而是异步提交,而且自定义function是一个同步阻塞的过程。不能满足
  6. - *
  7. 为了解决这一个问题,引入这个类,这个类的目的是在提交数据后,等待任务是否已经提交完毕。它的实现原理是利用计数锁存器,当某一个function初始化完毕后计数减1,直到所有的计数完成,结束阻塞
  8. - *
- * 因为存在function的序列化,所以即使本地保存的function对象是没有被纳入Task中,这个类的另外一个目的就是为了获取这些对象而做的上下文存储器 - * - * @author jiangwei - * @date 2022/2/24 00:29 - * @since 1.0 - */ -@Deprecated -public class JobRichContext { - - private JobRichContext() { - - } - - /** - * 维护当前flink job的阻塞器 - */ - private static final Map JOB_ID_BLOCKING = new ConcurrentHashMap<>(); - - /** - * 维护当前任务所使用的rich function - */ - private static final Map> currentRich = new ConcurrentHashMap<>(); - - /** - * 向阻塞器缓存中存入job - * - * @param jobID jobId - * @param count function数量 - * @return 锁存器对象实例 - */ - public static synchronized CountDownLatch registerCountDown(JobID jobID, Integer count) { - CountDownLatch blocking = new CountDownLatch(count); - JOB_ID_BLOCKING.put(jobID, blocking); - return blocking; - } - - /** - * 减去当前Job的锁存器的计数值 - * - * @param jobID jobID对象 - * @throws NullPointerException 不存在当前锁存器的Job - */ - public static synchronized void subtraction(JobID jobID) { - CountDownLatch blocking = JOB_ID_BLOCKING.get(jobID); - if (blocking == null) { - throw new NullPointerException(String.format("JobID %s countdown latch does not exist", jobID)); - } - blocking.countDown(); - } - - /** - * 向缓存中注册RichFunction - * - * @param jobID jobID对象 - * @param rich RichFunction对象 - * @throws NullPointerException rich对象为空抛出 - */ - public static synchronized void registerRich(JobID jobID, RichFunction rich) { - Set richSet = currentRich.get(jobID); - if (CollectionUtils.isEmpty(richSet)) { - richSet = new HashSet<>(); - currentRich.put(jobID, richSet); - } - richSet.add(rich); - } - - /** - * 向Rich中获取Input - * - * @param jobID jobId对象 - * @return 空或者找到的Input对象 - */ - public static synchronized List getInputs(JobID jobID) { - Set richSet = currentRich.get(jobID); - if (CollectionUtils.isEmpty(richSet)) { - return Collections.emptyList(); - } - return richSet.stream() - .filter(v -> Input.class.isAssignableFrom(v.getClass())) - .map(Input.class::cast) - .collect(Collectors.toList()); - } - - /** - * 向Rich中获取Output - * - * @param jobID jobID对象 - * @return 空或者找到的Output对象 - */ - public static synchronized List getOutputs(JobID jobID) { - Set richSet = currentRich.get(jobID); - if (CollectionUtils.isEmpty(richSet)) { - return Collections.emptyList(); - } - return richSet.stream() - .filter(v -> Output.class.isAssignableFrom(v.getClass())) - .map(Output.class::cast) - .collect(Collectors.toList()); - } -} diff --git a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/function/BaseCountDownRichMapFunction.java b/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/function/BaseCountDownRichMapFunction.java deleted file mode 100644 index 1b897694..00000000 --- a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/function/BaseCountDownRichMapFunction.java +++ /dev/null @@ -1,49 +0,0 @@ -package cc.allio.uno.component.flink.function; - -import cc.allio.uno.component.flink.concurrent.JobRichContext; -import org.apache.flink.api.common.JobID; -import org.apache.flink.api.common.functions.RichMapFunction; -import org.apache.flink.api.common.functions.RuntimeContext; -import org.apache.flink.configuration.Configuration; - -import java.util.Objects; - -/** - * {@link RichMapFunction}锁存器的标识接口 - * - * @author jiangwei - * @date 2022/2/24 00:55 - * @since 1.0 - */ -@Deprecated -public abstract class BaseCountDownRichMapFunction extends RichMapFunction implements CountDownFunction { - - private transient JobID jobID; - - @Override - public void open(Configuration parameters) throws Exception { - afterOpen(parameters); - RuntimeContext runtimeContext = getRuntimeContext(); - JobID jobId = runtimeContext.getJobId(); - jobID = jobId; - JobRichContext.subtraction(jobId); - JobRichContext.registerRich(jobId, this); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - BaseCountDownRichMapFunction that = (BaseCountDownRichMapFunction) o; - return Objects.equals(jobID, that.jobID); - } - - @Override - public int hashCode() { - return Objects.hash(jobID); - } -} diff --git a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/function/BaseCountDownRichSinkFunction.java b/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/function/BaseCountDownRichSinkFunction.java deleted file mode 100644 index 5858287e..00000000 --- a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/function/BaseCountDownRichSinkFunction.java +++ /dev/null @@ -1,49 +0,0 @@ -package cc.allio.uno.component.flink.function; - -import cc.allio.uno.component.flink.concurrent.JobRichContext; -import org.apache.flink.api.common.JobID; -import org.apache.flink.api.common.functions.RuntimeContext; -import org.apache.flink.configuration.Configuration; -import org.apache.flink.streaming.api.functions.sink.RichSinkFunction; - -import java.util.Objects; - -/** - * {@link RichSinkFunction}锁存器的标识接口 - * - * @author jiangwei - * @date 2022/2/24 00:51 - * @since 1.0 - */ -@Deprecated -public abstract class BaseCountDownRichSinkFunction extends RichSinkFunction implements CountDownFunction { - - private transient JobID jobID; - - @Override - public void open(Configuration parameters) throws Exception { - afterOpen(parameters); - RuntimeContext runtimeContext = getRuntimeContext(); - JobID jobId = runtimeContext.getJobId(); - jobID = jobId; - JobRichContext.subtraction(jobId); - JobRichContext.registerRich(jobId, this); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - BaseCountDownRichSinkFunction that = (BaseCountDownRichSinkFunction) o; - return Objects.equals(jobID, that.jobID); - } - - @Override - public int hashCode() { - return Objects.hash(jobID); - } -} diff --git a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/function/BaseCountDownRichSourceFunction.java b/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/function/BaseCountDownRichSourceFunction.java deleted file mode 100644 index bfa7575b..00000000 --- a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/function/BaseCountDownRichSourceFunction.java +++ /dev/null @@ -1,50 +0,0 @@ -package cc.allio.uno.component.flink.function; - -import cc.allio.uno.component.flink.concurrent.JobRichContext; -import org.apache.flink.api.common.JobID; -import org.apache.flink.api.common.functions.RuntimeContext; -import org.apache.flink.configuration.Configuration; -import org.apache.flink.streaming.api.functions.source.RichSourceFunction; - -import java.util.Objects; - -/** - * {@link RichSourceFunction}锁存器标识Function - * - * @author jiangwei - * @date 2022/2/24 00:45 - * @see JobRichContext - * @since 1.0 - */ -@Deprecated -public abstract class BaseCountDownRichSourceFunction extends RichSourceFunction implements CountDownFunction { - - private transient JobID jobID; - - @Override - public void open(Configuration parameters) throws Exception { - afterOpen(parameters); - RuntimeContext runtimeContext = getRuntimeContext(); - JobID jobId = runtimeContext.getJobId(); - jobID = jobId; - JobRichContext.subtraction(jobId); - JobRichContext.registerRich(jobId, this); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - BaseCountDownRichSourceFunction that = (BaseCountDownRichSourceFunction) o; - return Objects.equals(jobID, that.jobID); - } - - @Override - public int hashCode() { - return Objects.hash(jobID); - } -} diff --git a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/function/CountDownFunction.java b/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/function/CountDownFunction.java deleted file mode 100644 index 12ce556b..00000000 --- a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/function/CountDownFunction.java +++ /dev/null @@ -1,21 +0,0 @@ -package cc.allio.uno.component.flink.function; - -import org.apache.flink.configuration.Configuration; - -/** - * 锁存器Function - * - * @author jiangwei - * @date 2022/2/24 00:49 - * @since 1.0 - */ -@Deprecated -public interface CountDownFunction { - - /** - * 子类实现初始化操作 - * - * @param parameters The configuration containing the parameters attached to the contract. - */ - void afterOpen(Configuration parameters); -} diff --git a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/function/datasource/FluxSinkQueueDataSource.java b/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/function/datasource/FluxSinkQueueDataSource.java deleted file mode 100644 index 3c78d183..00000000 --- a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/function/datasource/FluxSinkQueueDataSource.java +++ /dev/null @@ -1,106 +0,0 @@ -package cc.allio.uno.component.flink.function.datasource; - -import cc.allio.uno.component.flink.Input; -import cc.allio.uno.component.flink.function.BaseCountDownRichSourceFunction; -import io.netty.util.internal.PlatformDependent; -import io.netty.util.internal.shaded.org.jctools.queues.MpscUnboundedArrayQueue; -import org.apache.flink.api.common.state.ListState; -import org.apache.flink.api.common.state.ListStateDescriptor; -import org.apache.flink.api.common.typeinfo.TypeInformation; -import org.apache.flink.configuration.Configuration; -import org.apache.flink.runtime.state.FunctionInitializationContext; -import org.apache.flink.runtime.state.FunctionSnapshotContext; -import org.apache.flink.streaming.api.checkpoint.CheckpointedFunction; -import org.apache.flink.streaming.api.functions.source.SourceFunction; -import reactor.core.publisher.Flux; -import reactor.core.publisher.FluxSink; - -import java.io.Serializable; -import java.util.Queue; - -/** - * 基于{@link Flux}创建的外部数据源,通过调用{@link FluxSink#next(Object)}把数据向下游输出
- * 下游输出数据放入unbounded Queue({@link MpscUnboundedArrayQueue}),触发{{@link #run(SourceFunction.SourceContext)}}时从队列中拿取数据。
- * 除此之外,它还实现了{@link CheckpointedFunction}接口,来对数据进行checkpoint - * - * @author jiangwei - * @date 2022/2/23 13:29 - * @since 1.0 - */ -@Deprecated -public class FluxSinkQueueDataSource - extends BaseCountDownRichSourceFunction - implements CheckpointedFunction, Input, Serializable { - - private volatile boolean isRunning = true; - - /** - * 无界队列 - */ - private static Queue emitter; - - /** - * 数据流上游,由外部输入数据 - */ - private static FluxSink upstream; - - /** - * checkpoint状态数据 - */ - private transient ListState snapshotStateData; - - private final TypeInformation inputType; - - public FluxSinkQueueDataSource(TypeInformation inputType) { - this.inputType = inputType; - } - - @Override - public void afterOpen(Configuration parameters) { - Flux emit = Flux.create(sink -> upstream = sink); - emitter = PlatformDependent.newMpscQueue(); - emit.subscribe(v -> emitter.offer(v)); - } - - @Override - public void input(T data) { - if (upstream != null) { - upstream.next(data); - } - } - - @Override - public void run(SourceContext ctx) throws Exception { - while (isRunning) { - synchronized (ctx.getCheckpointLock()) { - if (!emitter.isEmpty()) { - ctx.collect((T) emitter.poll()); - } - } - } - } - - @Override - public void cancel() { - isRunning = false; - } - - @Override - public void snapshotState(FunctionSnapshotContext context) throws Exception { - snapshotStateData.clear(); - for (Object data : emitter) { - snapshotStateData.add((T) data); - } - } - - @Override - public void initializeState(FunctionInitializationContext context) throws Exception { - ListStateDescriptor descriptor = new ListStateDescriptor<>("FluxSinkQueueDataSource", inputType); - snapshotStateData = context.getOperatorStateStore().getListState(descriptor); - if (context.isRestored()) { - for (T data : snapshotStateData.get()) { - emitter.add(data); - } - } - } -} diff --git a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/function/sink/FluxSinkRichSinkFunction.java b/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/function/sink/FluxSinkRichSinkFunction.java deleted file mode 100644 index aac53fb1..00000000 --- a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/function/sink/FluxSinkRichSinkFunction.java +++ /dev/null @@ -1,55 +0,0 @@ -package cc.allio.uno.component.flink.function.sink; - -import cc.allio.uno.component.flink.function.BaseCountDownRichSinkFunction; -import cc.allio.uno.component.flink.Output; -import lombok.extern.slf4j.Slf4j; -import org.apache.flink.configuration.Configuration; -import reactor.core.publisher.Flux; -import reactor.core.publisher.FluxSink; - -import java.io.Serializable; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.function.Consumer; - -/** - * 通过{@link FluxSink#next(Object)}来输出数据,订阅{@link Flux#subscribe(Consumer)}来获取最终计算的结果
- * 结果存入{@link BlockingQueue}中,它是容量只有1的阻塞队列,也就说,数据进入会被立即消耗,如果生成着速率过快将会导致生产者进行阻塞 - * - * @author jiangwei - * @date 2022/2/23 13:57 - * @since 1.0 - */ -@Slf4j -@Deprecated -public class FluxSinkRichSinkFunction extends BaseCountDownRichSinkFunction implements Output, Serializable { - - private static FluxSink downstream; - private static BlockingQueue sinkOut; - - @Override - public void afterOpen(Configuration parameters) { - Flux creator = Flux.create(sink -> downstream = sink); - sinkOut = new LinkedBlockingQueue<>(1); - creator.subscribe(v -> { - try { - sinkOut.put(v); - } catch (InterruptedException e) { - log.error("calculate result push blocking queue failed", e); - } - }); - } - - @Override - public void invoke(C value, Context context) throws Exception { - if (downstream != null) { - downstream.next(value); - } - } - - @Override - public C output() throws InterruptedException { - return (C) sinkOut.take(); - } - -} diff --git a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/AbstractFlinkTask.java b/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/AbstractFlinkTask.java deleted file mode 100644 index 910ec290..00000000 --- a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/AbstractFlinkTask.java +++ /dev/null @@ -1,121 +0,0 @@ -package cc.allio.uno.component.flink.task; - -import cc.allio.uno.component.flink.UnoFlinkProperties; -import cc.allio.uno.core.task.Task; -import cc.allio.uno.core.util.CoreBeanUtil; -import lombok.extern.slf4j.Slf4j; -import org.apache.flink.api.common.JobStatus; -import org.apache.flink.api.common.io.GenericInputFormat; -import org.apache.flink.api.common.typeinfo.TypeInformation; -import org.apache.flink.api.java.tuple.Tuple3; -import org.apache.flink.core.execution.JobClient; -import org.apache.flink.streaming.api.datastream.DataStream; -import org.apache.flink.streaming.api.datastream.DataStreamSource; -import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; -import cc.allio.uno.core.util.calculate.Calculator; -import org.apache.flink.streaming.api.functions.sink.SinkFunction; -import org.apache.flink.streaming.api.functions.source.SourceFunction; - -import java.io.Serializable; -import java.util.Optional; -import java.util.concurrent.*; - -/** - * Flink Task任务 - * - * @author jiangwei - * @date 2022/2/21 13:47 - * @since 1.0 - */ -@Slf4j -public abstract class AbstractFlinkTask implements Task, Serializable { - - private transient StreamExecutionEnvironment env; - private final transient String taskName; - private final transient SinkFunction sink; - private final transient SourceFunction> datasource; - private final transient GenericInputFormat> input; - private final transient TypeInformation> inputType; - private transient JobClient jobClient; - private transient ExecutorService exector = Executors.newSingleThreadExecutor(); - - protected AbstractFlinkTask(FlinkTaskBuilder taskBuilder) { - this.taskName = taskBuilder.name; - this.sink = taskBuilder.sink; - this.datasource = taskBuilder.source; - this.input = taskBuilder.input; - this.inputType = taskBuilder.inputType; - } - - /** - * 创建本地流执行环境 - * - * @return 环境执行对象 - */ - public synchronized StreamExecutionEnvironment getEnv() { - if (env == null) { - UnoFlinkProperties flinkProperties = CoreBeanUtil.getBeanOrDefault(UnoFlinkProperties.class, new UnoFlinkProperties()); - env = FlinkEnvBuilder.skeleton() - .buildEnvName(taskName) - .builderEnvProperties(flinkProperties) - .build(); - } - return env; - } - - /** - * 以三元组为数据源类型创建数据源对象 - * - * @return 数据源对象实例 - */ - protected DataStreamSource> createDataSource() { - if (datasource != null) { - return getEnv().addSource(datasource, inputType); - } - return getEnv().createInput(input, inputType); - } - - @Override - public void run() throws Exception { - exector.submit(() -> { - try { - // 添加数据sink - if (getResultSetStream() != null) { - getResultSetStream().addSink(sink); - } - jobClient = getEnv().executeAsync(taskName); - CompletableFuture jobStatus = jobClient.getJobStatus(); - JobStatus status = jobStatus.get(); - if (status.isGloballyTerminalState()) { - finish(); - } - } catch (Exception e) { - log.error("Running job failed", e); - } - }); - } - - @Override - public void finish() { - if (jobClient != null) { - jobClient.cancel(); - } - } - - // --------------------- abstract --------------------- - - /** - * 获取触发{@link Calculator}计算后的结果集数据流对象,用作: - *
    - *
  1. 执行{@link Calculator#calculation(Optional, Object)}之后添加转换操作
  2. - *
  3. 添加checkpoint
  4. - *
  5. 添加sink
  6. - *
- * 执行{{@link #run()}}时将会添加一个未来的结果集 - * - * @return 输入流数据对象实例 - */ - protected abstract DataStream getResultSetStream(); - - -} diff --git a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/AccumulatedCountTask.java b/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/AccumulatedCountTask.java deleted file mode 100644 index 58a3e030..00000000 --- a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/AccumulatedCountTask.java +++ /dev/null @@ -1,56 +0,0 @@ -package cc.allio.uno.component.flink.task; - -import cc.allio.uno.core.util.calculate.Calculator; -import cc.allio.uno.core.task.AccumulatedTask; -import cc.allio.uno.core.util.CollectionUtils; -import cc.allio.uno.core.util.CoreBeanUtil; -import lombok.extern.slf4j.Slf4j; -import org.apache.flink.api.common.eventtime.WatermarkStrategy; -import org.apache.flink.api.java.tuple.Tuple3; -import org.apache.flink.streaming.api.datastream.DataStream; -import org.apache.flink.streaming.api.functions.windowing.ProcessAllWindowFunction; -import org.apache.flink.streaming.api.windowing.windows.GlobalWindow; -import org.apache.flink.util.Collector; - -import java.util.Optional; - -/** - * 基于Flink CountSlideWindow数据累计计算 - * - * @author jiangwei - * @date 2022/2/17 10:07 - * @see AccumulatedTask - * @since 1.0 - */ -@Slf4j -public class AccumulatedCountTask extends AbstractFlinkTask { - - private final transient DataStream resultSetStream; - - /** - * 创建Flink堆积任务 - */ - AccumulatedCountTask(FlinkTaskBuilder.CountBuilder builder) { - super(builder); - Calculator calculator = builder.calculator; - resultSetStream = createDataSource() - .assignTimestampsAndWatermarks( - WatermarkStrategy - .>noWatermarks() - .withTimestampAssigner((v, ctx) -> v.f1)) - .keyBy(t -> t.f0) - .countWindowAll(builder.threshold, builder.overlap) - .process(new ProcessAllWindowFunction, C, GlobalWindow>() { - @Override - public void process(ProcessAllWindowFunction, C, GlobalWindow>.Context context, Iterable> elements, Collector out) throws Exception { - C c = calculator.calculation(Optional.ofNullable(CoreBeanUtil.getContext()), CollectionUtils.newArrayList(elements)); - out.collect(c); - } - }, builder.outputType); - } - - @Override - protected DataStream getResultSetStream() { - return resultSetStream; - } -} diff --git a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/AccumulatedEventTimeTask.java b/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/AccumulatedEventTimeTask.java deleted file mode 100644 index abcddbfa..00000000 --- a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/AccumulatedEventTimeTask.java +++ /dev/null @@ -1,107 +0,0 @@ -package cc.allio.uno.component.flink.task; - -import cc.allio.uno.core.util.calculate.Calculator; -import cc.allio.uno.core.util.CollectionUtils; -import cc.allio.uno.core.util.CoreBeanUtil; -import lombok.Data; -import org.apache.flink.api.common.eventtime.WatermarkStrategy; -import org.apache.flink.api.common.state.ValueState; -import org.apache.flink.api.common.state.ValueStateDescriptor; -import org.apache.flink.api.java.tuple.Tuple3; -import org.apache.flink.configuration.Configuration; -import org.apache.flink.streaming.api.datastream.DataStream; -import org.apache.flink.streaming.api.functions.KeyedProcessFunction; -import org.apache.flink.streaming.api.functions.windowing.ProcessWindowFunction; -import org.apache.flink.streaming.api.windowing.assigners.SlidingEventTimeWindows; -import org.apache.flink.streaming.api.windowing.time.Time; -import org.apache.flink.streaming.api.windowing.windows.TimeWindow; -import org.apache.flink.util.Collector; - -import java.time.Duration; -import java.util.Optional; - -/** - * 基于Flink TimeSlide时间窗口统计任务 - * - * @author jiangwei - * @date 2022/2/22 16:10 - * @since 1.0 - */ -public class AccumulatedEventTimeTask extends AbstractFlinkTask { - - private final transient DataStream resultSetStream; - - /** - * 创建基于event-time的窗口累积任务实例 - * - * @see Calculator - * @see Time - */ - AccumulatedEventTimeTask(FlinkTaskBuilder.EventTimeBuilder builder) { - super(builder); - resultSetStream = createDataSource() - .assignTimestampsAndWatermarks( - WatermarkStrategy - .>forBoundedOutOfOrderness(Duration.ofMillis(builder.tolerance)) - .withTimestampAssigner((v, ctx) -> v.f1)) - .keyBy(v -> v.f0) - .window(SlidingEventTimeWindows.of(builder.size, builder.slide)) - .process(new ProcessWindowFunction, C, String, TimeWindow>() { - @Override - public void process(String s, ProcessWindowFunction, C, String, TimeWindow>.Context context, Iterable> elements, Collector out) throws Exception { - C expect = builder.calculator.calculation(Optional.ofNullable(CoreBeanUtil.getContext()), CollectionUtils.newArrayList(elements)); - out.collect(expect); - } - }, builder.outputType); - } - - @Override - protected DataStream getResultSetStream() { - return resultSetStream; - } - - @Data - static class CountTimeout { - private String key; - private Long lastTimestamp; - private T data; - } - - static class TimeoutProcessFunction extends KeyedProcessFunction, Tuple3> { - - private ValueState valueState; - private final Long timeout; - - TimeoutProcessFunction(Long timeout) { - this.timeout = timeout; - } - - @Override - public void open(Configuration parameters) throws Exception { - valueState = getRuntimeContext().getState(new ValueStateDescriptor<>("state", CountTimeout.class)); - } - - @Override - public void processElement(Tuple3 value, KeyedProcessFunction, Tuple3>.Context ctx, Collector> out) throws Exception { - CountTimeout countTimeout = valueState.value(); - // 处理每一个元素 - if (countTimeout == null) { - countTimeout = new CountTimeout(); - countTimeout.setKey(value.f0); - countTimeout.setData(value.f2); - } - countTimeout.lastTimestamp = ctx.timestamp(); - valueState.update(countTimeout); - ctx.timerService().registerEventTimeTimer(countTimeout.lastTimestamp + timeout); - } - - @Override - public void onTimer(long timestamp, KeyedProcessFunction, Tuple3>.OnTimerContext ctx, Collector> out) throws Exception { - CountTimeout value = valueState.value(); - if (value.lastTimestamp + timeout == timestamp) { - out.collect(Tuple3.of(value.key, value.lastTimestamp, value.data)); - valueState.update(null); - } - } - } -} diff --git a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/Builder.java b/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/Builder.java deleted file mode 100644 index d1be531e..00000000 --- a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/Builder.java +++ /dev/null @@ -1,18 +0,0 @@ -package cc.allio.uno.component.flink.task; - -/** - * 任务构建器接口 - * - * @author jiangwei - * @date 2022/2/22 21:07 - * @since 1.0 - */ -public interface Builder { - - /** - * 对构建完成前的基础校验 - * - * @throws IllegalArgumentException 基准校验失败抛出的异常 - */ - void benchmarkCheck(); -} diff --git a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/CompositionAccumulateEventTimeTask.java b/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/CompositionAccumulateEventTimeTask.java deleted file mode 100644 index 6a2d227b..00000000 --- a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/CompositionAccumulateEventTimeTask.java +++ /dev/null @@ -1,61 +0,0 @@ -package cc.allio.uno.component.flink.task; - -import cc.allio.uno.core.util.CollectionUtils; -import cc.allio.uno.core.util.CoreBeanUtil; -import org.apache.flink.api.common.eventtime.WatermarkStrategy; -import org.apache.flink.api.java.tuple.Tuple3; -import org.apache.flink.streaming.api.datastream.DataStream; -import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator; -import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; -import org.apache.flink.streaming.api.functions.windowing.ProcessWindowFunction; -import org.apache.flink.streaming.api.windowing.assigners.SlidingEventTimeWindows; -import org.apache.flink.streaming.api.windowing.time.Time; -import org.apache.flink.streaming.api.windowing.windows.TimeWindow; -import org.apache.flink.util.Collector; - -import java.time.Duration; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - -/** - * 公用一个{@link StreamExecutionEnvironment},通过不同的窗口大小区分不同的流式计算任务。通过多流合并达到结果 - * - * @author jiangwei - * @date 2022/2/22 18:28 - * @since 1.0 - */ -public class CompositionAccumulateEventTimeTask extends AbstractFlinkTask { - - private final transient DataStream resultSetStream; - - public CompositionAccumulateEventTimeTask(FlinkTaskBuilder.CompositionEventTimeBuilder builder) { - super(builder); - List> eventTimes = builder.eventTimes; - List> unMergeStream = eventTimes.stream() - .map(t3 -> - createDataSource() - .assignTimestampsAndWatermarks( - WatermarkStrategy - .>forBoundedOutOfOrderness(Duration.ofMillis(t3.f2)) - .withTimestampAssigner((v, ctx) -> v.f1)) - .keyBy(v -> v.f0) - .window(SlidingEventTimeWindows.of(t3.f0, t3.f1)) - .process(new ProcessWindowFunction, C, String, TimeWindow>() { - @Override - public void process(String s, ProcessWindowFunction, C, String, TimeWindow>.Context context, Iterable> elements, Collector out) throws Exception { - C expect = builder.calculator.calculation(Optional.ofNullable(CoreBeanUtil.getContext()), CollectionUtils.newArrayList(elements)); - out.collect(expect); - } - }, builder.outputType)) - .collect(Collectors.toList()); - SingleOutputStreamOperator mergeStream = unMergeStream.get(0); - unMergeStream = unMergeStream.subList(1, unMergeStream.size()); - resultSetStream = mergeStream.union(unMergeStream.toArray(new DataStream[]{})); - } - - @Override - protected DataStream getResultSetStream() { - return resultSetStream; - } -} diff --git a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/FlinkEnvBuilder.java b/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/FlinkEnvBuilder.java deleted file mode 100644 index 09fac9bd..00000000 --- a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/FlinkEnvBuilder.java +++ /dev/null @@ -1,103 +0,0 @@ -package cc.allio.uno.component.flink.task; - -import cc.allio.uno.component.flink.UnoFlinkProperties; -import cc.allio.uno.core.StringPool; -import cc.allio.uno.core.util.ObjectUtils; -import org.apache.flink.streaming.api.TimeCharacteristic; -import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; -import org.springframework.util.StringUtils; - -import java.io.Serializable; - -/** - * flink环境构建 - * - * @author jiangwei - * @date 2022/3/1 15:28 - * @since 1.0.5 - */ -public class FlinkEnvBuilder implements Builder, Serializable { - - /** - * env名称 - */ - transient String name; - - /** - * flink配置属性 - */ - transient UnoFlinkProperties flinkProperties; - - FlinkEnvBuilder() { - - } - - /** - * 创建环境构建的骨架 - * - * @return 环境构造器实例对象 - */ - public static FlinkEnvBuilder skeleton() { - return new FlinkEnvBuilder(); - } - - public FlinkEnvBuilder buildEnvName(String name) { - this.name = name; - return this; - } - - public FlinkEnvBuilder builderEnvProperties(UnoFlinkProperties flinkProperties) { - this.flinkProperties = flinkProperties; - return this; - } - - /** - * 构建flink env对象 - * - * @return env对象实例 - */ - public StreamExecutionEnvironment build() { - benchmarkCheck(); - StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); - env.setParallelism(flinkProperties.getParallelism()); - env.getConfig().disableClosureCleaner(); - env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime); - boolean enableCheckpoint = flinkProperties.getCheckpoint().isEnable(); - if (enableCheckpoint) { - // 每隔1000 ms进行启动一个检查点【设置checkpoint的周期】 - env.enableCheckpointing(flinkProperties.getCheckpoint().getCheckpointPeriod()); - // 高级选项: - // 设置模式为exactly-once (这是默认值) - env.getCheckpointConfig().setCheckpointingMode(flinkProperties.getCheckpoint().getCheckpointMode()); - // 检查是否强制未对齐的检查点,尽管当前存在不可检查点的迭代反馈或自定义分区。 - env.getCheckpointConfig().setForceUnalignedCheckpoints(flinkProperties.getCheckpoint().isForceCheckpointing()); - // 确保检查点之间有至少500 ms的间隔【checkpoint最小间隔】 - env.getCheckpointConfig().setMinPauseBetweenCheckpoints(flinkProperties.getCheckpoint().getMinPauseBetweenCheckpoints()); - // 检查点必须在一分钟内完成,或者被丢弃【checkpoint的超时时间】 - env.getCheckpointConfig().setCheckpointTimeout(flinkProperties.getCheckpoint().getCheckPointTimeout()); - // 同一时间只允许进行一个检查点 - env.getCheckpointConfig().setMaxConcurrentCheckpoints(flinkProperties.getCheckpoint().getMaxConcurrentCheckpoints()); - // 表示一旦Flink处理程序被cancel后,会保留Checkpoint数据,以便根据实际需要恢复到指定的Checkpoint【详细解释见备注】 - //ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION:表示一旦Flink处理程序被cancel后,会保留Checkpoint数据,以便根据实际需要恢复到指定的Checkpoint - //ExternalizedCheckpointCleanup.DELETE_ON_CANCELLATION: 表示一旦Flink处理程序被cancel后,会删除Checkpoint数据,只有job执行失败的时候才会保存checkpoint - env.getCheckpointConfig().setExternalizedCheckpointCleanup(flinkProperties.getCheckpoint().getExternalizedCheckpointCleanup()); - //设置statebackend - env.getCheckpointConfig().setCheckpointStorage(flinkProperties - .getCheckpoint() - .getCheckpointPath() - .concat(StringPool.SLASH) - .concat(name)); - } - return env; - } - - @Override - public void benchmarkCheck() { - if (StringUtils.isEmpty(name)) { - throw new IllegalArgumentException("name must not null"); - } - if (ObjectUtils.isEmpty(flinkProperties)) { - throw new IllegalArgumentException("flink properties must not null"); - } - } -} diff --git a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/FlinkTaskBuilder.java b/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/FlinkTaskBuilder.java deleted file mode 100644 index 5532a69f..00000000 --- a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/FlinkTaskBuilder.java +++ /dev/null @@ -1,371 +0,0 @@ -package cc.allio.uno.component.flink.task; - -import cc.allio.uno.component.flink.Input; -import cc.allio.uno.component.flink.Output; -import cc.allio.uno.core.util.calculate.Calculator; -import org.apache.flink.api.common.io.GenericInputFormat; -import org.apache.flink.api.common.io.InputFormat; -import org.apache.flink.api.common.typeinfo.TypeHint; -import org.apache.flink.api.common.typeinfo.TypeInformation; -import org.apache.flink.api.java.tuple.Tuple3; -import org.apache.flink.streaming.api.functions.sink.SinkFunction; -import org.apache.flink.streaming.api.functions.source.SourceFunction; -import org.apache.flink.streaming.api.windowing.time.Time; -import org.springframework.util.StringUtils; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -/** - * Flink task构建器 - * - * @param 输入参数范型 - * @param 输出参数范型 - * @author jiangwei - * @date 2022/2/22 20:37 - * @see AccumulatedEventTimeTask - * @see AccumulatedCountTask - * @see CompositionAccumulateEventTimeTask - * @see #shelves() - * @since 1.0.4 - */ -public class FlinkTaskBuilder implements Builder, Serializable { - - transient String name; - transient TypeInformation> inputType; - transient TypeInformation outputType; - transient Calculator calculator; - transient GenericInputFormat> input; - transient SourceFunction> source; - transient SinkFunction sink; - - FlinkTaskBuilder() { - - } - - /** - * 创建一个任务构建器的空客架子 - * - * @return 任务构建器实例 - */ - public static FlinkTaskBuilder shelves() { - return new FlinkTaskBuilder<>(); - } - - /** - * 构建任务名称 - * - * @param name 任务名称 - * @return 当前结果对象 - */ - public FlinkTaskBuilder buildName(String name) { - this.name = name; - return this; - } - - /** - * 构建数据输出sink对象 - * - * @param sink sink对象实例 - * @return 当前结果对象 - * @see Output - */ - public FlinkTaskBuilder buildSink(SinkFunction sink) { - this.sink = sink; - return this; - } - - /** - * 构建输入对象,需要实现{@link } - * - * @param input 数据对象实例 - * @return 当前对象 - * @see InputFormat - * @see Input - */ - public FlinkTaskBuilder buildInput(GenericInputFormat> input) { - this.input = input; - return this; - } - - /** - * 构建数据源对象,需要实现{@link Input}接口 - * - * @param source 数据源对象实例 - * @return 当前构建对象 - * @see SourceFunction - */ - public FlinkTaskBuilder buildSource(SourceFunction> source) { - this.source = source; - return this; - } - - /** - * 构建输入类型实例对象 - * - * @param inputType {@link TypeInformation}实例对象 - * @return 当前构建器对象 - * @see TypeInformation#of(TypeHint) - */ - public FlinkTaskBuilder buildInputType(TypeInformation> inputType) { - this.inputType = inputType; - return this; - } - - /** - * 构建输出类型实例对象 - * - * @param outputType {@link TypeInformation}实例对象 - * @return 当前构建器对象 - * @see TypeInformation#of(TypeHint) - */ - public FlinkTaskBuilder buildOutputType(TypeInformation outputType) { - this.outputType = outputType; - return this; - } - - /** - * 构建计算器实例 - * - * @param calculator 计算器实例对象 - * @return 当前构造器对象 - */ - public FlinkTaskBuilder buildCalculator(Calculator calculator) { - this.calculator = calculator; - return this; - } - - /** - * 创建Counter任务构建器 - * - * @return 返回Counter任务实例 - */ - public CountBuilder count() { - return new CountBuilder<>(this); - } - - /** - * 创建event-time任务构建器 - * - * @return 返回event-time任务 - */ - public EventTimeBuilder eventTime() { - return new EventTimeBuilder<>(this); - } - - /** - * 当前构建对象的基准校验 - */ - @Override - public void benchmarkCheck() { - if (StringUtils.isEmpty(name)) { - throw new IllegalArgumentException("name must not null"); - } - } - - /** - * 构建普通的Ordinary flink任务 - * - * @return flink任务实例 - */ - public OrdinaryFlinkTask buildOrdinary() { - benchmarkCheck(); - return new OrdinaryFlinkTask<>(this); - } - - /** - * 根据其他分构建器重新构建任务数据 - * - * @param otherBuilder 其他构建器 - */ - protected void rebuild(FlinkTaskBuilder otherBuilder) { - this.name = otherBuilder.name; - this.inputType = otherBuilder.inputType; - this.outputType = otherBuilder.outputType; - this.calculator = otherBuilder.calculator; - this.sink = otherBuilder.sink; - this.input = otherBuilder.input; - this.source = otherBuilder.source; - } - - /** - * Count任务构建器 - * - * @param 输入参数范型 - * @param 输出参数范型 - */ - public static class CountBuilder extends FlinkTaskBuilder { - Integer threshold = 0; - Integer overlap = 0; - - CountBuilder(FlinkTaskBuilder taskBuilder) { - rebuild(taskBuilder); - } - - /** - * 构建计数累积阈值 - * - * @param threshold 阈值大小,值必须大于0 - * @return builder对象 - */ - public CountBuilder buildThreshold(Integer threshold) { - this.threshold = threshold; - return this; - } - - /** - * 构建计数允许的重叠值 - * - * @param overlap 阈值大小,值必须大于0 - * @return builder对象 - */ - public CountBuilder buildOverlap(Integer overlap) { - this.overlap = overlap; - return this; - } - - /** - * 构建{@link AccumulatedCountTask}对象 - * - * @return {@link AccumulatedCountTask}对象实例 - */ - public AccumulatedCountTask build() { - benchmarkCheck(); - return new AccumulatedCountTask<>(this); - } - - @Override - public void benchmarkCheck() { - super.benchmarkCheck(); - if (threshold < 0) { - throw new IllegalArgumentException("threshold must ge 0"); - } - if (overlap < 0) { - throw new IllegalArgumentException("overlap must ge 0"); - } - } - } - - /** - * event-time任务构建器 - * - * @param 输入参数范型 - * @param 输出参数范型 - */ - static class EventTimeBuilder extends FlinkTaskBuilder { - transient Time size; - transient Time slide; - Long tolerance; - - EventTimeBuilder(FlinkTaskBuilder taskBuilder) { - rebuild(taskBuilder); - } - - /** - * 构建event-time窗口大小 - * - * @param size {@link Time}实例参数 - * @return 当前builder对象 - */ - public EventTimeBuilder buildSize(Time size) { - this.size = size; - return this; - } - - /** - * 构建event-time滑动窗口大小 - * - * @param slide {@link Time}实例参数 - * @return 当前builder对象 - */ - public EventTimeBuilder buildSlide(Time slide) { - this.slide = slide; - return this; - } - - /** - * 构建watermark容忍度 - * - * @param tolerance {@link Long}对象实例 - * @return 当前builder对象 - */ - public EventTimeBuilder buildTolerance(Long tolerance) { - this.tolerance = tolerance; - return this; - } - - /** - * 构建输出{@link AccumulatedEventTimeTask}对象 - * - * @return {@link AccumulatedEventTimeTask}对象实例 - */ - public AccumulatedEventTimeTask build() { - benchmarkCheck(); - return new AccumulatedEventTimeTask<>(this); - } - - @Override - public void benchmarkCheck() { - super.benchmarkCheck(); - if (Objects.isNull(size)) { - throw new IllegalArgumentException("window size must not null"); - } - if (Objects.isNull(slide)) { - throw new IllegalArgumentException("window slide must not null"); - } - } - } - - /** - * 构建组合event-time任务构建器 - * - * @param 输入参数范型 - * @param 输出参数范型 - */ - static class CompositionEventTimeBuilder extends FlinkTaskBuilder { - - /** - * event-times集合对象 - */ - final transient List> eventTimes; - - CompositionEventTimeBuilder(FlinkTaskBuilder taskBuilder) { - rebuild(taskBuilder); - eventTimes = new ArrayList<>(); - } - - /** - * 添加一条event-time事件流 - * - * @param size event-time窗口大小 - * @param slide event-time滑动大小 - * @param tolerance 容忍度 - * @return 当前构建对象 - */ - public CompositionEventTimeBuilder append(Time size, Time slide, Long tolerance) { - eventTimes.add(Tuple3.of(size, slide, tolerance)); - return this; - } - - /** - * 构建{@link CompositionAccumulateEventTimeTask}对象 - * - * @return 返回{@{@link CompositionAccumulateEventTimeTask}实例 - */ - public CompositionAccumulateEventTimeTask build() { - benchmarkCheck(); - return new CompositionAccumulateEventTimeTask<>(this); - } - - @Override - public void benchmarkCheck() { - super.benchmarkCheck(); - if (eventTimes.isEmpty()) { - throw new IllegalArgumentException("at least one event-time stream"); - } - } - } - -} diff --git a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/OrdinaryFlinkTask.java b/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/OrdinaryFlinkTask.java deleted file mode 100644 index 01748ff4..00000000 --- a/uno-components/uno-component-flink/src/main/java/cc/allio/uno/component/flink/task/OrdinaryFlinkTask.java +++ /dev/null @@ -1,24 +0,0 @@ -package cc.allio.uno.component.flink.task; - -import org.apache.flink.streaming.api.datastream.DataStream; -import org.apache.flink.streaming.api.datastream.DataStreamSource; - -/** - * 没有实现function,对外提供{@link DataStreamSource}的Flink任务 - * - * @author jiangwei - * @date 2022/2/24 23:23 - * @since 1.0 - */ -public class OrdinaryFlinkTask extends AbstractFlinkTask { - - OrdinaryFlinkTask(FlinkTaskBuilder taskBuilder) { - super(taskBuilder); - } - - @Override - @Deprecated - protected DataStream getResultSetStream() { - return null; - } -} diff --git a/uno-components/uno-component-flink/src/test/java/cc/allio/uno/component/flink/task/FlinkAccumulatedCountTaskTest.java b/uno-components/uno-component-flink/src/test/java/cc/allio/uno/component/flink/task/FlinkAccumulatedCountTaskTest.java deleted file mode 100644 index 49bec091..00000000 --- a/uno-components/uno-component-flink/src/test/java/cc/allio/uno/component/flink/task/FlinkAccumulatedCountTaskTest.java +++ /dev/null @@ -1,67 +0,0 @@ -package cc.allio.uno.component.flink.task; - -import cc.allio.uno.test.BaseTestCase; -import org.apache.flink.api.common.typeinfo.TypeHint; -import org.apache.flink.api.common.typeinfo.TypeInformation; -import org.apache.flink.api.java.tuple.Tuple3; -import org.apache.flink.streaming.api.functions.sink.PrintSinkFunction; -import org.apache.flink.streaming.api.functions.source.FromElementsFunction; -import org.junit.jupiter.api.Test; -import reactor.core.publisher.FluxSink; - -import java.util.Arrays; -import java.util.List; - -class FlinkAccumulatedCountTaskTest extends BaseTestCase { - - FluxSink> emit; - - @Override - protected void onInit() throws Throwable { - - } - - @Test - void testCountBuilder() { - assertThrows(IllegalArgumentException.class, () -> { - FlinkTaskBuilder.shelves() - .count() - .build(); - }); - - } - - @Test - void testSum() throws Exception { - Tuple3 num1 = Tuple3.of("k1", 100L, 1); - Tuple3 num2 = Tuple3.of("k1", 200L, 2); - Tuple3 num3 = Tuple3.of("k1", 300L, 3); - AccumulatedCountTask task = FlinkTaskBuilder.shelves() - .buildName("count") - .buildInputType(TypeInformation.>of(new TypeHint>() { - })) - .buildOutputType(TypeInformation.of(new TypeHint() { - })) - .buildCalculator((context, obj) -> { - if (obj instanceof List) { - return ((List>) obj).stream() - .map(t -> t.f2) - .reduce(Integer::sum) - .get(); - } - return null; - }) - .buildSource(new FromElementsFunction<>(Arrays.asList(num1, num2, num3))) - .buildSink(new PrintSinkFunction<>()) - .count() - .buildThreshold(2) - .buildOverlap(1) - .build(); - task.run(); - } - - @Override - protected void onDown() throws Throwable { - - } -} diff --git a/uno-components/uno-component-flink/src/test/java/cc/allio/uno/component/flink/task/FlinkAccumulatedEventTimeTaskTest.java b/uno-components/uno-component-flink/src/test/java/cc/allio/uno/component/flink/task/FlinkAccumulatedEventTimeTaskTest.java deleted file mode 100644 index 8e80cded..00000000 --- a/uno-components/uno-component-flink/src/test/java/cc/allio/uno/component/flink/task/FlinkAccumulatedEventTimeTaskTest.java +++ /dev/null @@ -1,57 +0,0 @@ -package cc.allio.uno.component.flink.task; - -import cc.allio.uno.test.BaseTestCase; -import org.apache.flink.api.common.typeinfo.TypeHint; -import org.apache.flink.api.common.typeinfo.TypeInformation; -import org.apache.flink.api.java.tuple.Tuple3; -import org.apache.flink.streaming.api.functions.sink.PrintSinkFunction; -import org.apache.flink.streaming.api.functions.source.FromElementsFunction; -import org.apache.flink.streaming.api.windowing.time.Time; -import org.junit.jupiter.api.Test; - -import java.util.Arrays; -import java.util.List; - -class FlinkAccumulatedEventTimeTaskTest extends BaseTestCase { - @Override - protected void onInit() throws Throwable { - - } - - @Test - void testSum() throws Exception { - Tuple3 num1 = Tuple3.of("k1", 100L, 1); - Tuple3 num2 = Tuple3.of("k1", 120L, 2); - Tuple3 num3 = Tuple3.of("k1", 160L, 3); - TypeInformation> inputType = TypeInformation.>of(new TypeHint>() { - }); - AccumulatedEventTimeTask task = FlinkTaskBuilder.shelves() - .buildName("time_count") - .buildInputType(inputType) - .buildOutputType(TypeInformation.of(new TypeHint() { - })) - .buildCalculator((context, obj) -> { - if (obj instanceof List) { - return ((List>) obj).stream() - .map(t -> t.f2) - .reduce(Integer::sum) - .get(); - } - return null; - }) - .buildSource(new FromElementsFunction<>(Arrays.asList(num1, num2, num3))) - .buildSink(new PrintSinkFunction<>()) - .eventTime() - .buildSize(Time.milliseconds(100L)) - .buildSlide(Time.milliseconds(50L)) - .buildTolerance(0L) - .build(); - task.run(); - Thread.sleep(20000L); - } - - @Override - protected void onDown() throws Throwable { - - } -} diff --git a/uno-components/uno-component-flink/src/test/resources/log4j2.xml b/uno-components/uno-component-flink/src/test/resources/log4j2.xml deleted file mode 100644 index 5981d4fb..00000000 --- a/uno-components/uno-component-flink/src/test/resources/log4j2.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/uno-components/uno-component-http/pom.xml b/uno-components/uno-component-http/pom.xml index 58793fa3..5a189766 100644 --- a/uno-components/uno-component-http/pom.xml +++ b/uno-components/uno-component-http/pom.xml @@ -5,7 +5,7 @@ uno-components cc.allio - 1.1.4.RELEASE + 1.1.5.RELEASE ../pom.xml 4.0.0 diff --git a/uno-components/uno-component-http/src/main/java/cc/allio/uno/component/http/metadata/ClientResponseWrapper.java b/uno-components/uno-component-http/src/main/java/cc/allio/uno/component/http/metadata/ClientResponseWrapper.java index 3267556d..f06d4572 100644 --- a/uno-components/uno-component-http/src/main/java/cc/allio/uno/component/http/metadata/ClientResponseWrapper.java +++ b/uno-components/uno-component-http/src/main/java/cc/allio/uno/component/http/metadata/ClientResponseWrapper.java @@ -79,7 +79,7 @@ public Class expectType() { } @Override - public HttpStatus getStatus() { + public HttpStatusCode getStatus() { return response.statusCode(); } @@ -94,14 +94,14 @@ public Mono toExpect(Class expect) { JsonUtils.toJson(supplier.get().getBody())); throw WebClientResponseException.create( getStatus().value(), - getStatus().name(), + String.valueOf(getStatus().value()), response.headers().asHttpHeaders(), msg.getBytes(), null, new HttpRequest() { @Override - public String getMethodValue() { - return ClientResponseWrapper.this.getMethod().name(); + public HttpMethod getMethod() { + return supplier.get().getMethod(); } @Override diff --git a/uno-components/uno-component-http/src/main/java/cc/allio/uno/component/http/metadata/HttpResponseMetadata.java b/uno-components/uno-component-http/src/main/java/cc/allio/uno/component/http/metadata/HttpResponseMetadata.java index d244e75f..d2951d30 100644 --- a/uno-components/uno-component-http/src/main/java/cc/allio/uno/component/http/metadata/HttpResponseMetadata.java +++ b/uno-components/uno-component-http/src/main/java/cc/allio/uno/component/http/metadata/HttpResponseMetadata.java @@ -2,7 +2,7 @@ import cc.allio.uno.core.serializer.JsonNodeEnhancer; import com.fasterxml.jackson.databind.JsonNode; -import org.springframework.http.HttpStatus; +import org.springframework.http.HttpStatusCode; import org.springframework.web.reactive.function.client.WebClientResponseException; import reactor.core.publisher.Mono; @@ -18,9 +18,9 @@ public interface HttpResponseMetadata extends HttpMetadata { * 获取响应的状态 * * @return 响应的状态码 - * @see HttpStatus + * @see HttpStatusCode */ - HttpStatus getStatus(); + HttpStatusCode getStatus(); /** * 获取期望类型的结果的流数据 diff --git a/uno-components/uno-component-http/src/main/java/cc/allio/uno/component/http/metadata/interceptor/TokenInterceptor.java b/uno-components/uno-component-http/src/main/java/cc/allio/uno/component/http/metadata/interceptor/TokenInterceptor.java index 22e52ef5..4625b18f 100644 --- a/uno-components/uno-component-http/src/main/java/cc/allio/uno/component/http/metadata/interceptor/TokenInterceptor.java +++ b/uno-components/uno-component-http/src/main/java/cc/allio/uno/component/http/metadata/interceptor/TokenInterceptor.java @@ -5,14 +5,15 @@ import cc.allio.uno.core.chain.ChainContext; import cc.allio.uno.core.util.StringUtils; import com.google.common.collect.Maps; +import org.springframework.core.annotation.Order; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; +import org.springframework.http.HttpStatusCode; import org.springframework.http.MediaType; import org.springframework.util.ObjectUtils; import org.springframework.web.reactive.function.client.WebClientResponseException; import reactor.core.publisher.Mono; -import javax.annotation.Priority; import java.util.Arrays; import java.util.Map; import java.util.stream.Collectors; @@ -24,7 +25,7 @@ * @date 2022/8/24 17:11 * @since 1.0 */ -@Priority(Integer.MIN_VALUE) +@Order(Integer.MIN_VALUE) public class TokenInterceptor implements Interceptor { private final TokenRequest tokenRequest; @@ -56,7 +57,7 @@ public Mono execute(Chain { - HttpStatus status = error.getStatusCode(); + HttpStatusCode status = error.getStatusCode(); // 捕捉Token异常错误 if (HttpStatus.UNAUTHORIZED == status) { // 构建Token请求 diff --git a/uno-components/uno-component-kafka/pom.xml b/uno-components/uno-component-kafka/pom.xml index cab04dfc..a51878a2 100644 --- a/uno-components/uno-component-kafka/pom.xml +++ b/uno-components/uno-component-kafka/pom.xml @@ -5,7 +5,7 @@ uno-components cc.allio - 1.1.4.RELEASE + 1.1.5.RELEASE 4.0.0 diff --git a/uno-components/uno-component-netty/pom.xml b/uno-components/uno-component-netty/pom.xml index f204ea85..0fc3fe93 100644 --- a/uno-components/uno-component-netty/pom.xml +++ b/uno-components/uno-component-netty/pom.xml @@ -6,7 +6,7 @@ uno-components cc.allio - 1.1.4.RELEASE + 1.1.5.RELEASE uno-component-netty diff --git a/uno-components/uno-component-netty/src/main/java/cc/allio/uno/component/netty/Invoker.java b/uno-components/uno-component-netty/src/main/java/cc/allio/uno/component/netty/Invoker.java index 7e19c819..16aaaa5f 100644 --- a/uno-components/uno-component-netty/src/main/java/cc/allio/uno/component/netty/Invoker.java +++ b/uno-components/uno-component-netty/src/main/java/cc/allio/uno/component/netty/Invoker.java @@ -1,8 +1,8 @@ package cc.allio.uno.component.netty; import cc.allio.uno.component.netty.exception.RemoteSendException; +import cc.allio.uno.component.netty.exception.RemoteTimeoutException; import cc.allio.uno.component.netty.transport.body.Body; -import org.springframework.remoting.RemoteTimeoutException; /** * 调用 diff --git a/uno-components/uno-component-sequential/pom.xml b/uno-components/uno-component-sequential/pom.xml index 55d1fc93..36c2441b 100644 --- a/uno-components/uno-component-sequential/pom.xml +++ b/uno-components/uno-component-sequential/pom.xml @@ -5,7 +5,7 @@ uno-components cc.allio - 1.1.4.RELEASE + 1.1.5.RELEASE 4.0.0 diff --git a/uno-components/uno-component-sequential/src/main/java/cc/allio/uno/component/sequential/washer/WashMachine.java b/uno-components/uno-component-sequential/src/main/java/cc/allio/uno/component/sequential/washer/WashMachine.java index 1bf3a54f..d2f58efd 100644 --- a/uno-components/uno-component-sequential/src/main/java/cc/allio/uno/component/sequential/washer/WashMachine.java +++ b/uno-components/uno-component-sequential/src/main/java/cc/allio/uno/component/sequential/washer/WashMachine.java @@ -6,14 +6,14 @@ import cc.allio.uno.data.orm.executor.SQLCommandExecutor; import cc.allio.uno.data.orm.executor.SQLCommandExecutorFactory; import com.google.common.collect.Lists; +import jakarta.persistence.Id; +import jakarta.persistence.Table; import lombok.Data; import lombok.extern.slf4j.Slf4j; import reactor.core.Disposable; import reactor.core.publisher.Flux; import reactor.core.publisher.FluxSink; -import javax.persistence.Id; -import javax.persistence.Table; import java.util.*; import java.util.stream.Collectors; diff --git a/uno-components/uno-component-websocket/pom.xml b/uno-components/uno-component-websocket/pom.xml index 8a86d9d0..818ee4a2 100644 --- a/uno-components/uno-component-websocket/pom.xml +++ b/uno-components/uno-component-websocket/pom.xml @@ -5,7 +5,7 @@ uno-components cc.allio - 1.1.4.RELEASE + 1.1.5.RELEASE 4.0.0 diff --git a/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/BaseWebsocketEndpoint.java b/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/BaseWebsocketEndpoint.java index 2d93a086..03ed9af2 100644 --- a/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/BaseWebsocketEndpoint.java +++ b/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/BaseWebsocketEndpoint.java @@ -5,11 +5,11 @@ import cc.allio.uno.core.util.ClassUtils; import cc.allio.uno.core.util.CollectionUtils; import cc.allio.uno.core.util.JsonUtils; +import jakarta.websocket.*; import lombok.extern.slf4j.Slf4j; import reactor.core.publisher.Flux; import reactor.core.publisher.FluxSink; -import javax.websocket.*; import java.io.IOException; import java.text.ParseException; import java.util.ArrayList; diff --git a/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/ConnectionAuthenticator.java b/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/ConnectionAuthenticator.java index 4c036e12..2343bdb5 100644 --- a/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/ConnectionAuthenticator.java +++ b/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/ConnectionAuthenticator.java @@ -1,8 +1,8 @@ package cc.allio.uno.component.websocket; import com.google.auto.service.AutoService; +import jakarta.websocket.Session; -import javax.websocket.Session; import java.util.function.Predicate; /** @@ -22,5 +22,4 @@ public interface ConnectionAuthenticator { * @return 断言实例 */ Predicate auth(ConnectionContext connectionContext); - } diff --git a/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/ConnectionContext.java b/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/ConnectionContext.java index 486389c8..1e2aafe0 100644 --- a/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/ConnectionContext.java +++ b/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/ConnectionContext.java @@ -1,10 +1,9 @@ package cc.allio.uno.component.websocket; +import jakarta.websocket.EndpointConfig; import lombok.AllArgsConstructor; import lombok.Data; -import javax.websocket.EndpointConfig; - /** * 连接上下文 * diff --git a/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/EndpointAuthenticator.java b/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/EndpointAuthenticator.java index 51e275e2..b1032af1 100644 --- a/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/EndpointAuthenticator.java +++ b/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/EndpointAuthenticator.java @@ -2,14 +2,13 @@ import cc.allio.uno.core.util.ClassUtils; import cc.allio.uno.core.util.CollectionUtils; +import jakarta.websocket.Session; import org.springframework.core.annotation.AnnotationAwareOrderComparator; -import javax.websocket.Session; import java.util.Arrays; import java.util.List; import java.util.ServiceLoader; import java.util.function.Predicate; -import java.util.stream.Collectors; /** * WebSocket端点认证器 @@ -51,7 +50,7 @@ public EndpointAuthenticator(WebSocketEndpoint webSocketEndpoint) { Thread.currentThread().getContextClassLoader())) .stream() .filter(authFilter()) - .collect(Collectors.toList()); + .toList(); AnnotationAwareOrderComparator.sort(connectionAuthenticators); // 构建消息接收认证器 @@ -61,7 +60,7 @@ public EndpointAuthenticator(WebSocketEndpoint webSocketEndpoint) { Thread.currentThread().getContextClassLoader()))) .stream() .filter(authFilter()) - .collect(Collectors.toList()); + .toList(); AnnotationAwareOrderComparator.sort(receiveAuthenticators); // 构建消息发布认证器 @@ -71,7 +70,7 @@ public EndpointAuthenticator(WebSocketEndpoint webSocketEndpoint) { Thread.currentThread().getContextClassLoader()))) .stream() .filter(authFilter()) - .collect(Collectors.toList()); + .toList(); AnnotationAwareOrderComparator.sort(receiveAuthenticators); } diff --git a/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/MessagePublishAuthenticator.java b/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/MessagePublishAuthenticator.java index 4b216e74..db8f37e8 100644 --- a/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/MessagePublishAuthenticator.java +++ b/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/MessagePublishAuthenticator.java @@ -1,6 +1,7 @@ package cc.allio.uno.component.websocket; -import javax.websocket.Session; +import jakarta.websocket.Session; + import java.util.function.Predicate; /** diff --git a/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/MessageReceiveAuthenticator.java b/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/MessageReceiveAuthenticator.java index d432034b..3ad9c988 100644 --- a/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/MessageReceiveAuthenticator.java +++ b/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/MessageReceiveAuthenticator.java @@ -1,6 +1,7 @@ package cc.allio.uno.component.websocket; -import javax.websocket.Session; +import jakarta.websocket.Session; + import java.util.List; import java.util.function.Predicate; diff --git a/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/UnicastMessageAuthenticator.java b/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/UnicastMessageAuthenticator.java index bf5670b8..7ca4908a 100644 --- a/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/UnicastMessageAuthenticator.java +++ b/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/UnicastMessageAuthenticator.java @@ -1,8 +1,8 @@ package cc.allio.uno.component.websocket; import com.google.auto.service.AutoService; +import jakarta.websocket.Session; -import javax.websocket.Session; import java.util.function.Predicate; /** diff --git a/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/UnicastWebSocketEndpoint.java b/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/UnicastWebSocketEndpoint.java index a1fb6a82..756b8afd 100644 --- a/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/UnicastWebSocketEndpoint.java +++ b/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/UnicastWebSocketEndpoint.java @@ -1,10 +1,9 @@ package cc.allio.uno.component.websocket; import cc.allio.uno.core.util.JsonUtils; +import jakarta.websocket.Session; import lombok.Data; -import javax.websocket.Session; - /** * 单播推送WebSocket * diff --git a/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/WebSocketEndpoint.java b/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/WebSocketEndpoint.java index afb092d9..b6cb63c1 100644 --- a/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/WebSocketEndpoint.java +++ b/uno-components/uno-component-websocket/src/main/java/cc/allio/uno/component/websocket/WebSocketEndpoint.java @@ -5,10 +5,10 @@ import cc.allio.uno.core.util.template.Tokenizer; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ArrayNode; +import jakarta.websocket.Session; +import jakarta.websocket.server.ServerEndpoint; import org.springframework.beans.factory.NoSuchBeanDefinitionException; -import javax.websocket.Session; -import javax.websocket.server.ServerEndpoint; import java.text.ParseException; import java.util.List; import java.util.Map; @@ -123,7 +123,7 @@ default Optional combine(List buffer) { arrayNode.add(jsonNode); } } catch (Throwable ex) { - ex.printStackTrace(); + throw new RuntimeException(ex); } }); return Optional.of(arrayNode.toPrettyString()); diff --git a/uno-core/pom.xml b/uno-core/pom.xml index bfa65ed7..2b49b033 100644 --- a/uno-core/pom.xml +++ b/uno-core/pom.xml @@ -5,7 +5,7 @@ uno cc.allio - 1.1.4.RELEASE + 1.1.5.RELEASE 4.0.0 @@ -13,8 +13,8 @@ - com.alibaba - QLExpress + org.springframework.boot + spring-boot org.springframework @@ -28,10 +28,19 @@ org.springframework spring-test + + org.aspectj + aspectjweaver + + org.projectlombok lombok + + org.apache.commons + commons-lang3 + cglib @@ -77,14 +86,6 @@ io.projectreactor.netty reactor-netty - - org.springframework.data - spring-data-redis - - - redis.clients - jedis - org.junit.jupiter junit-jupiter @@ -95,10 +96,6 @@ concurrentunit test - - com.googlecode.aviator - aviator - \ No newline at end of file diff --git a/uno-core/src/main/java/cc/allio/uno/core/annotation/AnnotatedField.java b/uno-core/src/main/java/cc/allio/uno/core/annotation/AnnotatedField.java index cef00bc6..a444d7a9 100644 --- a/uno-core/src/main/java/cc/allio/uno/core/annotation/AnnotatedField.java +++ b/uno-core/src/main/java/cc/allio/uno/core/annotation/AnnotatedField.java @@ -1,7 +1,7 @@ package cc.allio.uno.core.annotation; import cc.allio.uno.core.annotation.document.DocumentFactoryException; -import org.apache.commons.lang.reflect.FieldUtils; +import org.apache.commons.lang3.reflect.FieldUtils; import java.lang.annotation.Annotation; import java.lang.reflect.Field; diff --git a/uno-core/src/main/java/cc/allio/uno/core/aop/JoinPointDelegate.java b/uno-core/src/main/java/cc/allio/uno/core/aop/JoinPointDelegate.java index a57d539d..7ff52fe9 100644 --- a/uno-core/src/main/java/cc/allio/uno/core/aop/JoinPointDelegate.java +++ b/uno-core/src/main/java/cc/allio/uno/core/aop/JoinPointDelegate.java @@ -1,16 +1,16 @@ package cc.allio.uno.core.aop; +import org.aspectj.lang.JoinPoint; import org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint; import org.springframework.aop.support.AopUtils; import org.springframework.util.ClassUtils; import java.lang.reflect.Method; import java.util.Arrays; -import java.util.stream.Collectors; public class JoinPointDelegate { - private final MethodInvocationProceedingJoinPoint point; + private final JoinPoint point; public JoinPointDelegate(MethodInvocationProceedingJoinPoint point) { this.point = point; @@ -42,7 +42,10 @@ public Object getTarget() { */ public Method getMethod() { String name = point.getSignature().getName(); - Class[] argClasses = Arrays.stream(point.getArgs()).map(Object::getClass).collect(Collectors.toList()).toArray(new Class[]{}); + Class[] argClasses = Arrays.stream(point.getArgs()) + .map(Object::getClass) + .toList() + .toArray(new Class[]{}); // 尝试知道获取AOP原始Class对象 Class maybeOriginClass = AopUtils.getTargetClass(point.getTarget()); return ClassUtils.getMethod(maybeOriginClass, name, argClasses); diff --git a/uno-core/src/main/java/cc/allio/uno/core/cache/Cache.java b/uno-core/src/main/java/cc/allio/uno/core/cache/Cache.java index 51625008..5577c393 100644 --- a/uno-core/src/main/java/cc/allio/uno/core/cache/Cache.java +++ b/uno-core/src/main/java/cc/allio/uno/core/cache/Cache.java @@ -16,7 +16,6 @@ * @date 2022/1/5 00:55 * @see InMemoryCache * @see ConcurrentMemoryCache - * @see RedisCache * @since 1.0 */ public interface Cache { diff --git a/uno-core/src/main/java/cc/allio/uno/core/cache/RedisCache.java b/uno-core/src/main/java/cc/allio/uno/core/cache/RedisCache.java deleted file mode 100644 index 05df34b5..00000000 --- a/uno-core/src/main/java/cc/allio/uno/core/cache/RedisCache.java +++ /dev/null @@ -1,203 +0,0 @@ -package cc.allio.uno.core.cache; - -import cc.allio.uno.core.util.JsonUtils; -import lombok.extern.slf4j.Slf4j; -import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.util.CollectionUtils; - -import java.util.Collections; -import java.util.List; -import java.util.concurrent.TimeUnit; -import java.util.function.BiPredicate; -import java.util.stream.Collectors; - -/** - * 基于Redis缓存
- * 使用CRUD会造成大量的IO开销,导致系统吞吐量下降。 - * - * @author jiangwei - * @date 2022/2/9 14:30 - * @since 1.0 - */ -@Slf4j -public class RedisCache implements Cache { - - /** - * redis缓存key - */ - private final CacheKey cacheKey; - - /** - * redis缓存实例 - */ - private final StringRedisTemplate redisTemplate; - - /** - * Redis缓存的具体类型 - */ - private final Class actualType; - - /** - * 比较器 - */ - private final BiPredicate comparator; - - private final Object lock = new Object(); - - public RedisCache(CacheKey cacheKey, - StringRedisTemplate redisTemplate, - Class actualType) { - this(cacheKey, redisTemplate, actualType, null); - } - - public RedisCache(CacheKey cacheKey, - StringRedisTemplate redisTemplate, - Class actualType, - BiPredicate comparator) { - this.cacheKey = cacheKey; - this.redisTemplate = redisTemplate; - this.actualType = actualType; - this.comparator = comparator; - } - - - - /** - * 如果存在则不放入缓存中 - */ - @Override - public T put(T cache) { - try { - synchronized (lock) { - Long index = index(cache); - if (index < 0) { - redisTemplate.opsForList().rightPush(cacheKey.getKey(), JsonUtils.toJson(cache)); - } - } - } catch (Exception e) { - log.error("Put into Redis cache failed", e); - return null; - } - return cache; - } - - /** - * 如果存在则不放入缓存中 - * - * @param caches 数据集合 - */ - @Override - public void putAll(List caches) { - synchronized (lock) { - // 获取不存在于缓存中的缓存数据 - List pushCache = caches.stream() - .filter(cache -> index(cache) < 0) - .collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(pushCache)) { - redisTemplate.opsForList().rightPushAll( - cacheKey.getKey(), - pushCache - .stream() - .map(JsonUtils::toJson) - .collect(Collectors.toList())); - } - - } - } - - @Override - public T get(int index) { - List cacheAll = get(); - return cacheAll.get(index); - } - - @Override - public List get(int start, int end) { - if (start < 0) { - throw new IndexOutOfBoundsException("start = " + start); - } - if (end > size()) { - throw new IndexOutOfBoundsException("end = " + end); - } - if (end < start) { - throw new IllegalArgumentException("start(" + start + - ") > end(" + end + ")"); - } - List buffer = redisTemplate.opsForList().range(cacheKey.getKey(), start, end); - if (CollectionUtils.isEmpty(buffer)) { - throw new IndexOutOfBoundsException("start(" + start + - ") end(" + end + ")"); - } - return buffer - .stream() - .map(cache -> JsonUtils.parse(cache, actualType)) - .collect(Collectors.toList()); - } - - @Override - public List get() { - List buffer = redisTemplate.opsForList().range(cacheKey.getKey(), 0, -1); - if (CollectionUtils.isEmpty(buffer)) { - return Collections.emptyList(); - } - return buffer - .stream() - .map(cache -> JsonUtils.parse(cache, actualType)) - .collect(Collectors.toList()); - } - - @Override - public void remove(int index) { - List cacheAll = get(); - synchronized (lock) { - cacheAll.remove(index); - clear(); - putAll(cacheAll); - } - } - - @Override - public void remove(T o) { - List cacheAll = get(); - synchronized (lock) { - Long index = index(o); - cacheAll.remove(index.intValue()); - clear(); - putAll(cacheAll); - } - } - - @Override - public void clear() { - redisTemplate.delete(cacheKey.getKey()); - } - - @Override - public BiPredicate comparator() { - return comparator; - } - - @Override - public Long size() { - return redisTemplate.opsForList().size(cacheKey.getKey()); - } - - /** - * 给Key设置过期时间 - */ - public void setExpirationTime(long timeOut,TimeUnit timeUnit){ - try { - synchronized (lock) { - List cacheList = get(); - if ((cacheList.size()) > 0) { - redisTemplate.expire(cacheKey.getKey(),timeOut,timeUnit); - }else { - log.info(String.format("There is no %s key in redis",cacheKey.getKey())); - } - } - } catch (Exception e) { - log.error("Set Expiration Time failed", e); - } - - } -} diff --git a/uno-core/src/main/java/cc/allio/uno/core/config/ConfigurationPropertiesRefresh.java b/uno-core/src/main/java/cc/allio/uno/core/config/ConfigurationPropertiesRefresh.java deleted file mode 100644 index b432ba53..00000000 --- a/uno-core/src/main/java/cc/allio/uno/core/config/ConfigurationPropertiesRefresh.java +++ /dev/null @@ -1,109 +0,0 @@ -package cc.allio.uno.core.config; - -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.NoSuchBeanDefinitionException; -import org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.context.properties.bind.Bindable; -import org.springframework.boot.context.properties.bind.Binder; -import org.springframework.boot.context.properties.bind.PropertySourcesPlaceholdersResolver; -import org.springframework.boot.context.properties.source.ConfigurationPropertySources; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.core.ResolvableType; -import org.springframework.core.annotation.AnnotationUtils; -import org.springframework.core.convert.support.DefaultConversionService; -import org.springframework.core.env.ConfigurableEnvironment; -import org.springframework.core.env.Environment; -import org.springframework.core.env.MutablePropertySources; -import org.springframework.validation.annotation.Validated; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Method; - -/** - * configuration properties refresh {@link ConfigurationProperties} - * - * @author jiangw - * @date 2021/1/9 14:50 - * @since 1.0 - */ -@Slf4j -public class ConfigurationPropertiesRefresh implements ValueRefresh { - - private Binder binder; - - private ConfigurationBeanFactoryMetadata beanFactoryMetadata; - - private static ConfigurationPropertiesRefresh refresh; - - private final ApplicationContext context; - - private ConfigurationPropertiesRefresh(ApplicationContext applicationContext) { - this.context = applicationContext; - try { - Environment environment = applicationContext.getEnvironment(); - if (environment instanceof ConfigurableEnvironment) { - ConfigurableEnvironment configurableEnvironment = (ConfigurableEnvironment) environment; - MutablePropertySources propertySources = configurableEnvironment.getPropertySources(); - this.binder = new Binder(ConfigurationPropertySources.from(propertySources), - new PropertySourcesPlaceholdersResolver(propertySources), - new DefaultConversionService(), - ((ConfigurableApplicationContext) applicationContext).getBeanFactory()::copyRegisteredEditorsTo); - } - - this.beanFactoryMetadata = applicationContext.getBean(ConfigurationBeanFactoryMetadata.class); - } catch (NoSuchBeanDefinitionException e) { - e.printStackTrace(); - } - } - - @Override - public synchronized void refresh(Object bean, String beanName) { - Class clazz = bean.getClass(); - ConfigurationProperties annotation = clazz.getAnnotation(ConfigurationProperties.class); - if (annotation != null && binder != null) { - ResolvableType type = getBeanType(bean, beanName); - Validated validated = getAnnotation(bean, beanName, Validated.class); - Annotation[] annotations = (validated != null) ? new Annotation[]{annotation, validated} - : new Annotation[]{annotation}; - Bindable target = Bindable.of(type).withExistingValue(bean).withAnnotations(annotations); - this.binder.bind(annotation.prefix(), target); - } - } - - @Override - public void refreshAll() { - String[] beanDefinitionNames = context.getBeanDefinitionNames(); - for (String beanName : beanDefinitionNames) { - Object bean = context.getBean(beanName); - refresh(bean, beanName); - } - } - - private ResolvableType getBeanType(Object bean, String beanName) { - Method factoryMethod = this.beanFactoryMetadata.findFactoryMethod(beanName); - if (factoryMethod != null) { - return ResolvableType.forMethodReturnType(factoryMethod); - } - return ResolvableType.forClass(bean.getClass()); - } - - private A getAnnotation(Object bean, String beanName, Class type) { - A annotation = this.beanFactoryMetadata.findFactoryAnnotation(beanName, type); - if (annotation == null) { - annotation = AnnotationUtils.findAnnotation(bean.getClass(), type); - } - return annotation; - } - - public static ConfigurationPropertiesRefresh getInstance(ApplicationContext applicationContext) { - if (applicationContext == null) { - throw new NullPointerException("application context is null"); - } - if (refresh == null) { - refresh = new ConfigurationPropertiesRefresh(applicationContext); - } - return refresh; - } -} diff --git a/uno-core/src/main/java/cc/allio/uno/core/config/SpringValueRefresh.java b/uno-core/src/main/java/cc/allio/uno/core/config/SpringValueRefresh.java deleted file mode 100644 index fa3fe0cd..00000000 --- a/uno-core/src/main/java/cc/allio/uno/core/config/SpringValueRefresh.java +++ /dev/null @@ -1,129 +0,0 @@ -package cc.allio.uno.core.config; - -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.BeansException; -import org.springframework.beans.TypeConverter; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.beans.factory.config.AutowireCapableBeanFactory; -import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; -import org.springframework.beans.factory.config.DependencyDescriptor; -import org.springframework.context.ApplicationContext; -import org.springframework.util.CollectionUtils; -import org.springframework.util.ReflectionUtils; - -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Set; - -/** - * {@link ValueRefresh} - * - * @author jiangw - * @date 2021/1/8 11:21 - * @since 1.0 - */ -@Slf4j -public class SpringValueRefresh implements ValueRefresh { - - private final ConfigurableListableBeanFactory beanFactory; - - private final ApplicationContext applicationContext; - - private static volatile SpringValueRefresh valueRefresh; - - private SpringValueRefresh(ApplicationContext applicationContext) { - this.applicationContext = applicationContext; - AutowireCapableBeanFactory beanFactory = applicationContext.getAutowireCapableBeanFactory(); - if (!(beanFactory instanceof ConfigurableListableBeanFactory)) { - throw new IllegalArgumentException( - "SpringValueRefresh requires a ConfigurableListableBeanFactory: " + beanFactory); - } - this.beanFactory = (ConfigurableListableBeanFactory) beanFactory; - - } - - /** - * 1.解析@Value - * 2.获取value(Property获取) - * 3.改变值 - */ - @Override - public synchronized void refresh(Object bean, String beanName) { - List elements = buildValueElements(bean, beanName); - if (!CollectionUtils.isEmpty(elements)) { - for (FieldValueElement element : elements) { - try { - element.inject(); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - } - } - - @Override - public void refreshAll() { - String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames(); - for (String beanName : beanDefinitionNames) { - Object bean = applicationContext.getBean(beanName); - refresh(bean, beanName); - } - } - - List buildValueElements(Object bean, String beanName) { - Class clazz = bean.getClass(); - List elements = new ArrayList<>(); - do { - Field[] declaredFields = clazz.getDeclaredFields(); - for (Field declaredField : declaredFields) { - Value value = declaredField.getAnnotation(Value.class); - if (value != null) { - elements.add(new FieldValueElement(bean, beanName, declaredField)); - } - } - clazz = clazz.getSuperclass(); - } while (clazz != null && clazz != Object.class); - return elements; - } - - class FieldValueElement { - - private final Object bean; - - private final Field field; - - private final String beanName; - - FieldValueElement(Object bean, String beanName, Field field) { - this.bean = bean; - this.beanName = beanName; - this.field = field; - } - - public void inject() throws IllegalAccessException { - Object value; - DependencyDescriptor desc = new DependencyDescriptor(this.field, true); - Set autowiredBeanNames = new LinkedHashSet<>(1); - TypeConverter typeConverter = beanFactory.getTypeConverter(); - try { - value = beanFactory.resolveDependency(desc, beanName, autowiredBeanNames, typeConverter); - } catch (BeansException | IllegalArgumentException ex) { - log.info("@Value parse error: {}", ex.getMessage()); - value = ""; - } - if (value != null) { - ReflectionUtils.makeAccessible(field); - this.field.set(bean, value); - } - } - } - - public static SpringValueRefresh getInstance(ApplicationContext applicationContext) { - if (valueRefresh == null) { - valueRefresh = new SpringValueRefresh(applicationContext); - } - return valueRefresh; - } -} diff --git a/uno-core/src/main/java/cc/allio/uno/core/config/ValueRefresh.java b/uno-core/src/main/java/cc/allio/uno/core/config/ValueRefresh.java deleted file mode 100644 index 11428c7b..00000000 --- a/uno-core/src/main/java/cc/allio/uno/core/config/ValueRefresh.java +++ /dev/null @@ -1,29 +0,0 @@ -package cc.allio.uno.core.config; - -/** - * 刷新Spring配置文件 - * - * @author jiangw - * @date 2021/1/8 11:12 - * @see SpringValueRefresh - * @see ConfigurationPropertiesRefresh - * @since 1.0 - */ -public interface ValueRefresh { - - /** - * 当配置改变时,进行@Value的刷新,其内部实现是基于spring event模型,并且通过内部api实现 - * - * @param bean spring容器中的bean - * @param beanName bean名称 - */ - void refresh(Object bean, String beanName); - - - /** - * 根据Spring 上下文刷新所有的bean Conguration - * - * @throws NoSuchMethodException 当没有找到bean时抛出异常 - */ - void refreshAll(); -} diff --git a/uno-core/src/main/java/cc/allio/uno/core/proxy/ByteBuddyProxyInvocation.java b/uno-core/src/main/java/cc/allio/uno/core/proxy/ByteBuddyProxyInvocation.java index 20540819..febb39ae 100644 --- a/uno-core/src/main/java/cc/allio/uno/core/proxy/ByteBuddyProxyInvocation.java +++ b/uno-core/src/main/java/cc/allio/uno/core/proxy/ByteBuddyProxyInvocation.java @@ -1,6 +1,7 @@ package cc.allio.uno.core.proxy; import cc.allio.uno.core.StringPool; +import cc.allio.uno.core.util.StringUtils; import cc.allio.uno.core.util.id.IdGenerator; import net.bytebuddy.ByteBuddy; import net.bytebuddy.dynamic.DynamicType; @@ -8,7 +9,6 @@ import net.bytebuddy.implementation.MethodDelegation; import net.bytebuddy.implementation.bind.annotation.*; import net.bytebuddy.matcher.ElementMatchers; -import org.apache.commons.lang.StringUtils; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; diff --git a/uno-core/src/main/java/cc/allio/uno/core/proxy/ComposableInvocationInterceptor.java b/uno-core/src/main/java/cc/allio/uno/core/proxy/ComposableInvocationInterceptor.java index 96fa9156..ad3021bc 100644 --- a/uno-core/src/main/java/cc/allio/uno/core/proxy/ComposableInvocationInterceptor.java +++ b/uno-core/src/main/java/cc/allio/uno/core/proxy/ComposableInvocationInterceptor.java @@ -2,7 +2,7 @@ import lombok.extern.slf4j.Slf4j; import net.sf.cglib.proxy.MethodProxy; -import org.apache.commons.beanutils.MethodUtils; +import org.apache.commons.lang3.reflect.MethodUtils; import org.springframework.core.annotation.AnnotationUtils; import java.lang.reflect.Method; diff --git a/uno-core/src/main/java/cc/allio/uno/core/task/CacheableCalculateTask.java b/uno-core/src/main/java/cc/allio/uno/core/task/CacheableCalculateTask.java deleted file mode 100644 index 63fa2467..00000000 --- a/uno-core/src/main/java/cc/allio/uno/core/task/CacheableCalculateTask.java +++ /dev/null @@ -1,105 +0,0 @@ -package cc.allio.uno.core.task; - -import cc.allio.uno.core.cache.Cache; -import cc.allio.uno.core.cache.CacheKey; -import cc.allio.uno.core.cache.InitializationCache; -import cc.allio.uno.core.cache.RedisCache; -import cc.allio.uno.core.util.CoreBeanUtil; -import lombok.extern.slf4j.Slf4j; -import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.context.ApplicationContext; -import org.springframework.beans.factory.NoSuchBeanDefinitionException; -import reactor.core.publisher.EmitterProcessor; -import reactor.core.publisher.Flux; -import reactor.core.publisher.FluxSink; - -import java.text.ParseException; -import java.util.List; -import java.util.function.Consumer; - -/** - * 可以缓存计算的任务。
- * 1.创建下游信号源Sink,完成计算逻辑,向下游传递数据。
- * - * 2.缓存采取Redis缓存。目的是任务是定时触发,当服务重启后,内存数据被清空,数据丢失。数据采用redis进行缓存。 - * 在初始化时候会从redis中读取数据,由信号源触发下游处理链缓存数据未处理完成数据。在定时完成后会把数据清空。 - * - * @author jiangwei - * @date 2021/12/24 16:44 - * @since 1.0 - */ -@Slf4j -public class CacheableCalculateTask extends ProxyBufferTimerSegmentTask { - - /** - * 缓存统计数据数据触发源 - */ - private FluxSink bufferSink; - - private final Cache cache; - - /** - * 创建基于Redis缓存定时的计算的任务 - * - * @param cronExpression Cron表达式 - * @param cacheKey Key - * @throws ParseException Cron表达式解析错误时抛出 - */ - public CacheableCalculateTask(String cronExpression, - CacheKey cacheKey, - Class actualType) throws ParseException { - this(cronExpression, EmitterProcessor.create(false), cacheKey, actualType); - } - - /** - * 创建基于Redis缓存定时的计算的任务 - * - * @param cronExpression Cron表达式 - * @param dataPublisher 数据发布者 - * @param cacheKey Key - * @throws ParseException Cron表达式解析错误时抛出 - * @throws NullPointerException {@link CoreBeanUtil}的{@link ApplicationContext}为空是抛出 - * @throws NoSuchBeanDefinitionException {@link CoreBeanUtil#getBean(Class)}没有找到bean时抛出 - */ - public CacheableCalculateTask(String cronExpression, - EmitterProcessor dataPublisher, - CacheKey cacheKey, - Class actualType) throws ParseException { - super(cronExpression); - StringRedisTemplate redisTemplate = CoreBeanUtil.getBean(StringRedisTemplate.class); - this.cache = new InitializationCache<>( - new RedisCache<>(cacheKey, redisTemplate, actualType), - (cache, buffer) -> - dataPublisher - .transform(flux -> { - bufferSink = ((EmitterProcessor) flux).sink(FluxSink.OverflowStrategy.BUFFER); - return Flux.fromIterable(buffer); - }) - .onErrorContinue((error, sequential) -> log.error("Deal cacheable data failed", error)) - .subscribe(sequential -> bufferSink.next(sequential))); - dataPublisher.subscribe(cache::put); - } - - /** - * 需要保存到缓存中触发 - * - * @param sequential 时序数据对象 - */ - public void onSaveBuffer(T sequential) { - bufferSink.next(sequential); - } - - /** - * 定时器到时触发,每调用一次都会定时器添加一个任务。 - * - * @param calculator 真正执行计算的对象 - */ - public void onCalculate(Consumer> calculator) { - addComputableTask((buffer, current) -> calculator.accept(buffer)); - } - - @Override - protected Cache getCache() { - return cache; - } -} diff --git a/uno-core/src/main/java/cc/allio/uno/core/util/ClassUtils.java b/uno-core/src/main/java/cc/allio/uno/core/util/ClassUtils.java index 43d42023..62483a6b 100644 --- a/uno-core/src/main/java/cc/allio/uno/core/util/ClassUtils.java +++ b/uno-core/src/main/java/cc/allio/uno/core/util/ClassUtils.java @@ -5,7 +5,6 @@ import lombok.NonNull; import org.springframework.core.annotation.AnnotatedElementUtils; import org.springframework.core.annotation.AnnotationAwareOrderComparator; -import sun.reflect.generics.reflectiveObjects.TypeVariableImpl; import java.lang.annotation.Annotation; import java.lang.reflect.*; @@ -100,38 +99,6 @@ public static Class getArrayClassType(Class arrayClass) { return null; } - /** - * 获取目标Class对象所有的泛型数组 - * - * @param clazz 待转换的Class对象 - * @param 对象范型 - * @return 获取到的字符串数组 - */ - public static String[] getAllGenericClassNames(Class clazz) { - if (clazz == null) { - return new String[0]; - } - Type type = clazz.getGenericSuperclass(); - if (type instanceof ParameterizedType) { - Type[] typeArguments = ((ParameterizedType) type).getActualTypeArguments(); - if (typeArguments.length == 0) { - throw new NullPointerException(String.format("target %s can't find generic", clazz.getName())); - } - - return Arrays.stream(typeArguments) - .flatMap(argument -> { - if (argument instanceof TypeVariableImpl) { - return Stream.of(((TypeVariableImpl) argument).getBounds()); - } - return Stream.of(argument); - }) - .map(Type::getTypeName) - .collect(Collectors.toList()) - .toArray(new String[]{}); - } - return new String[0]; - } - /** * 获取真实泛型类型(获取存在的第一个) * diff --git a/uno-core/src/main/java/cc/allio/uno/core/util/calculate/Calculator.java b/uno-core/src/main/java/cc/allio/uno/core/util/calculate/Calculator.java deleted file mode 100644 index ea3ae05f..00000000 --- a/uno-core/src/main/java/cc/allio/uno/core/util/calculate/Calculator.java +++ /dev/null @@ -1,36 +0,0 @@ -package cc.allio.uno.core.util.calculate; - -import cc.allio.uno.core.util.template.ExpressionTemplate; -import com.ql.util.express.ExpressRunner; -import org.springframework.context.ApplicationContext; -import reactor.core.publisher.Mono; - -import java.io.Serializable; -import java.util.Optional; - -/** - * 计算器
- * 计算内部是一个无状态的过程,不能依赖于其他的数据来源 - * - * @author jiangwei - * @date 2022/1/11 09:41 - * @since 1.0 - */ -@FunctionalInterface -public interface Calculator extends Serializable { - - /** - * 触发计算 - * - * @param context Spring应用上下文 - * @param obj 计算实体 - * @return 返回计算结果 - * @see ExpressionTemplate - * @see ExpressRunner - */ - default Mono calculate(Optional context, Object obj) { - return Mono.justOrEmpty(calculation(context, obj)); - } - - C calculation(Optional context, Object obj); -} diff --git a/uno-data/pom.xml b/uno-data/pom.xml index f8ccc028..243e9253 100644 --- a/uno-data/pom.xml +++ b/uno-data/pom.xml @@ -5,12 +5,12 @@ uno cc.allio - 1.1.4.RELEASE + 1.1.5.RELEASE 4.0.0 uno-data - 1.1.4.RELEASE + 1.1.5.RELEASE summary: uno数据层操作,包含于数据源、mybatis-plus、reactive-jpa、elasticsearch、influxdb等(依赖包于provide) features: 提供数据聚合等操作 diff --git a/uno-data/src/main/java/cc/allio/uno/data/orm/executor/elasticsearch/EsSQLCommandExecutor.java b/uno-data/src/main/java/cc/allio/uno/data/orm/executor/elasticsearch/EsSQLCommandExecutor.java index dbf5f771..265f7bc2 100644 --- a/uno-data/src/main/java/cc/allio/uno/data/orm/executor/elasticsearch/EsSQLCommandExecutor.java +++ b/uno-data/src/main/java/cc/allio/uno/data/orm/executor/elasticsearch/EsSQLCommandExecutor.java @@ -188,7 +188,8 @@ private EsResultSet explainSearchRes(SearchResponse response) { // 设置文档基础信息 resultGroup.setId(hit.id()); resultGroup.setIndex(hit.index()); - resultGroup.setType(Optional.ofNullable(hit.type()).orElse(StringPool.EMPTY)); + // TODO 确定es返回字段的类型 +// resultGroup.setType(Optional.ofNullable(hit).orElse(StringPool.EMPTY)); resultGroup.setScore(Optional.ofNullable(hit.score()).orElse(0D)); // 设置分片信息 resultGroup.setNodeId(hit.node()); diff --git a/uno-data/src/main/java/cc/allio/uno/data/orm/jpa/model/BaseEntity.java b/uno-data/src/main/java/cc/allio/uno/data/orm/jpa/model/BaseEntity.java index a6da13b5..f04a9b09 100644 --- a/uno-data/src/main/java/cc/allio/uno/data/orm/jpa/model/BaseEntity.java +++ b/uno-data/src/main/java/cc/allio/uno/data/orm/jpa/model/BaseEntity.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import jakarta.persistence.*; import lombok.*; import org.hibernate.annotations.GenericGenerator; import org.springframework.data.annotation.LastModifiedDate; @@ -11,7 +12,6 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener; import org.springframework.format.annotation.DateTimeFormat; -import javax.persistence.*; import java.io.Serializable; import java.util.Date; diff --git a/uno-data/src/main/java/cc/allio/uno/data/orm/jpa/repository/JpaRepositoryImpl.java b/uno-data/src/main/java/cc/allio/uno/data/orm/jpa/repository/JpaRepositoryImpl.java index 37f89b67..bce4dc37 100644 --- a/uno-data/src/main/java/cc/allio/uno/data/orm/jpa/repository/JpaRepositoryImpl.java +++ b/uno-data/src/main/java/cc/allio/uno/data/orm/jpa/repository/JpaRepositoryImpl.java @@ -1,10 +1,9 @@ package cc.allio.uno.data.orm.jpa.repository; +import jakarta.persistence.EntityManager; import org.springframework.data.jpa.repository.support.JpaEntityInformation; import org.springframework.data.jpa.repository.support.SimpleJpaRepository; -import javax.persistence.EntityManager; - /** * JPA Repository * diff --git a/uno-data/src/main/java/cc/allio/uno/data/orm/repository/ApplicationRepository.java b/uno-data/src/main/java/cc/allio/uno/data/orm/repository/ApplicationRepository.java deleted file mode 100644 index 17915eec..00000000 --- a/uno-data/src/main/java/cc/allio/uno/data/orm/repository/ApplicationRepository.java +++ /dev/null @@ -1,23 +0,0 @@ -package cc.allio.uno.data.orm.repository; - -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; - -public abstract class ApplicationRepository implements ApplicationContextAware, InitializingBean { - - private ApplicationContext applicationContext; - - @Override - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { - this.applicationContext = applicationContext; - } - - @Override - public void afterPropertiesSet() throws Exception { - initialization(applicationContext); - } - - protected abstract void initialization(ApplicationContext applicationContext); -} diff --git a/uno-data/src/main/java/cc/allio/uno/data/orm/repository/LocalRepository.java b/uno-data/src/main/java/cc/allio/uno/data/orm/repository/LocalRepository.java deleted file mode 100644 index 80264085..00000000 --- a/uno-data/src/main/java/cc/allio/uno/data/orm/repository/LocalRepository.java +++ /dev/null @@ -1,111 +0,0 @@ -package cc.allio.uno.data.orm.repository; - -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; -import org.springframework.data.repository.PagingAndSortingRepository; -import org.springframework.data.repository.core.EntityInformation; - -import java.io.Serializable; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.stream.Collectors; - -/** - * 默认本地存储 - * - * @author jiangwei - * @date 2022/11/24 01:38 - * @since 1.1.2 - */ -public abstract class LocalRepository extends ApplicationRepository implements PagingAndSortingRepository { - - private final Map local = Maps.newConcurrentMap(); - private final EntityInformation metadata; - - protected LocalRepository(EntityInformation metadata) { - this.metadata = metadata; - } - - @Override - public S save(S entity) { - ID id = metadata.getId(entity); - local.put(id, entity); - return entity; - } - - @Override - public Iterable saveAll(Iterable entities) { - entities.forEach(this::save); - return entities; - } - - @Override - public Optional findById(ID id) { - return Optional.ofNullable(local.get(id)); - } - - @Override - public boolean existsById(ID id) { - return local.containsKey(id); - } - - @Override - public Iterable findAll() { - return local.values(); - } - - @Override - public Iterable findAllById(Iterable ids) { - return Lists.newArrayList(ids) - .stream() - .map(id -> { - Optional find = findById(id); - return find.orElse(null); - }) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - } - - @Override - public long count() { - return local.size(); - } - - @Override - public void deleteById(ID id) { - local.remove(id); - } - - @Override - public void delete(T entity) { - ID id = metadata.getId(entity); - if (id != null) { - local.remove(id); - } - } - - @Override - public void deleteAll(Iterable entities) { - entities.forEach(this::delete); - } - - @Override - public void deleteAll() { - local.clear(); - } - - @Override - public Iterable findAll(Sort sort) { - return null; - } - - @Override - public Page findAll(Pageable pageable) { - return null; - } - -} diff --git a/uno-data/src/main/java/cc/allio/uno/data/orm/repository/ReactiveLocalRepository.java b/uno-data/src/main/java/cc/allio/uno/data/orm/repository/ReactiveLocalRepository.java deleted file mode 100644 index 622c28a5..00000000 --- a/uno-data/src/main/java/cc/allio/uno/data/orm/repository/ReactiveLocalRepository.java +++ /dev/null @@ -1,148 +0,0 @@ -package cc.allio.uno.data.orm.repository; - -import com.google.common.collect.Maps; -import org.reactivestreams.Publisher; -import org.springframework.data.domain.Sort; -import org.springframework.data.r2dbc.repository.R2dbcRepository; -import org.springframework.data.repository.core.EntityInformation; -import reactor.core.publisher.Flux; -import reactor.core.publisher.Mono; - -import java.io.Serializable; -import java.util.Map; - -/** - * Reactive Local Repository - * - * @author jiangwei - * @date 2022/12/27 13:54 - * @since 1.1.4 - */ -public abstract class ReactiveLocalRepository extends ApplicationRepository implements R2dbcRepository { - - private final Map local = Maps.newConcurrentMap(); - private final EntityInformation metadata; - - protected ReactiveLocalRepository(EntityInformation metadata) { - this.metadata = metadata; - } - - @Override - public Flux findAll(Sort sort) { - return null; - } - - @Override - public Mono save(S entity) { - ID id = metadata.getId(entity); - local.put(id, entity); - return Mono.just(entity); - } - - @Override - public Flux saveAll(Iterable entities) { - return Flux.fromIterable(entities) - .doOnNext(entity -> { - ID id = metadata.getId(entity); - local.put(id, entity); - }); - } - - @Override - public Flux saveAll(Publisher entityStream) { - return Flux.from(entityStream) - .doOnNext(entity -> { - ID id = metadata.getId(entity); - local.put(id, entity); - }); - } - - @Override - public Mono findById(ID id) { - return Mono.justOrEmpty(local.get(id)); - } - - @Override - public Mono findById(Publisher id) { - return Mono.from(id) - .map(local::get); - } - - @Override - public Mono existsById(ID id) { - return Mono.just(local.containsKey(id)); - } - - @Override - public Mono existsById(Publisher id) { - return Mono.just(id) - .map(local::containsKey); - } - - @Override - public Flux findAll() { - return Flux.fromIterable(local.values()); - } - - @Override - public Flux findAllById(Iterable ids) { - return Flux.fromIterable(ids) - .map(local::get); - } - - @Override - public Flux findAllById(Publisher idStream) { - return Flux.from(idStream) - .map(local::get); - } - - @Override - public Mono count() { - return Mono.just((long) local.size()); - } - - @Override - public Mono deleteById(ID id) { - return deleteById(Mono.just(id)); - } - - @Override - public Mono deleteById(Publisher id) { - return Mono.from(id) - .doOnNext(local::remove) - .then(Mono.empty()); - } - - @Override - public Mono delete(T entity) { - ID id = metadata.getId(entity); - local.remove(id); - return Mono.empty(); - } - - @Override - public Mono deleteAll(Iterable entities) { - return Flux.fromIterable(entities) - .doOnNext(entity -> { - ID id = metadata.getId(entity); - local.remove(id); - }) - .then(Mono.empty()); - } - - @Override - public Mono deleteAll(Publisher entityStream) { - return Flux.from(entityStream) - .doOnNext(entity -> { - ID id = metadata.getId(entity); - local.remove(id); - }) - .then(Mono.empty()); - } - - @Override - public Mono deleteAll() { - local.clear(); - return Mono.empty(); - } -} diff --git a/uno-data/src/main/java/cc/allio/uno/data/orm/sql/FromStatement.java b/uno-data/src/main/java/cc/allio/uno/data/orm/sql/FromStatement.java index 24a72dd7..c8fe274a 100644 --- a/uno-data/src/main/java/cc/allio/uno/data/orm/sql/FromStatement.java +++ b/uno-data/src/main/java/cc/allio/uno/data/orm/sql/FromStatement.java @@ -32,7 +32,8 @@ public FromStatement(ExpressionContext expressionContext) { @Override public FromStatement from(Class tableEntity) throws SQLException { - javax.persistence.Table table = ClassUtils.getAnnotation(tableEntity, javax.persistence.Table.class); + + jakarta.persistence.Table table = ClassUtils.getAnnotation(tableEntity, jakarta.persistence.Table.class); if (table == null) { throw new SQLException("Specifies @Table annotation for entity"); } @@ -74,7 +75,7 @@ public Collection getExpressions() { @Override public void syntaxCheck() throws SQLException { - + // TODO document why this method is empty } @Override diff --git a/uno-data/src/main/java/cc/allio/uno/data/orm/sql/PojoWrapper.java b/uno-data/src/main/java/cc/allio/uno/data/orm/sql/PojoWrapper.java index 72220323..25b39f61 100644 --- a/uno-data/src/main/java/cc/allio/uno/data/orm/sql/PojoWrapper.java +++ b/uno-data/src/main/java/cc/allio/uno/data/orm/sql/PojoWrapper.java @@ -11,9 +11,9 @@ import cc.allio.uno.data.orm.type.JavaType; import cc.allio.uno.data.orm.type.StringJavaType; import cc.allio.uno.data.orm.type.TypeRegistry; +import jakarta.persistence.Id; import org.springframework.core.annotation.AnnotationUtils; -import javax.persistence.Id; import java.lang.reflect.Field; import java.util.Date; import java.util.List; @@ -108,7 +108,7 @@ public Object findByColumnValue(String column) { */ public Table getTable() { // 取jpa注解 - javax.persistence.Table table = AnnotationUtils.findAnnotation(pojoClass, javax.persistence.Table.class); + jakarta.persistence.Table table = AnnotationUtils.findAnnotation(pojoClass, jakarta.persistence.Table.class); String indexName = StringPool.EMPTY; if (table != null) { indexName = table.name(); @@ -129,7 +129,7 @@ public Table getTable() { public List getSQLColumnDef() { return pojoFields.stream() .map(SQLColumnDef::of) - .collect(Collectors.toList()); + .toList(); } /** diff --git a/uno-data/src/main/java/cc/allio/uno/data/orm/sql/SQLColumnDef.java b/uno-data/src/main/java/cc/allio/uno/data/orm/sql/SQLColumnDef.java index f13e23a6..fb67de0f 100644 --- a/uno-data/src/main/java/cc/allio/uno/data/orm/sql/SQLColumnDef.java +++ b/uno-data/src/main/java/cc/allio/uno/data/orm/sql/SQLColumnDef.java @@ -9,11 +9,11 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.google.common.collect.Lists; +import jakarta.persistence.Column; +import jakarta.persistence.Id; import lombok.Builder; import lombok.Data; -import javax.persistence.Column; -import javax.persistence.Id; import java.lang.reflect.Field; import java.util.Collection; diff --git a/uno-data/src/main/java/cc/allio/uno/data/orm/sql/dml/druid/DruidSelectFrom.java b/uno-data/src/main/java/cc/allio/uno/data/orm/sql/dml/druid/DruidSelectFrom.java index ff86550d..13e49cb4 100644 --- a/uno-data/src/main/java/cc/allio/uno/data/orm/sql/dml/druid/DruidSelectFrom.java +++ b/uno-data/src/main/java/cc/allio/uno/data/orm/sql/dml/druid/DruidSelectFrom.java @@ -7,9 +7,9 @@ import cc.allio.uno.data.orm.sql.dml.JoinFrom; import cc.allio.uno.data.orm.sql.dml.SelectFrom; import cc.allio.uno.data.orm.sql.dml.SubQueryFrom; +import jakarta.persistence.Table; import org.springframework.core.annotation.AnnotationUtils; -import javax.persistence.Table; import java.util.Collection; /** diff --git a/uno-data/src/main/java/cc/allio/uno/data/query/mybatis/HigherQuery.java b/uno-data/src/main/java/cc/allio/uno/data/query/mybatis/HigherQuery.java index 54f60ae5..cd943ec5 100644 --- a/uno-data/src/main/java/cc/allio/uno/data/query/mybatis/HigherQuery.java +++ b/uno-data/src/main/java/cc/allio/uno/data/query/mybatis/HigherQuery.java @@ -1,6 +1,5 @@ package cc.allio.uno.data.query.mybatis; -import cc.allio.uno.data.query.mybatis.mapper.QueryMapper; import cc.allio.uno.data.query.stream.ValueTime; import java.util.Collection; @@ -11,7 +10,6 @@ * * @author jiangwei * @date 2023/4/17 18:17 - * @see QueryMapper * @see BaseHigherQuery * @since 1.1.4 */ diff --git a/uno-data/src/main/java/cc/allio/uno/data/query/mybatis/UnoDataMybatisAutoConfiguration.java b/uno-data/src/main/java/cc/allio/uno/data/query/mybatis/UnoDataMybatisAutoConfiguration.java index 148329cc..106eca78 100644 --- a/uno-data/src/main/java/cc/allio/uno/data/query/mybatis/UnoDataMybatisAutoConfiguration.java +++ b/uno-data/src/main/java/cc/allio/uno/data/query/mybatis/UnoDataMybatisAutoConfiguration.java @@ -1,26 +1,20 @@ package cc.allio.uno.data.query.mybatis; -import cc.allio.uno.data.query.mybatis.injector.QueryList; import cc.allio.uno.data.query.mybatis.query.interceptor.QueryInterceptor; import cc.allio.uno.data.query.mybatis.type.DateDimensionTypeHandler; import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; import com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties; -import com.baomidou.mybatisplus.core.injector.AbstractMethod; -import com.baomidou.mybatisplus.core.injector.ISqlInjector; import org.apache.ibatis.type.TypeHandlerRegistry; import org.springframework.beans.BeansException; import org.springframework.beans.factory.SmartInitializingSingleton; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.EnableAspectJAutoProxy; -import java.util.List; - /** * UNO-DATA配置 * @@ -36,22 +30,11 @@ public class UnoDataMybatisAutoConfiguration implements ApplicationContextAware, private ApplicationContext applicationContext; - @Bean - public QueryList unoQueryList() { - return new QueryList(); - } - @Bean public QueryInterceptor unoQueryInterceptor() { return new QueryInterceptor(); } - @Bean - @ConditionalOnMissingBean - public ISqlInjector sqlInjector(List otherMethod) { - return new UnoSqlInjector(otherMethod); - } - @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; diff --git a/uno-data/src/main/java/cc/allio/uno/data/query/mybatis/UnoSqlInjector.java b/uno-data/src/main/java/cc/allio/uno/data/query/mybatis/UnoSqlInjector.java deleted file mode 100644 index c9bfc4c2..00000000 --- a/uno-data/src/main/java/cc/allio/uno/data/query/mybatis/UnoSqlInjector.java +++ /dev/null @@ -1,35 +0,0 @@ -package cc.allio.uno.data.query.mybatis; - -import com.baomidou.mybatisplus.annotation.FieldFill; -import com.baomidou.mybatisplus.core.injector.AbstractMethod; -import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector; -import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -/** - * 自定义注入SQl - * - * @author jiangwei - * @date 2022/12/14 22:57 - * @since 1.1.3 - */ -public class UnoSqlInjector extends DefaultSqlInjector { - - private List otherMethod; - - public UnoSqlInjector(List otherMethod) { - this.otherMethod = otherMethod; - } - - @Override - public List getMethodList(Class mapperClass) { - List methodList = new ArrayList<>(); - methodList.add(new InsertBatchSomeColumn(i -> i.getFieldFill() != FieldFill.UPDATE)); - methodList.addAll(super.getMethodList(mapperClass)); - methodList.addAll(otherMethod); - return Collections.unmodifiableList(methodList); - } -} diff --git a/uno-data/src/main/java/cc/allio/uno/data/query/mybatis/injector/QueryList.java b/uno-data/src/main/java/cc/allio/uno/data/query/mybatis/injector/QueryList.java deleted file mode 100644 index 4c9043fa..00000000 --- a/uno-data/src/main/java/cc/allio/uno/data/query/mybatis/injector/QueryList.java +++ /dev/null @@ -1,82 +0,0 @@ -package cc.allio.uno.data.query.mybatis.injector; - -import cc.allio.uno.data.query.mybatis.mapper.QueryMapper; -import cc.allio.uno.data.query.mybatis.QueryFilter; -import com.baomidou.mybatisplus.core.injector.AbstractMethod; -import com.baomidou.mybatisplus.core.metadata.TableInfo; -import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils; -import org.apache.ibatis.mapping.MappedStatement; -import org.apache.ibatis.mapping.SqlSource; - -/** - * 构建{@link QueryMapper#queryList(QueryFilter)}SQL语句 - * - * @author jiangwei - * @date 2022/9/30 16:37 - * @since 1.1.0 - */ -public class QueryList extends AbstractMethod { - - private static final String QUERY_LIST = "queryList"; - - String sql = ""; - - @Override - public MappedStatement injectMappedStatement(Class mapperClass, Class modelClass, TableInfo tableInfo) { - String formatSql = String.format(sql, sqlSelectColumns(tableInfo, true), tableInfo.getTableName(), - sqlWhereEntityWrapper(true, tableInfo), - sqlOrderWrapper(), - sqlGroupWrapper()); - SqlSource sqlSource = languageDriver.createSqlSource(configuration, formatSql, modelClass); - return this.addSelectMappedStatementForTable(mapperClass, QUERY_LIST, sqlSource, tableInfo); - } - - @Override - protected String sqlSelectColumns(TableInfo table, boolean queryWrapper) { - /* 假设存在用户自定义的 resultMap 映射返回 */ - String selectColumns = ASTERISK; - if (table.getResultMap() == null || table.isAutoInitResultMap()) { - /* 未设置 resultMap 或者 resultMap 是自动构建的,视为属于mp的规则范围内 */ - selectColumns = table.getAllSqlSelect(); - } - if (!queryWrapper) { - return selectColumns; - } - return SqlScriptUtils.convertChoose( - String.format("%s != null and %s != null and %s != ''", "select", "select.condition", "select.condition"), - SqlScriptUtils.unSafeParam("select.condition"), - selectColumns); - } - - @Override - protected String sqlWhereEntityWrapper(boolean newLine, TableInfo table) { - String whereCondition = SqlScriptUtils.unSafeParam("where.condition"); - whereCondition += NEWLINE + table.getLogicDeleteSql(true, true) + NEWLINE; - whereCondition = SqlScriptUtils.convertChoose( - String.format("%s != null and %s != null and %s != ''", "where", "where.condition", "where.condition"), - whereCondition, - table.getLogicDeleteSql(false, true) - ); - return SqlScriptUtils.convertWhere(whereCondition); - } - - protected String sqlOrderWrapper() { - String orderBy = SqlScriptUtils.unSafeParam("order.condition"); - orderBy = QuerySqlScriptUtil.orderSql(orderBy); - return SqlScriptUtils.convertChoose( - String.format("%s != null and %s != null and %s != ''", "order", "order.condition", "order.condition"), - orderBy, - "" - ); - } - - protected String sqlGroupWrapper() { - String groupBy = SqlScriptUtils.unSafeParam("group.condition"); - groupBy = QuerySqlScriptUtil.orderSql(groupBy); - return SqlScriptUtils.convertChoose( - String.format("%s != null and %s != null and %s != ''", "group", "group.condition", "group.condition"), - groupBy, - "" - ); - } -} diff --git a/uno-data/src/main/java/cc/allio/uno/data/query/mybatis/injector/QuerySqlInjector.java b/uno-data/src/main/java/cc/allio/uno/data/query/mybatis/injector/QuerySqlInjector.java deleted file mode 100644 index c550b341..00000000 --- a/uno-data/src/main/java/cc/allio/uno/data/query/mybatis/injector/QuerySqlInjector.java +++ /dev/null @@ -1,31 +0,0 @@ -package cc.allio.uno.data.query.mybatis.injector; - -import com.baomidou.mybatisplus.core.injector.AbstractMethod; -import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector; - -import java.util.Collections; -import java.util.List; - -/** - * 新增{@link QueryList}方法进行注入 - * - * @author jiangwei - * @date 2022/9/30 16:38 - * @since 1.1.0 - */ -public class QuerySqlInjector extends DefaultSqlInjector { - - List otherMethod; - - public QuerySqlInjector(List otherMethod) { - this.otherMethod = otherMethod; - } - - @Override - public List getMethodList(Class mapperClass) { - List methodList = super.getMethodList(mapperClass); - methodList.add(new QueryList()); - methodList.addAll(otherMethod); - return Collections.unmodifiableList(methodList); - } -} diff --git a/uno-data/src/main/java/cc/allio/uno/data/query/mybatis/injector/QuerySqlScriptUtil.java b/uno-data/src/main/java/cc/allio/uno/data/query/mybatis/injector/QuerySqlScriptUtil.java deleted file mode 100644 index e0b379e9..00000000 --- a/uno-data/src/main/java/cc/allio/uno/data/query/mybatis/injector/QuerySqlScriptUtil.java +++ /dev/null @@ -1,46 +0,0 @@ -package cc.allio.uno.data.query.mybatis.injector; - -import com.baomidou.mybatisplus.core.toolkit.StringUtils; -import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils; - -/** - * 查询脚本工具 - * - * @author jiangwei - * @date 2022/9/30 16:38 - * @since 1.1.0 - */ -public abstract class QuerySqlScriptUtil extends SqlScriptUtils { - - public static String orderSql(String sql) { - return "ORDER BY" + NEWLINE + sql; - } - - public static String groupSql(String sql) { - return "GROUP BY" + NEWLINE + sql; - } - - public static String convertForeach(final String sqlScript, final String collection, final String index, - final String item, final String open, final String close, final String separator) { - StringBuilder sb = new StringBuilder("").toString(); - } -} diff --git a/uno-data/src/main/java/cc/allio/uno/data/query/stream/Sampling.java b/uno-data/src/main/java/cc/allio/uno/data/query/stream/Sampling.java index aec0d426..3f05b29a 100644 --- a/uno-data/src/main/java/cc/allio/uno/data/query/stream/Sampling.java +++ b/uno-data/src/main/java/cc/allio/uno/data/query/stream/Sampling.java @@ -1,6 +1,6 @@ package cc.allio.uno.data.query.stream; -import org.apache.commons.lang.ArrayUtils; +import org.apache.commons.lang3.ArrayUtils; import java.util.Arrays; import java.util.Collection; diff --git a/uno-demo/pom.xml b/uno-demo/pom.xml index 4afa36c6..2b86dbf0 100644 --- a/uno-demo/pom.xml +++ b/uno-demo/pom.xml @@ -5,7 +5,7 @@ uno cc.allio - 1.1.4.RELEASE + 1.1.5.RELEASE 4.0.0 diff --git a/uno-demo/uno-liquibase-demo/pom.xml b/uno-demo/uno-liquibase-demo/pom.xml index abfced36..982269e0 100644 --- a/uno-demo/uno-liquibase-demo/pom.xml +++ b/uno-demo/uno-liquibase-demo/pom.xml @@ -5,7 +5,7 @@ uno-demo cc.allio - 1.1.4.RELEASE + 1.1.5.RELEASE 4.0.0 diff --git a/uno-demo/uno-websocket-demo/pom.xml b/uno-demo/uno-websocket-demo/pom.xml index 4afbb45c..f6d779c1 100644 --- a/uno-demo/uno-websocket-demo/pom.xml +++ b/uno-demo/uno-websocket-demo/pom.xml @@ -5,7 +5,7 @@ uno-demo cc.allio - 1.1.4.RELEASE + 1.1.5.RELEASE 4.0.0 diff --git a/uno-demo/uno-websocket-demo/src/main/java/cc/allio/uno/websocket/demo/DemoWebSocketEndpoint.java b/uno-demo/uno-websocket-demo/src/main/java/cc/allio/uno/websocket/demo/DemoWebSocketEndpoint.java index 53420968..ac289010 100644 --- a/uno-demo/uno-websocket-demo/src/main/java/cc/allio/uno/websocket/demo/DemoWebSocketEndpoint.java +++ b/uno-demo/uno-websocket-demo/src/main/java/cc/allio/uno/websocket/demo/DemoWebSocketEndpoint.java @@ -1,12 +1,12 @@ package cc.allio.uno.websocket.demo; import cc.allio.uno.component.websocket.BaseWebsocketEndpoint; +import jakarta.websocket.Session; +import jakarta.websocket.server.ServerEndpoint; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; import reactor.core.publisher.FluxSink; -import javax.websocket.Session; -import javax.websocket.server.ServerEndpoint; import java.util.List; @Slf4j diff --git a/uno-gis/pom.xml b/uno-gis/pom.xml index c1070b0c..d0e5b34d 100644 --- a/uno-gis/pom.xml +++ b/uno-gis/pom.xml @@ -5,7 +5,7 @@ uno cc.allio - 1.1.4.RELEASE + 1.1.5.RELEASE 4.0.0 diff --git a/uno-plugins/pom.xml b/uno-plugins/pom.xml index 3b57070c..f9a3d670 100644 --- a/uno-plugins/pom.xml +++ b/uno-plugins/pom.xml @@ -5,7 +5,7 @@ uno cc.allio - 1.1.4.RELEASE + 1.1.5.RELEASE 4.0.0 diff --git a/uno-plugins/uno-plugins-manager/pom.xml b/uno-plugins/uno-plugins-manager/pom.xml index a772fe11..31424bc0 100644 --- a/uno-plugins/uno-plugins-manager/pom.xml +++ b/uno-plugins/uno-plugins-manager/pom.xml @@ -5,7 +5,7 @@ uno-plugins cc.allio - 1.1.4.RELEASE + 1.1.5.RELEASE ../pom.xml 4.0.0 diff --git a/uno-plugins/uno-plugins-platform/pom.xml b/uno-plugins/uno-plugins-platform/pom.xml index c7f5db54..07314348 100644 --- a/uno-plugins/uno-plugins-platform/pom.xml +++ b/uno-plugins/uno-plugins-platform/pom.xml @@ -5,7 +5,7 @@ uno-plugins cc.allio - 1.1.4.RELEASE + 1.1.5.RELEASE ../pom.xml 4.0.0 diff --git a/uno-rule/pom.xml b/uno-rule/pom.xml index 2d27e88d..4cd27ebb 100644 --- a/uno-rule/pom.xml +++ b/uno-rule/pom.xml @@ -6,7 +6,7 @@ cc.allio uno - 1.1.4.RELEASE + 1.1.5.RELEASE uno-rule @@ -31,10 +31,6 @@ org.drools drools-mvel
- - org.jeasy - easy-rules-core - cc.allio diff --git a/uno-starters/pom.xml b/uno-starters/pom.xml index 83ff2805..8220d66f 100644 --- a/uno-starters/pom.xml +++ b/uno-starters/pom.xml @@ -5,7 +5,7 @@ uno cc.allio - 1.1.4.RELEASE + 1.1.5.RELEASE 4.0.0 @@ -19,7 +19,6 @@ uno-starter-core - uno-starter-flink uno-starter-kafka uno-starter-liquibase uno-starter-websocket diff --git a/uno-starters/uno-starter-core/pom.xml b/uno-starters/uno-starter-core/pom.xml index cfbcad38..7a597f96 100644 --- a/uno-starters/uno-starter-core/pom.xml +++ b/uno-starters/uno-starter-core/pom.xml @@ -5,7 +5,7 @@ uno-starters cc.allio - 1.1.4.RELEASE + 1.1.5.RELEASE 4.0.0 diff --git a/uno-starters/uno-starter-flink/pom.xml b/uno-starters/uno-starter-flink/pom.xml deleted file mode 100644 index 438e29c3..00000000 --- a/uno-starters/uno-starter-flink/pom.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - uno-starters - cc.allio - 1.1.4.RELEASE - - 4.0.0 - - uno-starter-flink - - - - cc.allio - uno-component-flink - - - \ No newline at end of file diff --git a/uno-starters/uno-starter-flink/src/main/java/cc/allio/uno/starter/flink/UnoFlinkAutoConfiguration.java b/uno-starters/uno-starter-flink/src/main/java/cc/allio/uno/starter/flink/UnoFlinkAutoConfiguration.java deleted file mode 100644 index d886bbac..00000000 --- a/uno-starters/uno-starter-flink/src/main/java/cc/allio/uno/starter/flink/UnoFlinkAutoConfiguration.java +++ /dev/null @@ -1,28 +0,0 @@ -package cc.allio.uno.starter.flink; - -import cc.allio.uno.component.flink.UnoFlinkProperties; -import cc.allio.uno.component.flink.task.FlinkTaskBuilder; -import cc.allio.uno.component.flink.task.OrdinaryFlinkTask; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * flink自动配置类 - * - * @author jiangwei - * @date 2022/2/27 17:52 - * @since 1.0 - */ -@Configuration(proxyBeanMethods = false) -@EnableConfigurationProperties(UnoFlinkProperties.class) -public class UnoFlinkAutoConfiguration { - - @Bean - public OrdinaryFlinkTask ordinaryFlinkTask() { - return FlinkTaskBuilder - .shelves() - .buildName("Flink-singleton-ordinary-task") - .buildOrdinary(); - } -} diff --git a/uno-starters/uno-starter-kafka/pom.xml b/uno-starters/uno-starter-kafka/pom.xml index a7e92a04..7c637b56 100644 --- a/uno-starters/uno-starter-kafka/pom.xml +++ b/uno-starters/uno-starter-kafka/pom.xml @@ -5,7 +5,7 @@ uno-starters cc.allio - 1.1.4.RELEASE + 1.1.5.RELEASE 4.0.0 diff --git a/uno-starters/uno-starter-liquibase/README.md b/uno-starters/uno-starter-liquibase/README.md index 440e0ab3..ebffbfc6 100644 --- a/uno-starters/uno-starter-liquibase/README.md +++ b/uno-starters/uno-starter-liquibase/README.md @@ -1,6 +1,6 @@ # Liquibase数据库版本控制 -版本号:1.1.4.RELEASE +版本号:1.1.5.RELEASE liquibase是一个数据库变更的版本控制工具。项目中通过liquibase解析用户编写的liquibase的配置文件,生成sql语句,并执行和记录。执行是根据记录确定sql语句是否曾经执行过,和配置文件里的预判断语句确定sql是否执行。 diff --git a/uno-starters/uno-starter-liquibase/pom.xml b/uno-starters/uno-starter-liquibase/pom.xml index 8c8934e7..c2191972 100644 --- a/uno-starters/uno-starter-liquibase/pom.xml +++ b/uno-starters/uno-starter-liquibase/pom.xml @@ -5,7 +5,7 @@ uno-starters cc.allio - 1.1.4.RELEASE + 1.1.5.RELEASE 4.0.0 diff --git a/uno-starters/uno-starter-redis/pom.xml b/uno-starters/uno-starter-redis/pom.xml index 2805fed9..c694ad87 100644 --- a/uno-starters/uno-starter-redis/pom.xml +++ b/uno-starters/uno-starter-redis/pom.xml @@ -5,7 +5,7 @@ uno-starters cc.allio - 1.1.4.RELEASE + 1.1.5.RELEASE 4.0.0 diff --git a/uno-starters/uno-starter-sequential/pom.xml b/uno-starters/uno-starter-sequential/pom.xml index 85742dc7..037a29f8 100644 --- a/uno-starters/uno-starter-sequential/pom.xml +++ b/uno-starters/uno-starter-sequential/pom.xml @@ -5,7 +5,7 @@ uno-starters cc.allio - 1.1.4.RELEASE + 1.1.5.RELEASE 4.0.0 diff --git a/uno-starters/uno-starter-websocket/pom.xml b/uno-starters/uno-starter-websocket/pom.xml index 45868ca4..48438cf8 100644 --- a/uno-starters/uno-starter-websocket/pom.xml +++ b/uno-starters/uno-starter-websocket/pom.xml @@ -5,7 +5,7 @@ uno-starters cc.allio - 1.1.4.RELEASE + 1.1.5.RELEASE 4.0.0 diff --git a/uno-test/pom.xml b/uno-test/pom.xml index 2e65aec0..5cca3065 100644 --- a/uno-test/pom.xml +++ b/uno-test/pom.xml @@ -5,7 +5,7 @@ uno cc.allio - 1.1.4.RELEASE + 1.1.5.RELEASE 4.0.0 @@ -32,11 +32,6 @@ org.springframework spring-context
- - org.springframework.cloud - spring-cloud-openfeign-core - provided - io.projectreactor reactor-test @@ -68,42 +63,11 @@ mybatis-plus-boot-starter provided - - cn.easy-es - easy-es-boot-starter - provided - org.springframework.boot spring-boot-starter-data-jpa provided - - - org.springframework.cloud - spring-cloud-starter-openfeign - provided - - - com.playtika.reactivefeign - feign-reactor-cloud - provided - - - com.playtika.reactivefeign - feign-reactor-webclient - provided - - - com.playtika.reactivefeign - feign-reactor-spring-configuration - provided - - - org.springframework.cloud - spring-cloud-starter-loadbalancer - provided - cc.allio diff --git a/uno-test/src/main/java/cc/allio/uno/test/BaseSpringTest.java b/uno-test/src/main/java/cc/allio/uno/test/BaseSpringTest.java index 19409997..c962d0b0 100644 --- a/uno-test/src/main/java/cc/allio/uno/test/BaseSpringTest.java +++ b/uno-test/src/main/java/cc/allio/uno/test/BaseSpringTest.java @@ -10,8 +10,6 @@ import org.junit.jupiter.api.BeforeEach; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.DefaultListableBeanFactory; -import org.springframework.boot.context.config.ConfigFileApplicationListener; -import org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.AnnotationConfigRegistry; @@ -65,13 +63,14 @@ protected void onInit() throws Throwable { if (runTestAttributes != null) { runTestAttributes.apply(this); } - new ConfigFileApplicationListener() { - public void apply() { - addPropertySources(context.getEnvironment(), context); - addPostProcessors(context); - } - }.apply(); - registerDefaultComponent(); + +// addPropertySources(context.getEnvironment()); +// new ConfigFileApplicationListener() { +// public void apply() { +// addPostProcessors(context); +// } +// }.apply(); +// registerDefaultComponent(); // spring环境初始化,回调接口 onInitSpringEnv(); @@ -250,12 +249,12 @@ public void register(Class beanType, T bean) { beanFactory.registerBeanDefinition(beanType.getName(), beanDefinitionBuilder.getRawBeanDefinition()); } - /** - * spring环境中注册默认的bean - */ - public void registerDefaultComponent() { - registerComponent(ConfigurationBeanFactoryMetadata.class); - } +// /** +// * spring环境中注册默认的bean +// */ +// public void registerDefaultComponent() { +// registerComponent(ConfigurationBeanFactoryMetadata.class); +// } /** * spring环境添加默认的配置属性 diff --git a/uno-test/src/main/java/cc/allio/uno/test/RunTest.java b/uno-test/src/main/java/cc/allio/uno/test/RunTest.java index 4dbb4ddb..8d772ae0 100644 --- a/uno-test/src/main/java/cc/allio/uno/test/RunTest.java +++ b/uno-test/src/main/java/cc/allio/uno/test/RunTest.java @@ -7,7 +7,6 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.WebApplicationType; import org.springframework.boot.web.reactive.context.ReactiveWebApplicationContext; -import org.springframework.boot.web.server.LocalServerPort; import org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext; import org.springframework.context.ApplicationContext; import org.springframework.web.context.WebApplicationContext; @@ -107,7 +106,6 @@ enum WebEnvironment { * Creates a web application context (reactive or servlet based) and sets a * {@code server.port=0} {@link org.springframework.core.env.Environment} property (which usually triggers * listening on a random port). Often used in conjunction with a - * {@link LocalServerPort @LocalServerPort} injected field on the test. */ RANDOM_PORT(true), diff --git a/uno-test/src/main/java/cc/allio/uno/test/TestManager.java b/uno-test/src/main/java/cc/allio/uno/test/TestManager.java index 600bdeac..d6ae0857 100644 --- a/uno-test/src/main/java/cc/allio/uno/test/TestManager.java +++ b/uno-test/src/main/java/cc/allio/uno/test/TestManager.java @@ -3,7 +3,6 @@ import cc.allio.uno.core.bus.EventBus; import cc.allio.uno.test.env.PropertiesVisitor; import cc.allio.uno.test.env.Visitor; -import cc.allio.uno.test.feign.FeignRunner; import cc.allio.uno.test.runner.AnnoMetadataRunner; import cc.allio.uno.test.runner.InjectRunner; import cc.allio.uno.test.runner.Runner; @@ -56,8 +55,6 @@ private void registerExtensionObject() { getTestContext().getRunTestAttributes().addListenerClasses(CoreTestListener.class, PrintTimingListener.class, WebListener.class); // 注册默认Visitor getTestContext().getRunTestAttributes().addVisitorClasses(PropertiesVisitor.class); - // 注册默认Runner - getTestContext().getRunTestAttributes().addRunnerClasses(FeignRunner.class, InjectRunner.class, AnnoMetadataRunner.class); } diff --git a/uno-test/src/main/java/cc/allio/uno/test/WebListener.java b/uno-test/src/main/java/cc/allio/uno/test/WebListener.java index e4637856..525ba3b8 100644 --- a/uno-test/src/main/java/cc/allio/uno/test/WebListener.java +++ b/uno-test/src/main/java/cc/allio/uno/test/WebListener.java @@ -1,6 +1,7 @@ package cc.allio.uno.test; import cc.allio.uno.core.util.StringUtils; +import jakarta.annotation.Priority; import org.springframework.boot.WebApplicationType; import org.springframework.boot.context.properties.bind.Bindable; import org.springframework.boot.context.properties.bind.Binder; @@ -9,8 +10,6 @@ import org.springframework.test.context.support.TestPropertySourceUtils; import org.springframework.util.ClassUtils; -import javax.annotation.Priority; - import static cc.allio.uno.test.TestContext.WEB_SERVER; /** diff --git a/uno-test/src/main/java/cc/allio/uno/test/env/DataSourceEnvironment.java b/uno-test/src/main/java/cc/allio/uno/test/env/DataSourceEnvironment.java index 5a7c0ec1..979b9b6e 100644 --- a/uno-test/src/main/java/cc/allio/uno/test/env/DataSourceEnvironment.java +++ b/uno-test/src/main/java/cc/allio/uno/test/env/DataSourceEnvironment.java @@ -2,10 +2,10 @@ import cc.allio.uno.test.env.annotation.properties.DataSourceProperties; import cc.allio.uno.test.CoreTest; +import jakarta.annotation.Priority; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration; -import javax.annotation.Priority; import java.lang.annotation.Annotation; /** diff --git a/uno-test/src/main/java/cc/allio/uno/test/env/EasyEsEnvironment.java b/uno-test/src/main/java/cc/allio/uno/test/env/EasyEsEnvironment.java deleted file mode 100644 index d603a2f9..00000000 --- a/uno-test/src/main/java/cc/allio/uno/test/env/EasyEsEnvironment.java +++ /dev/null @@ -1,31 +0,0 @@ -package cc.allio.uno.test.env; - -import cn.easyes.starter.config.EsAutoConfiguration; -import cn.easyes.starter.factory.IndexStrategyFactory; -import cn.easyes.starter.service.impl.AutoProcessIndexSmoothlyServiceImpl; -import cc.allio.uno.test.CoreTest; - -import java.lang.annotation.Annotation; - -/** - * easy-es测试环境 - * - * @author jiangwei - * @date 2022/7/5 15:56 - * @since 1.0.6 - */ -public class EasyEsEnvironment extends VisitorEnvironment { - - @Override - protected void onSupport(CoreTest coreTest) throws Throwable { - coreTest.registerAutoConfiguration( - EsAutoConfiguration.class, - IndexStrategyFactory.class, - AutoProcessIndexSmoothlyServiceImpl.class); - } - - @Override - public Class[] getPropertiesAnnotation() { - return null; - } -} diff --git a/uno-test/src/main/java/cc/allio/uno/test/env/FeignEnvironment.java b/uno-test/src/main/java/cc/allio/uno/test/env/FeignEnvironment.java deleted file mode 100644 index 7ad475aa..00000000 --- a/uno-test/src/main/java/cc/allio/uno/test/env/FeignEnvironment.java +++ /dev/null @@ -1,47 +0,0 @@ -package cc.allio.uno.test.env; - -import cc.allio.uno.test.env.annotation.properties.*; -import cc.allio.uno.test.CoreTest; -import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration; -import org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration; -import org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration; -import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClientConfiguration; -import org.springframework.cloud.loadbalancer.config.BlockingLoadBalancerClientAutoConfiguration; -import org.springframework.cloud.loadbalancer.config.LoadBalancerCacheAutoConfiguration; -import org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration; -import org.springframework.cloud.openfeign.FeignAutoConfiguration; -import org.springframework.cloud.openfeign.ribbon.FeignRibbonClientAutoConfiguration; - -import java.lang.annotation.Annotation; - -/** - * Feign测试环境 - * - * @author jiangwei - * @date 2022/10/29 09:56 - * @since 1.1.0 - */ -public class FeignEnvironment extends VisitorEnvironment { - - @Override - protected void onSupport(CoreTest coreTest) throws Throwable { - coreTest.registerAutoConfiguration( - JacksonAutoConfiguration.class, - LoadBalancerAutoConfiguration.class, - org.springframework.cloud.loadbalancer.config.LoadBalancerAutoConfiguration.class, - BlockingLoadBalancerClientAutoConfiguration.class, - LoadBalancerCacheAutoConfiguration.class, - LoadBalancerClientConfiguration.class, - RestTemplateAutoConfiguration.class, - RibbonAutoConfiguration.class, - FeignRibbonClientAutoConfiguration.class, - FeignAutoConfiguration.class); - } - - @Override - public Class[] getPropertiesAnnotation() { - return new Class[]{FeignClientProperties.class, FeignHttpClientProperties.class, FeignEncoderProperties.class, - RibbonEagerLoadProperties.class, ServerIntrospectorProperties.class}; - } - -} diff --git a/uno-test/src/main/java/cc/allio/uno/test/env/MybatisEnvironment.java b/uno-test/src/main/java/cc/allio/uno/test/env/MybatisEnvironment.java index 702094ee..8fd0ca71 100644 --- a/uno-test/src/main/java/cc/allio/uno/test/env/MybatisEnvironment.java +++ b/uno-test/src/main/java/cc/allio/uno/test/env/MybatisEnvironment.java @@ -2,10 +2,10 @@ import cc.allio.uno.test.env.annotation.properties.MybatisProperties; import cc.allio.uno.test.CoreTest; +import jakarta.annotation.Priority; import org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration; import org.mybatis.spring.boot.autoconfigure.MybatisLanguageDriverAutoConfiguration; -import javax.annotation.Priority; import java.lang.annotation.Annotation; /** diff --git a/uno-test/src/main/java/cc/allio/uno/test/env/MybatisPlusEnvironment.java b/uno-test/src/main/java/cc/allio/uno/test/env/MybatisPlusEnvironment.java index 801a6c92..0142ae73 100644 --- a/uno-test/src/main/java/cc/allio/uno/test/env/MybatisPlusEnvironment.java +++ b/uno-test/src/main/java/cc/allio/uno/test/env/MybatisPlusEnvironment.java @@ -3,8 +3,8 @@ import cc.allio.uno.test.CoreTest; import cc.allio.uno.test.env.annotation.properties.MybatisPlusProperties; import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; +import jakarta.annotation.Priority; -import javax.annotation.Priority; import java.lang.annotation.Annotation; /** diff --git a/uno-test/src/main/java/cc/allio/uno/test/env/ReactiveFeignEnvironment.java b/uno-test/src/main/java/cc/allio/uno/test/env/ReactiveFeignEnvironment.java deleted file mode 100644 index 267d7b18..00000000 --- a/uno-test/src/main/java/cc/allio/uno/test/env/ReactiveFeignEnvironment.java +++ /dev/null @@ -1,33 +0,0 @@ -package cc.allio.uno.test.env; - -import cc.allio.uno.test.CoreTest; -import org.springframework.boot.autoconfigure.web.reactive.function.client.WebClientAutoConfiguration; -import reactivefeign.spring.config.ReactiveFeignAutoConfiguration; -import reactivefeign.spring.config.ReactiveFeignClientsConfiguration; - -import java.lang.annotation.Annotation; - -/** - * Reactive Feign Environment - * - * @author jiangwei - * @date 2023/3/9 11:54 - * @since 1.1.4 - */ -public class ReactiveFeignEnvironment extends VisitorEnvironment { - @Override - public Class[] getPropertiesAnnotation() { - return new Class[0]; - } - - @Override - protected void onSupport(CoreTest coreTest) throws Throwable { - coreTest.registerAutoConfiguration( - // reactive configuration - ReactiveFeignAutoConfiguration.class, - ReactiveFeignClientsConfiguration.class, - // Webclient$Builder - WebClientAutoConfiguration.class - ); - } -} diff --git a/uno-test/src/main/java/cc/allio/uno/test/env/annotation/FeignConfigure.java b/uno-test/src/main/java/cc/allio/uno/test/env/annotation/FeignConfigure.java deleted file mode 100644 index 63ec8487..00000000 --- a/uno-test/src/main/java/cc/allio/uno/test/env/annotation/FeignConfigure.java +++ /dev/null @@ -1,28 +0,0 @@ -package cc.allio.uno.test.env.annotation; - -import cc.allio.uno.test.CoreTest; -import net.bytebuddy.description.annotation.AnnotationDescription; -import org.springframework.cloud.openfeign.EnableFeignClients; -import org.springframework.core.annotation.MergedAnnotation; - -import java.lang.annotation.Annotation; - -/** - * {@link FeignEnv}配置抽取器 - * - * @author jiangwei - * @date 2023/3/9 12:03 - * @since 1.1.4 - */ -public class FeignConfigure extends DynamicConfigure { - @Override - protected AnnotationDescription[] buildAnnoDesc(CoreTest coreTest, MergedAnnotation annotation) { - AnnotationDescription.Builder annoBuilder = AnnotationDescription.Builder.ofType(EnableFeignClients.class); - annoBuilder = annoBuilder.defineArray("value", annotation.getStringArray("value")) - .defineArray("basePackages", annotation.getStringArray("basePackages")) - .defineTypeArray("basePackageClasses", annotation.getClassArray("basePackageClasses")) - .defineTypeArray("defaultConfiguration", annotation.getClassArray("defaultConfiguration")) - .defineTypeArray("clients", annotation.getClassArray("clients")); - return new AnnotationDescription[]{annoBuilder.build()}; - } -} diff --git a/uno-test/src/main/java/cc/allio/uno/test/env/annotation/FeignEnv.java b/uno-test/src/main/java/cc/allio/uno/test/env/annotation/FeignEnv.java deleted file mode 100644 index 52c63342..00000000 --- a/uno-test/src/main/java/cc/allio/uno/test/env/annotation/FeignEnv.java +++ /dev/null @@ -1,84 +0,0 @@ -package cc.allio.uno.test.env.annotation; - -import cc.allio.uno.test.env.annotation.properties.*; -import cc.allio.uno.test.env.FeignEnvironment; -import org.springframework.cloud.openfeign.EnableFeignClients; -import org.springframework.cloud.openfeign.FeignClientsConfiguration; - -import java.lang.annotation.*; - -/** - * 混合注解,构建Feign运行时环境。注解内容替代{@link EnableFeignClients} - *

对应的配置注解为 - *

    - *
  • {@link FeignClientProperties}
  • - *
  • {@link FeignEncoderProperties}
  • - *
  • {@link FeignHttpClientProperties}
  • - *
  • {@link RibbonEagerLoadProperties}
  • - *
  • {@link ServerIntrospectorProperties}
  • - *
- *

- * - * @author jiangwei - * @date 2023/3/9 11:57 - * @since 1.1.4 - */ -@Documented -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -@AnnoConfigure -@Extractor(FeignConfigure.class) -@Env({FeignEnvironment.class}) -@ServletWebEnv -public @interface FeignEnv { - - /** - * Alias for the {@link #basePackages()} attribute. Allows for more concise annotation - * declarations e.g.: {@code @ComponentScan("org.my.pkg")} instead of - * {@code @ComponentScan(basePackages="org.my.pkg")}. - * - * @return the array of 'basePackages'. - */ - String[] value() default {}; - - /** - * Base packages to scan for annotated components. - *

- * {@link #value()} is an alias for (and mutually exclusive with) this attribute. - *

- * Use {@link #basePackageClasses()} for a type-safe alternative to String-based - * package names. - * - * @return the array of 'basePackages'. - */ - String[] basePackages() default {}; - - /** - * Type-safe alternative to {@link #basePackages()} for specifying the packages to - * scan for annotated components. The package of each class specified will be scanned. - *

- * Consider creating a special no-op marker class or interface in each package that - * serves no purpose other than being referenced by this attribute. - * - * @return the array of 'basePackageClasses'. - */ - Class[] basePackageClasses() default {}; - - /** - * A custom @Configuration for all feign clients. Can contain override - * @Bean definition for the pieces that make up the client, for instance - * {@link feign.codec.Decoder}, {@link feign.codec.Encoder}, {@link feign.Contract}. - * - * @return list of default configurations - * @see FeignClientsConfiguration for the defaults - */ - Class[] defaultConfiguration() default {}; - - /** - * List of classes annotated with @FeignClient. If not empty, disables classpath - * scanning. - * - * @return list of FeignClient classes - */ - Class[] clients() default {}; -} diff --git a/uno-test/src/main/java/cc/allio/uno/test/env/annotation/properties/DataSourceProperties.java b/uno-test/src/main/java/cc/allio/uno/test/env/annotation/properties/DataSourceProperties.java index b6f1252b..cd696aff 100644 --- a/uno-test/src/main/java/cc/allio/uno/test/env/annotation/properties/DataSourceProperties.java +++ b/uno-test/src/main/java/cc/allio/uno/test/env/annotation/properties/DataSourceProperties.java @@ -1,6 +1,5 @@ package cc.allio.uno.test.env.annotation.properties; -import org.springframework.boot.jdbc.DataSourceInitializationMode; import org.springframework.boot.jdbc.EmbeddedDatabaseConnection; import java.lang.annotation.*; @@ -54,12 +53,6 @@ */ String jndiName() default ""; - /** - * Mode to apply when determining if DataSource initialization should be performed - * using the available DDL and DML scripts. - */ - DataSourceInitializationMode initializationMode() default DataSourceInitializationMode.EMBEDDED; - /** * Platform to use in the DDL or DML scripts (such as schema-${platform}.sql or * data-${platform}.sql). diff --git a/uno-test/src/main/java/cc/allio/uno/test/env/annotation/properties/EsProperties.java b/uno-test/src/main/java/cc/allio/uno/test/env/annotation/properties/EsProperties.java index 87158f7b..9da45920 100644 --- a/uno-test/src/main/java/cc/allio/uno/test/env/annotation/properties/EsProperties.java +++ b/uno-test/src/main/java/cc/allio/uno/test/env/annotation/properties/EsProperties.java @@ -1,7 +1,5 @@ package cc.allio.uno.test.env.annotation.properties; -import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientProperties; - import java.lang.annotation.*; /** @@ -9,7 +7,6 @@ * * @author jiangwei * @date 2023/7/5 16:03 - * @see ElasticsearchRestClientProperties * @since 1.1.4 */ @Documented diff --git a/uno-test/src/main/java/cc/allio/uno/test/env/annotation/properties/FeignHttpClientProperties.java b/uno-test/src/main/java/cc/allio/uno/test/env/annotation/properties/FeignHttpClientProperties.java deleted file mode 100644 index 50b7a7c3..00000000 --- a/uno-test/src/main/java/cc/allio/uno/test/env/annotation/properties/FeignHttpClientProperties.java +++ /dev/null @@ -1,62 +0,0 @@ -package cc.allio.uno.test.env.annotation.properties; - -import java.lang.annotation.*; - -import static org.springframework.cloud.openfeign.support.FeignHttpClientProperties.*; - -/** - * {@link org.springframework.cloud.openfeign.support.FeignHttpClientProperties}的注解描述 - * - * @author jiangwei - * @date 2023/3/9 12:10 - * @since 1.1.4 - */ -@Documented -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -@Properties("feign.httpclient") -public @interface FeignHttpClientProperties { - - boolean disableSslValidation() default DEFAULT_DISABLE_SSL_VALIDATION; - - int maxConnections() default DEFAULT_MAX_CONNECTIONS; - - int maxConnectionsPerRoute() default DEFAULT_MAX_CONNECTIONS_PER_ROUTE; - - long timeToLive() default DEFAULT_TIME_TO_LIVE; - - boolean followRedirects() default DEFAULT_FOLLOW_REDIRECTS; - - int connectionTimeout() default DEFAULT_CONNECTION_TIMEOUT; - - /** - * Apache HttpClient5 additional properties. - */ - Hc5Properties hc5(); - - /** - * {@link org.springframework.cloud.openfeign.support.FeignHttpClientProperties.Hc5Properties}注解描述 - */ - @Documented - @Retention(RetentionPolicy.RUNTIME) - @Target(ElementType.TYPE) - @Properties - @interface Hc5Properties { - - /** - * Pool concurrency policies. - */ - org.springframework.cloud.openfeign.support.FeignHttpClientProperties.Hc5Properties.PoolConcurrencyPolicy poolConcurrencyPolicy() default org.springframework.cloud.openfeign.support.FeignHttpClientProperties.Hc5Properties.PoolConcurrencyPolicy.STRICT; - - /** - * Pool connection re-use policies. - */ - org.springframework.cloud.openfeign.support.FeignHttpClientProperties.Hc5Properties.PoolReusePolicy poolReusePolicy() default org.springframework.cloud.openfeign.support.FeignHttpClientProperties.Hc5Properties.PoolReusePolicy.FIFO; - - /** - * Default value for socket timeout. - */ - int socketTimeout() default 5; - - } -} diff --git a/uno-test/src/main/java/cc/allio/uno/test/feign/FeignRunner.java b/uno-test/src/main/java/cc/allio/uno/test/feign/FeignRunner.java deleted file mode 100644 index 0f76d2b8..00000000 --- a/uno-test/src/main/java/cc/allio/uno/test/feign/FeignRunner.java +++ /dev/null @@ -1,224 +0,0 @@ -package cc.allio.uno.test.feign; - -import cc.allio.uno.test.CoreTest; -import cc.allio.uno.test.runner.RefreshCompleteRunner; -import com.google.common.collect.Sets; -import org.springframework.beans.factory.annotation.AnnotatedBeanDefinition; -import org.springframework.beans.factory.annotation.AnnotatedGenericBeanDefinition; -import org.springframework.beans.factory.config.*; -import org.springframework.beans.factory.support.AbstractBeanDefinition; -import org.springframework.beans.factory.support.BeanDefinitionBuilder; -import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; -import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.cloud.openfeign.FeignClientBuilder; -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider; -import org.springframework.core.annotation.AnnotatedElementUtils; -import org.springframework.core.env.Environment; -import org.springframework.core.type.AnnotationMetadata; -import org.springframework.core.type.filter.AnnotationTypeFilter; -import org.springframework.util.Assert; -import org.springframework.util.ClassUtils; -import org.springframework.util.ObjectUtils; -import org.springframework.util.StringUtils; -import reactivefeign.spring.config.ReactiveFeignClient; - -import java.net.URI; -import java.net.URISyntaxException; -import java.util.*; -import java.util.stream.Collectors; - -/** - * 注解{@link RunFeignTest}执行器 - * - * @author jiangwei - * @date 2022/10/28 17:31 - * @since 1.1.0 - */ -public class FeignRunner implements RefreshCompleteRunner { - - @Override - public void onRefreshComplete(CoreTest coreTest) throws Throwable { - ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false, coreTest.getContext().getEnvironment()); - scanner.setResourceLoader(coreTest.getContext()); - scanner.addIncludeFilter(new AnnotationTypeFilter(FeignClient.class)); - scanner.addIncludeFilter(new AnnotationTypeFilter(ReactiveFeignClient.class)); - - LinkedHashSet candidateComponents = new LinkedHashSet<>(); - - Set annotationFeign = AnnotatedElementUtils.findAllMergedAnnotations(coreTest.getClass(), RunFeignTest.class); - Set basePackages = annotationFeign.stream() - .flatMap(feign -> loadCandidateComponents(feign).stream()) - .collect(Collectors.toSet()); - // 添加给定包下的组件 - for (String basePackage : basePackages) { - candidateComponents.addAll(scanner.findCandidateComponents(basePackage)); - } - - // 添加指定feign class对象 - Set> clients = annotationFeign.stream() - .filter(feign -> !ObjectUtils.isEmpty(feign.clients())) - .flatMap(feign -> Sets.newHashSet(feign.clients()).stream()) - .collect(Collectors.toSet()); - for (Class client : clients) { - candidateComponents.add(new AnnotatedGenericBeanDefinition(client)); - } - - // 扫描后的client接口添加至Spring容器中 - FeignClientBuilder feignClientBuilder = new FeignClientBuilder(coreTest.getContext()); - - ReactiveFeignClientsRegistrar registrar = new ReactiveFeignClientsRegistrar(coreTest.getContext().getEnvironment()); - - for (BeanDefinition candidateComponent : candidateComponents) { - Class typeComponent = ClassUtils.resolveClassName(candidateComponent.getBeanClassName(), null); - AnnotationMetadata annotationMetadata = AnnotationMetadata.introspect(typeComponent); - if (annotationMetadata.hasAnnotation(FeignClient.class.getName())) { - if (candidateComponent instanceof AnnotatedBeanDefinition) { - Map attributes = annotationMetadata - .getAnnotationAttributes(FeignClient.class.getCanonicalName()); - String className = getClientName(attributes); - String contextId = getContextId(coreTest.getContext().getBeanFactory(), coreTest.getContext().getEnvironment(), attributes); - FeignClientBuilder.Builder builder = feignClientBuilder.forType(typeComponent, className); - String qualifier = getQualifier(attributes); - if (ObjectUtils.isEmpty(qualifier)) { - qualifier = contextId + "FeignClient"; - } - BeanDefinitionBuilder clientBeanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(typeComponent, builder::build); - clientBeanDefinitionBuilder.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_BY_TYPE); - clientBeanDefinitionBuilder.setLazyInit(true); - AbstractBeanDefinition clientBeanDefinition = clientBeanDefinitionBuilder.getBeanDefinition(); - BeanDefinitionHolder holder = new BeanDefinitionHolder(clientBeanDefinition, typeComponent.getName(), new String[]{qualifier}); - BeanDefinitionReaderUtils.registerBeanDefinition(holder, coreTest.getContext()); - - } - } - if (annotationMetadata.hasAnnotation(ReactiveFeignClient.class.getName())) { - Map attributes = annotationMetadata - .getAnnotationAttributes( - ReactiveFeignClient.class.getCanonicalName()); - registrar.registerReactiveFeignClient(coreTest.getContext(), annotationMetadata, attributes); - } - } - } - - /** - * 加载被注解的组件 - * - * @param runFeignTest 注解实例 - * @return - */ - public Set loadCandidateComponents(RunFeignTest runFeignTest) { - Set basePackages = Sets.newHashSet(); - basePackages.addAll(Arrays.asList(runFeignTest.basePackages())); - - Class[] classes = runFeignTest.basePackagesClasses(); - for (Class packClass : classes) { - basePackages.add(ClassUtils.getPackageName(packClass)); - } - return basePackages; - } - - private String getClientName(Map client) { - if (client == null) { - return null; - } - String value = (String) client.get("contextId"); - if (!StringUtils.hasText(value)) { - value = (String) client.get("value"); - } - if (!StringUtils.hasText(value)) { - value = (String) client.get("name"); - } - if (!StringUtils.hasText(value)) { - value = (String) client.get("serviceId"); - } - if (StringUtils.hasText(value)) { - return value; - } - - throw new IllegalStateException( - "Either 'name' or 'value' must be provided in @" + FeignClient.class.getSimpleName()); - } - - String getName(ApplicationContext applicationContext, Map attributes) { - return getName(null, applicationContext.getEnvironment(), attributes); - } - - String getName(ConfigurableBeanFactory beanFactory, Environment environment, Map attributes) { - String name = (String) attributes.get("serviceId"); - if (!StringUtils.hasText(name)) { - name = (String) attributes.get("name"); - } - if (!StringUtils.hasText(name)) { - name = (String) attributes.get("value"); - } - name = resolve(beanFactory, environment, name); - return getName(name); - } - - private String getContextId(ConfigurableBeanFactory beanFactory, Environment environment, Map attributes) { - String contextId = (String) attributes.get("contextId"); - if (!StringUtils.hasText(contextId)) { - return getName(beanFactory, environment, attributes); - } - - contextId = resolve(beanFactory, environment, contextId); - return getName(contextId); - } - - static String getName(String name) { - if (!StringUtils.hasText(name)) { - return ""; - } - - String host = null; - try { - String url; - if (!name.startsWith("http://") && !name.startsWith("https://")) { - url = "http://" + name; - } else { - url = name; - } - host = new URI(url).getHost(); - - } catch (URISyntaxException e) { - } - Assert.state(host != null, "Service id not legal hostname (" + name + ")"); - return name; - } - - private String resolve(ConfigurableBeanFactory beanFactory, Environment environment, String value) { - if (StringUtils.hasText(value)) { - if (beanFactory == null) { - return environment.resolvePlaceholders(value); - } - BeanExpressionResolver resolver = beanFactory.getBeanExpressionResolver(); - String resolved = beanFactory.resolveEmbeddedValue(value); - if (resolver == null) { - return resolved; - } - Object evaluateValue = resolver.evaluate(resolved, new BeanExpressionContext(beanFactory, null)); - if (evaluateValue != null) { - return String.valueOf(evaluateValue); - } - return null; - } - return value; - } - - private String getQualifier(Map client) { - if (client == null) { - return null; - } - String qualifier = (String) client.get("qualifier"); - if (StringUtils.hasText(qualifier)) { - return qualifier; - } - return null; - } - - @Override - public boolean shared() { - return false; - } -} diff --git a/uno-test/src/main/java/cc/allio/uno/test/feign/ReactiveFeignClientFactoryBean.java b/uno-test/src/main/java/cc/allio/uno/test/feign/ReactiveFeignClientFactoryBean.java deleted file mode 100644 index b4a436a2..00000000 --- a/uno-test/src/main/java/cc/allio/uno/test/feign/ReactiveFeignClientFactoryBean.java +++ /dev/null @@ -1,287 +0,0 @@ -/* - * Copyright 2013-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package cc.allio.uno.test.feign; - -import feign.Contract; -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.FactoryBean; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; -import org.springframework.util.Assert; -import org.springframework.util.StringUtils; -import reactivefeign.FallbackFactory; -import reactivefeign.ReactiveFeign; -import reactivefeign.ReactiveFeignBuilder; -import reactivefeign.spring.config.ReactiveFeignNamedContext; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Objects; - -/** - * - * Patterned after org.springframework.cloud.openfeign.FeignClientFactoryBean - */ -class ReactiveFeignClientFactoryBean implements FactoryBean, InitializingBean, - ApplicationContextAware { - /*********************************** - * WARNING! Nothing in this class should be @Autowired. It causes NPEs because of some lifecycle race condition. - ***********************************/ - - private Class type; - - private String name; - - private String url; - - private String path; - - private boolean decode404; - - private ApplicationContext applicationContext; - - private Class fallback = void.class; - - private Class fallbackFactory = void.class; - - @Override - public void afterPropertiesSet() { - Assert.hasText(this.name, "Name must be set"); - } - - @Override - public void setApplicationContext(ApplicationContext context) throws BeansException { - this.applicationContext = context; - } - - @Override - public Object getObject() { - return getTarget(); - } - - /** - * @param the target type of the Feign client - * @return a {@link ReactiveFeign} client created with the specified data and the context information - */ - private T getTarget() { - ReactiveFeignNamedContext namedContext = new ReactiveFeignNamedContext(applicationContext, name); - ReactiveFeignBuilder builder = namedContext.get(ReactiveFeignBuilder.class) - .contract(namedContext.get(Contract.class)); - - builder = applyConfigurators(builder, namedContext); - - if (decode404) { - builder = builder.decode404(); - } - - builder = fallback(builder, namedContext); - - return StringUtils.hasText(this.url) - ? (T) builder.target(type, buildUrl()) - : (T) builder.target(type, this.name, buildUrl()); - } - - protected ReactiveFeignBuilder applyConfigurators(ReactiveFeignBuilder builder, ReactiveFeignNamedContext namedContext) { - List configurators = new ArrayList<>( - namedContext.getAll(ReactiveFeignConfigurator.class).values()); - Collections.sort(configurators); - - for (ReactiveFeignConfigurator configurator : configurators) { - builder = configurator.configure(builder, namedContext); - } - - return builder; - } - - private String buildUrl() { - String url; - if (!StringUtils.hasText(this.url)) { - if (!this.name.startsWith("http")) { - url = "http://" + this.name; - } - else { - url = this.name; - } - } else { - if(!this.url.startsWith("http")){ - url = "http://" + this.url; - } else { - url = this.url; - } - } - url += cleanPath(); - return url; - } - - private ReactiveFeignBuilder fallback(ReactiveFeignBuilder builder, ReactiveFeignNamedContext context) { - if(fallback != void.class){ - Object fallbackInstance = getFallbackFromContext( - "fallback", context, this.fallback, this.type); - builder = builder.fallback(fallbackInstance); - return builder; - } - if(fallbackFactory != void.class){ - FallbackFactory fallbackFactoryInstance = (FallbackFactory)getFallbackFromContext( - "fallbackFactory", context, fallbackFactory, FallbackFactory.class); - builder = builder.fallbackFactory(fallbackFactoryInstance); - return builder; - } - - FallbackFactory fallbackFactoryInstance = context.getOptional(FallbackFactory.class); - if(fallbackFactoryInstance != null) { - builder = builder.fallbackFactory(fallbackFactoryInstance); - } - return builder; - } - - private T getFallbackFromContext(String fallbackMechanism, ReactiveFeignNamedContext context, - Class beanType, Class targetType) { - Object fallbackInstance = context.getOptional(beanType); - if (!targetType.isAssignableFrom(beanType)) { - throw new IllegalStateException( - String.format( - "Incompatible " + fallbackMechanism + " instance. Fallback/fallbackFactory of type %s is not assignable to %s for feign client %s", - beanType, targetType, context.getClientName())); - } - if(fallbackInstance == null){ - fallbackInstance = context.getOrInstantiate(beanType); - } - - return (T) fallbackInstance; - } - - private String cleanPath() { - String path = this.path.trim(); - if (StringUtils.hasLength(path)) { - if (!path.startsWith("/")) { - path = "/" + path; - } - if (path.endsWith("/")) { - path = path.substring(0, path.length() - 1); - } - } - return path; - } - - @Override - public Class getObjectType() { - return this.type; - } - - @Override - public boolean isSingleton() { - return true; - } - - public Class getType() { - return type; - } - - public void setType(Class type) { - this.type = type; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getUrl() { - return url; - } - - public void setUrl(String url) { - this.url = url; - } - - public String getPath() { - return path; - } - - public void setPath(String path) { - this.path = path; - } - - public boolean isDecode404() { - return decode404; - } - - public void setDecode404(boolean decode404) { - this.decode404 = decode404; - } - - public ApplicationContext getApplicationContext() { - return applicationContext; - } - - public Class getFallback() { - return fallback; - } - - public void setFallback(Class fallback) { - this.fallback = fallback; - } - - public Class getFallbackFactory() { - return fallbackFactory; - } - - public void setFallbackFactory(Class fallbackFactory) { - this.fallbackFactory = fallbackFactory; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - ReactiveFeignClientFactoryBean that = (ReactiveFeignClientFactoryBean) o; - return Objects.equals(applicationContext, that.applicationContext) && - decode404 == that.decode404 && - Objects.equals(fallback, that.fallback) && - Objects.equals(fallbackFactory, that.fallbackFactory) && - Objects.equals(name, that.name) && - Objects.equals(path, that.path) && - Objects.equals(type, that.type) && - Objects.equals(url, that.url); - } - - @Override - public int hashCode() { - return Objects.hash(applicationContext, decode404, fallback, fallbackFactory, - name, path, type, url); - } - - @Override - public String toString() { - return new StringBuilder("ReactiveFeignClientFactoryBean{") - .append("type=").append(type).append(", ") - .append("name='").append(name).append("', ") - .append("url='").append(url).append("', ") - .append("path='").append(path).append("', ") - .append("decode404=").append(decode404).append(", ") - .append("applicationContext=").append(applicationContext).append(", ") - .append("fallback=").append(fallback).append(", ") - .append("fallbackFactory=").append(fallbackFactory) - .append("}").toString(); - } - -} diff --git a/uno-test/src/main/java/cc/allio/uno/test/feign/ReactiveFeignClientSpecification.java b/uno-test/src/main/java/cc/allio/uno/test/feign/ReactiveFeignClientSpecification.java deleted file mode 100644 index 2934de6b..00000000 --- a/uno-test/src/main/java/cc/allio/uno/test/feign/ReactiveFeignClientSpecification.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright 2013-2015 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package cc.allio.uno.test.feign; - -import org.springframework.cloud.context.named.NamedContextFactory; - -import java.util.Arrays; -import java.util.Objects; - -/** - * patterned after org.springframework.cloud.netflix.feign.FeignClientSpecification - */ -class ReactiveFeignClientSpecification implements NamedContextFactory.Specification { - - private String name; - - private Class[] configuration; - - public ReactiveFeignClientSpecification() {} - - public ReactiveFeignClientSpecification(String name, Class[] configuration) { - this.name = name; - this.configuration = configuration; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Class[] getConfiguration() { - return configuration; - } - - public void setConfiguration(Class[] configuration) { - this.configuration = configuration; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - ReactiveFeignClientSpecification that = (ReactiveFeignClientSpecification) o; - return Objects.equals(name, that.name) && - Arrays.equals(configuration, that.configuration); - } - - @Override - public int hashCode() { - return Objects.hash(name, configuration); - } - - @Override - public String toString() { - return new StringBuilder("ReactiveFeignClientSpecification{") - .append("name='").append(name).append("', ") - .append("configuration=").append(Arrays.toString(configuration)) - .append("}").toString(); - } - -} diff --git a/uno-test/src/main/java/cc/allio/uno/test/feign/ReactiveFeignClientsRegistrar.java b/uno-test/src/main/java/cc/allio/uno/test/feign/ReactiveFeignClientsRegistrar.java deleted file mode 100644 index ec23c2fe..00000000 --- a/uno-test/src/main/java/cc/allio/uno/test/feign/ReactiveFeignClientsRegistrar.java +++ /dev/null @@ -1,237 +0,0 @@ -/* - * Copyright 2013-2016 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package cc.allio.uno.test.feign; - -import org.springframework.beans.factory.FactoryBean; -import org.springframework.beans.factory.annotation.AnnotatedBeanDefinition; -import org.springframework.beans.factory.config.BeanDefinitionHolder; -import org.springframework.beans.factory.support.AbstractBeanDefinition; -import org.springframework.beans.factory.support.BeanDefinitionBuilder; -import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; -import org.springframework.beans.factory.support.BeanDefinitionRegistry; -import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider; -import org.springframework.core.annotation.AnnotationAttributes; -import org.springframework.core.env.Environment; -import org.springframework.core.type.AnnotationMetadata; -import org.springframework.util.Assert; -import org.springframework.util.ClassUtils; -import org.springframework.util.StringUtils; -import reactivefeign.spring.config.EnableReactiveFeignClients; - -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; -import java.util.*; - -import static reactivefeign.utils.StringUtils.cutTail; - -/** - * patterned after org.springframework.cloud.openfeign.FeignClientsRegistrar - */ -class ReactiveFeignClientsRegistrar { - - private Environment environment; - - public ReactiveFeignClientsRegistrar( Environment environment) { - this.environment = environment; - } - - void registerReactiveFeignClient(BeanDefinitionRegistry registry, - AnnotationMetadata annotationMetadata, Map attributes) { - String className = annotationMetadata.getClassName(); - BeanDefinitionBuilder definition = BeanDefinitionBuilder - .genericBeanDefinition(ReactiveFeignClientFactoryBean.class); - validate(attributes); - definition.addPropertyValue("url", getUrl(attributes)); - definition.addPropertyValue("path", getPath(attributes)); - String name = getName(attributes); - definition.addPropertyValue("name", name); - definition.addPropertyValue("type", className); - definition.addPropertyValue("decode404", attributes.get("decode404")); - definition.addPropertyValue("fallback", attributes.get("fallback")); - definition.addPropertyValue("fallbackFactory", attributes.get("fallbackFactory")); - definition.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_BY_TYPE); - - String alias = name + "ReactiveFeignClient"; - AbstractBeanDefinition beanDefinition = definition.getBeanDefinition(); - beanDefinition.setAttribute(FactoryBean.OBJECT_TYPE_ATTRIBUTE, className); - - boolean primary = (Boolean)attributes.get("primary"); // has a default, won't be null - - beanDefinition.setPrimary(primary); - - String qualifier = getQualifier(attributes); - if (StringUtils.hasText(qualifier)) { - alias = qualifier; - } - - BeanDefinitionHolder holder = new BeanDefinitionHolder(beanDefinition, className, - new String[] { alias }); - BeanDefinitionReaderUtils.registerBeanDefinition(holder, registry); - } - - private void validate(Map attributes) { - AnnotationAttributes annotation = AnnotationAttributes.fromMap(attributes); - // This blows up if an aliased property is overspecified - // FIXME annotation.getAliasedString("name", FeignClient.class, null); - validateFallback(annotation.getClass("fallback")); - validateFallbackFactory(annotation.getClass("fallbackFactory")); - } - - static void validateFallback(final Class clazz) { - Assert.isTrue( - !clazz.isInterface(), - "Fallback class must implement the interface annotated by @FeignClient" - ); - } - - static void validateFallbackFactory(final Class clazz) { - Assert.isTrue(!clazz.isInterface(), - "Fallback factory must produce instances of fallback classes that implement the interface annotated by @FeignClient" - ); - } - - /* for testing */ String getName(Map attributes) { - String name = (String) attributes.get("serviceId"); - if (!StringUtils.hasText(name)) { - name = (String) attributes.get("name"); - } - if (!StringUtils.hasText(name)) { - name = (String) attributes.get("value"); - } - name = resolve(name); - return getName(name); - } - - static String getName(String name) { - if (!StringUtils.hasText(name)) { - return ""; - } - - String host = null; - try { - String url; - if (!name.startsWith("http://") && !name.startsWith("https://")) { - url = "http://" + name; - } else { - url = name; - } - host = new URI(url).getHost(); - - } - catch (URISyntaxException e) { - } - Assert.state(host != null, "Service id not legal hostname (" + name + ")"); - return name; - } - - private String resolve(String value) { - if (StringUtils.hasText(value)) { - return this.environment.resolvePlaceholders(value); - } - return value; - } - - private String getUrl(Map attributes) { - String url = resolve((String) attributes.get("url")); - return getUrl(url); - } - - static String getUrl(String url) { - if (StringUtils.hasText(url) && !(url.startsWith("#{") && url.contains("}"))) { - if (!url.contains("://")) { - url = "http://" + url; - } - try { - new URL(url); - } - catch (MalformedURLException e) { - throw new IllegalArgumentException(url + " is malformed", e); - } - } - return url; - } - - private String getPath(Map attributes) { - String path = resolve((String) attributes.get("path")); - return getPath(path); - } - - static String getPath(String path) { - if (StringUtils.hasText(path)) { - path = path.trim(); - if (!path.startsWith("/")) { - path = "/" + path; - } - path = cutTail(path, "/"); - } - return path; - } - - protected ClassPathScanningCandidateComponentProvider getScanner() { - return new ClassPathScanningCandidateComponentProvider(false, this.environment) { - @Override - protected boolean isCandidateComponent(AnnotatedBeanDefinition beanDefinition) { - boolean isCandidate = false; - if (beanDefinition.getMetadata().isIndependent()) { - if (!beanDefinition.getMetadata().isAnnotation()) { - isCandidate = true; - } - } - return isCandidate; - } - }; - } - - protected Set getBasePackages(AnnotationMetadata importingClassMetadata) { - Map attributes = importingClassMetadata - .getAnnotationAttributes(EnableReactiveFeignClients.class.getCanonicalName()); - - Set basePackages = new HashSet<>(); - for (String pkg : (String[]) attributes.get("value")) { - if (StringUtils.hasText(pkg)) { - basePackages.add(pkg); - } - } - for (String pkg : (String[]) attributes.get("basePackages")) { - if (StringUtils.hasText(pkg)) { - basePackages.add(pkg); - } - } - for (Class clazz : (Class[]) attributes.get("basePackageClasses")) { - basePackages.add(ClassUtils.getPackageName(clazz)); - } - - if (basePackages.isEmpty()) { - basePackages.add( - ClassUtils.getPackageName(importingClassMetadata.getClassName())); - } - return basePackages; - } - - private String getQualifier(Map client) { - if (client == null) { - return null; - } - String qualifier = (String) client.get("qualifier"); - if (StringUtils.hasText(qualifier)) { - return qualifier; - } - return null; - } -} diff --git a/uno-test/src/main/java/cc/allio/uno/test/feign/ReactiveFeignConfigurator.java b/uno-test/src/main/java/cc/allio/uno/test/feign/ReactiveFeignConfigurator.java deleted file mode 100644 index 77033baa..00000000 --- a/uno-test/src/main/java/cc/allio/uno/test/feign/ReactiveFeignConfigurator.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2013-2016 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package cc.allio.uno.test.feign; - -import reactivefeign.ReactiveFeignBuilder; -import reactivefeign.spring.config.ReactiveFeignNamedContext; - -interface ReactiveFeignConfigurator extends Comparable{ - - ReactiveFeignBuilder configure( - ReactiveFeignBuilder builder, - ReactiveFeignNamedContext namedContext); - -} diff --git a/uno-test/src/main/java/cc/allio/uno/test/feign/RunFeignTest.java b/uno-test/src/main/java/cc/allio/uno/test/feign/RunFeignTest.java deleted file mode 100644 index 0725c0e6..00000000 --- a/uno-test/src/main/java/cc/allio/uno/test/feign/RunFeignTest.java +++ /dev/null @@ -1,59 +0,0 @@ -package cc.allio.uno.test.feign; - -import cc.allio.uno.test.env.FeignEnvironment; -import cc.allio.uno.test.runner.Running; -import cc.allio.uno.test.RunTest; -import org.springframework.cloud.openfeign.EnableFeignClients; -import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.core.annotation.AliasFor; -import reactivefeign.spring.config.EnableReactiveFeignClients; -import reactivefeign.spring.config.ReactiveFeignClient; - -import java.lang.annotation.*; - -/** - * 参考自{@link EnableFeignClients}与{@link EnableReactiveFeignClients} - * - * @author jiangwei - * @date 2022/10/28 16:09 - * @since 1.1.0 - * @deprecated 在1.1.4版本之后删除 - */ -@Documented -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -@Running(FeignRunner.class) -@RunTest(envs = @RunTest.Environment(env = FeignEnvironment.class)) -@Deprecated -public @interface RunFeignTest { - - /** - * {@link #basePackages()}别名 - * - * @return 数组 - */ - @AliasFor("basePackages") - String[] value() default {}; - - /** - * 扫描被{@link FeignClient}与{@link ReactiveFeignClient}标识的接口 - * - * @return 数组 - */ - String[] basePackages() default {}; - - /** - * 给予被{@link FeignClient}与{@link ReactiveFeignClient}标识的Component - * - * @return component-class对象 - */ - Class[] basePackagesClasses() default {}; - - /** - * 指定Client class对象 - * - * @return client 数组 - */ - Class[] clients() default {}; - -} diff --git a/uno-test/src/main/java/cc/allio/uno/test/runner/InjectRunner.java b/uno-test/src/main/java/cc/allio/uno/test/runner/InjectRunner.java index 9409e46e..7af4d99e 100644 --- a/uno-test/src/main/java/cc/allio/uno/test/runner/InjectRunner.java +++ b/uno-test/src/main/java/cc/allio/uno/test/runner/InjectRunner.java @@ -4,9 +4,9 @@ import cc.allio.uno.test.CoreTest; import cc.allio.uno.test.Inject; import com.google.common.collect.Sets; +import jakarta.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired; -import javax.annotation.Resource; import java.lang.annotation.Annotation; import java.util.Arrays; import java.util.Set; diff --git a/uno-web/pom.xml b/uno-web/pom.xml index c51cb535..27b01ca7 100644 --- a/uno-web/pom.xml +++ b/uno-web/pom.xml @@ -5,12 +5,12 @@ uno cc.allio - 1.1.4.RELEASE + 1.1.5.RELEASE 4.0.0 uno-web - 1.1.4.RELEASE + 1.1.5.RELEASE 基于spring-webmvc、spring-webflux