diff --git a/pom.xml b/pom.xml index 23347243..63d38159 100755 --- a/pom.xml +++ b/pom.xml @@ -102,8 +102,8 @@ 4.0.0-SNAPSHOT - 2.8.0-M1 - 2.8.0-M1 + 2.8.0-SNAPSHOT + 2.8.0-SNAPSHOT ${spring-cloud-stream.version} diff --git a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/TaskRuntimeHints.java b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/TaskRuntimeHints.java new file mode 100644 index 00000000..c9971258 --- /dev/null +++ b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/TaskRuntimeHints.java @@ -0,0 +1,71 @@ +/* + * Copyright 2022-2022 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 + * + * https://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 org.springframework.cloud.task.configuration; + +import java.sql.Statement; + +import org.springframework.aop.SpringProxy; +import org.springframework.aop.framework.Advised; +import org.springframework.aot.hint.MemberCategory; +import org.springframework.aot.hint.RuntimeHints; +import org.springframework.aot.hint.RuntimeHintsRegistrar; +import org.springframework.aot.hint.TypeReference; +import org.springframework.cloud.task.repository.TaskExplorer; +import org.springframework.cloud.task.repository.TaskRepository; +import org.springframework.core.DecoratingProxy; +import org.springframework.util.ClassUtils; + +/** + * Native Hints for Spring Cloud Task. + * + * @author Glenn Renfro + * @since 3.0 + */ +public class TaskRuntimeHints implements RuntimeHintsRegistrar { + + @Override + public void registerHints(RuntimeHints hints, ClassLoader classLoader) { + hints.reflection().registerType(TypeReference.of("java.sql.DatabaseMetaData"), hint -> { + }); + hints.resources().registerPattern("org/springframework/cloud/task/schema-h2.sql"); + hints.resources().registerPattern("org/springframework/cloud/task/schema-mysql.sql"); + hints.resources().registerPattern("org/springframework/cloud/task/schema-oracle.sql"); + hints.resources().registerPattern("org/springframework/cloud/task/schema-postgresql.sql"); + hints.resources().registerPattern("org/springframework/cloud/task/schema-hsqldb.sql"); + hints.resources().registerPattern("org/springframework/cloud/task/schema-sqlserver.sql"); + + hints.reflection().registerType( + TypeReference.of("org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer"), + hint -> hint.withMembers(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, + MemberCategory.INVOKE_DECLARED_METHODS)); + hints.proxies().registerJdkProxy(builder -> builder.proxiedInterfaces(TaskRepository.class) + .proxiedInterfaces(SpringProxy.class, Advised.class, DecoratingProxy.class)); + hints.proxies().registerJdkProxy(builder -> builder.proxiedInterfaces(TaskExplorer.class) + .proxiedInterfaces(SpringProxy.class, Advised.class, DecoratingProxy.class)); + + // Experimental - These can be removed in the future possibly. + if (!ClassUtils.isPresent("com.zaxxer.hikari.HikariDataSource", classLoader)) { + return; + } + hints.reflection().registerType(Statement[].class, hint -> { + }); + hints.reflection().registerType(TypeReference.of("com.zaxxer.hikari.util.ConcurrentBag$IConcurrentBagEntry[]"), + hint -> { + }); + } + +} diff --git a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/listener/annotation/AfterTask.java b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/listener/annotation/AfterTask.java index 7e99f0e1..52e6a206 100644 --- a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/listener/annotation/AfterTask.java +++ b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/listener/annotation/AfterTask.java @@ -1,5 +1,5 @@ /* - * Copyright 2016-2019 the original author or authors. + * Copyright 2016-2022 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. @@ -22,6 +22,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import org.springframework.aot.hint.annotation.Reflective; import org.springframework.cloud.task.listener.TaskExecutionListener; import org.springframework.cloud.task.repository.TaskExecution; @@ -43,6 +44,7 @@ import org.springframework.cloud.task.repository.TaskExecution; @Target({ ElementType.METHOD, ElementType.ANNOTATION_TYPE }) @Retention(RetentionPolicy.RUNTIME) @Documented +@Reflective public @interface AfterTask { } diff --git a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/listener/annotation/BeforeTask.java b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/listener/annotation/BeforeTask.java index abf7c6da..ba8b1c6e 100644 --- a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/listener/annotation/BeforeTask.java +++ b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/listener/annotation/BeforeTask.java @@ -1,5 +1,5 @@ /* - * Copyright 2016-2019 the original author or authors. + * Copyright 2016-2022 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. @@ -22,6 +22,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import org.springframework.aot.hint.annotation.Reflective; import org.springframework.cloud.task.listener.TaskExecutionListener; import org.springframework.cloud.task.repository.TaskExecution; @@ -43,6 +44,7 @@ import org.springframework.cloud.task.repository.TaskExecution; @Target({ ElementType.METHOD, ElementType.ANNOTATION_TYPE }) @Retention(RetentionPolicy.RUNTIME) @Documented +@Reflective public @interface BeforeTask { } diff --git a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/listener/annotation/FailedTask.java b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/listener/annotation/FailedTask.java index b72fc377..30b6d4b3 100644 --- a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/listener/annotation/FailedTask.java +++ b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/listener/annotation/FailedTask.java @@ -1,5 +1,5 @@ /* - * Copyright 2016-2019 the original author or authors. + * Copyright 2016-2022 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. @@ -22,6 +22,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import org.springframework.aot.hint.annotation.Reflective; import org.springframework.cloud.task.listener.TaskExecutionListener; import org.springframework.cloud.task.repository.TaskExecution; @@ -43,6 +44,7 @@ import org.springframework.cloud.task.repository.TaskExecution; @Target({ ElementType.METHOD, ElementType.ANNOTATION_TYPE }) @Retention(RetentionPolicy.RUNTIME) @Documented +@Reflective public @interface FailedTask { } diff --git a/spring-cloud-task-core/src/main/resources/META-INF/spring/aot.factories b/spring-cloud-task-core/src/main/resources/META-INF/spring/aot.factories new file mode 100644 index 00000000..b680bfd2 --- /dev/null +++ b/spring-cloud-task-core/src/main/resources/META-INF/spring/aot.factories @@ -0,0 +1,2 @@ +org.springframework.aot.hint.RuntimeHintsRegistrar=\ +org.springframework.cloud.task.configuration.TaskRuntimeHints diff --git a/spring-cloud-task-samples/batch-job/pom.xml b/spring-cloud-task-samples/batch-job/pom.xml index c3d43f5f..0f99195a 100644 --- a/spring-cloud-task-samples/batch-job/pom.xml +++ b/spring-cloud-task-samples/batch-job/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.0.0-M4 + 3.0.0-SNAPSHOT diff --git a/spring-cloud-task-samples/jpa-sample/pom.xml b/spring-cloud-task-samples/jpa-sample/pom.xml index e01aed61..ec2f8411 100644 --- a/spring-cloud-task-samples/jpa-sample/pom.xml +++ b/spring-cloud-task-samples/jpa-sample/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.0.0-M4 + 3.0.0-SNAPSHOT diff --git a/spring-cloud-task-samples/multiple-datasources/pom.xml b/spring-cloud-task-samples/multiple-datasources/pom.xml index 2121c5f5..31f7af50 100644 --- a/spring-cloud-task-samples/multiple-datasources/pom.xml +++ b/spring-cloud-task-samples/multiple-datasources/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.0.0-M4 + 3.0.0-SNAPSHOT diff --git a/spring-cloud-task-samples/partitioned-batch-job/pom.xml b/spring-cloud-task-samples/partitioned-batch-job/pom.xml index 982a112b..49e20bf1 100644 --- a/spring-cloud-task-samples/partitioned-batch-job/pom.xml +++ b/spring-cloud-task-samples/partitioned-batch-job/pom.xml @@ -12,7 +12,7 @@ org.springframework.boot spring-boot-starter-parent - 3.0.0-M4 + 3.0.0-SNAPSHOT @@ -20,7 +20,7 @@ 4.0.0-SNAPSHOT UTF-8 17 - 2.8.0-M1 + 2.8.0-SNAPSHOT diff --git a/spring-cloud-task-samples/single-step-batch-job/pom.xml b/spring-cloud-task-samples/single-step-batch-job/pom.xml index 9cc33b27..f884a635 100644 --- a/spring-cloud-task-samples/single-step-batch-job/pom.xml +++ b/spring-cloud-task-samples/single-step-batch-job/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.0.0-M4 + 3.0.0-SNAPSHOT diff --git a/spring-cloud-task-samples/task-observations/pom.xml b/spring-cloud-task-samples/task-observations/pom.xml index 5aeca82c..0af885ab 100644 --- a/spring-cloud-task-samples/task-observations/pom.xml +++ b/spring-cloud-task-samples/task-observations/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 3.0.0-M4 + 3.0.0-SNAPSHOT diff --git a/spring-cloud-task-samples/tasksink/pom.xml b/spring-cloud-task-samples/tasksink/pom.xml index 457b06e1..91d5c01a 100644 --- a/spring-cloud-task-samples/tasksink/pom.xml +++ b/spring-cloud-task-samples/tasksink/pom.xml @@ -24,7 +24,7 @@ true 4.0.0-SNAPSHOT 3.0.0-SNAPSHOT - 2.8.0-M1 + 2.8.0-SNAPSHOT diff --git a/spring-cloud-task-samples/timestamp/pom.xml b/spring-cloud-task-samples/timestamp/pom.xml index 70bee960..4913d485 100644 --- a/spring-cloud-task-samples/timestamp/pom.xml +++ b/spring-cloud-task-samples/timestamp/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.0.0-M4 + 3.0.0-SNAPSHOT @@ -62,6 +62,10 @@ org.mariadb.jdbc mariadb-java-client + + org.postgresql + postgresql + diff --git a/spring-cloud-task-samples/timestamp/src/main/resources/application.properties b/spring-cloud-task-samples/timestamp/src/main/resources/application.properties index e74e1450..cba59d43 100644 --- a/spring-cloud-task-samples/timestamp/src/main/resources/application.properties +++ b/spring-cloud-task-samples/timestamp/src/main/resources/application.properties @@ -1,2 +1,4 @@ spring.application.name=Demo Timestamp Task logging.level.org.springframework.cloud.task=DEBUG +spring.aop.proxy-target-class=false +