diff --git a/koupleless-adapter-executorservice-spring-2.3/pom.xml b/koupleless-adapter-executorservice-spring-2.3/pom.xml
new file mode 100644
index 000000000..b3a2bf243
--- /dev/null
+++ b/koupleless-adapter-executorservice-spring-2.3/pom.xml
@@ -0,0 +1,42 @@
+
+
+ 4.0.0
+
+ com.alipay.sofa.koupleless
+ koupleless-adapter
+ ${revision}
+ ../pom.xml
+
+ koupleless-adapter-executorservice-spring-2.3
+
+
+ 2.3.5.RELEASE
+ 1.8
+
+
+
+
+ org.springframework.boot
+ spring-boot
+ ${spring.boot.version}
+ provided
+
+
+
+ org.springframework.boot
+ spring-boot-autoconfigure
+ ${spring.boot.version}
+ provided
+
+
+
+ com.alipay.sofa.koupleless
+ koupleless-base-plugin
+ ${revision}
+ provided
+
+
+
+
\ No newline at end of file
diff --git a/koupleless-adapter-executorservice-spring-2.3/src/main/java/com/alipay/sofa/koupleless/common/KouplelessThreadPoolTaskExecutor.java b/koupleless-adapter-executorservice-spring-2.3/src/main/java/com/alipay/sofa/koupleless/common/KouplelessThreadPoolTaskExecutor.java
new file mode 100644
index 000000000..2759c6398
--- /dev/null
+++ b/koupleless-adapter-executorservice-spring-2.3/src/main/java/com/alipay/sofa/koupleless/common/KouplelessThreadPoolTaskExecutor.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 com.alipay.sofa.koupleless.common;
+
+import com.alipay.sofa.koupleless.common.util.ReflectionUtils;
+import com.alipay.sofa.koupleless.plugin.concurrent.KouplelessExecutorService;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.RejectedExecutionHandler;
+import java.util.concurrent.ThreadFactory;
+
+/**
+ * @author lianglipeng.llp@alibaba-inc.com
+ * @version $Id: KouplelessThreadPoolTaskExecutor.java, v 0.1 2024年05月13日 20:51 立蓬 Exp $
+ */
+public class KouplelessThreadPoolTaskExecutor extends ThreadPoolTaskExecutor {
+
+ @Override
+ protected ExecutorService initializeExecutor(ThreadFactory threadFactory,
+ RejectedExecutionHandler rejectedExecutionHandler) {
+
+ ExecutorService executorService = super.initializeExecutor(threadFactory,
+ rejectedExecutionHandler);
+ KouplelessExecutorService executor = new KouplelessExecutorService(executorService);
+ ReflectionUtils.setField("threadPoolExecutor", this, executor);
+ return executor;
+ }
+}
\ No newline at end of file
diff --git a/koupleless-adapter-executorservice-spring-2.3/src/main/java/org/springframework/boot/autoconfigure/task/TaskExecutionAutoConfiguration.java b/koupleless-adapter-executorservice-spring-2.3/src/main/java/org/springframework/boot/autoconfigure/task/TaskExecutionAutoConfiguration.java
new file mode 100644
index 000000000..2b2ec58c2
--- /dev/null
+++ b/koupleless-adapter-executorservice-spring-2.3/src/main/java/org/springframework/boot/autoconfigure/task/TaskExecutionAutoConfiguration.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.springframework.boot.autoconfigure.task;
+
+import com.alipay.sofa.koupleless.common.KouplelessThreadPoolTaskExecutor;
+import org.springframework.beans.factory.ObjectProvider;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.task.TaskExecutionProperties.Shutdown;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.boot.task.TaskExecutorBuilder;
+import org.springframework.boot.task.TaskExecutorCustomizer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.core.task.TaskDecorator;
+import org.springframework.core.task.TaskExecutor;
+import org.springframework.scheduling.annotation.AsyncAnnotationBeanPostProcessor;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+
+/**
+ * {@link EnableAutoConfiguration Auto-configuration} for {@link TaskExecutor}.
+ * springboot 2.3.x~2.6.x 均可以用该类覆盖
+ * @author Stephane Nicoll
+ * @author Camille Vienot
+ * @since 2.1.0
+ */
+@ConditionalOnClass(ThreadPoolTaskExecutor.class)
+@Configuration(proxyBeanMethods = false)
+@EnableConfigurationProperties(TaskExecutionProperties.class)
+public class TaskExecutionAutoConfiguration {
+
+ /**
+ * Bean name of the application {@link TaskExecutor}.
+ */
+ public static final String APPLICATION_TASK_EXECUTOR_BEAN_NAME = "applicationTaskExecutor";
+
+ @Bean
+ @ConditionalOnMissingBean
+ public TaskExecutorBuilder taskExecutorBuilder(TaskExecutionProperties properties,
+ ObjectProvider taskExecutorCustomizers,
+ ObjectProvider taskDecorator) {
+ TaskExecutionProperties.Pool pool = properties.getPool();
+ TaskExecutorBuilder builder = new TaskExecutorBuilder();
+ builder = builder.queueCapacity(pool.getQueueCapacity());
+ builder = builder.corePoolSize(pool.getCoreSize());
+ builder = builder.maxPoolSize(pool.getMaxSize());
+ builder = builder.allowCoreThreadTimeOut(pool.isAllowCoreThreadTimeout());
+ builder = builder.keepAlive(pool.getKeepAlive());
+ Shutdown shutdown = properties.getShutdown();
+ builder = builder.awaitTermination(shutdown.isAwaitTermination());
+ builder = builder.awaitTerminationPeriod(shutdown.getAwaitTerminationPeriod());
+ builder = builder.threadNamePrefix(properties.getThreadNamePrefix());
+ builder = builder.customizers(taskExecutorCustomizers.orderedStream()::iterator);
+ builder = builder.taskDecorator(taskDecorator.getIfUnique());
+ return builder;
+ }
+
+ @Lazy
+ @Bean(name = { APPLICATION_TASK_EXECUTOR_BEAN_NAME,
+ AsyncAnnotationBeanPostProcessor.DEFAULT_TASK_EXECUTOR_BEAN_NAME })
+ @ConditionalOnMissingBean(Executor.class)
+ public ThreadPoolTaskExecutor applicationTaskExecutor(TaskExecutorBuilder builder) {
+ return builder.configure(new KouplelessThreadPoolTaskExecutor());
+ }
+}
\ No newline at end of file
diff --git a/koupleless-adapter-executorservice-spring-2.7/pom.xml b/koupleless-adapter-executorservice-spring-2.7/pom.xml
new file mode 100644
index 000000000..5b1c569ae
--- /dev/null
+++ b/koupleless-adapter-executorservice-spring-2.7/pom.xml
@@ -0,0 +1,44 @@
+
+
+ 4.0.0
+
+ com.alipay.sofa.koupleless
+ koupleless-adapter
+ ${revision}
+ ../pom.xml
+
+
+ koupleless-adapter-executorservice-spring-2.7
+ ${revision}
+
+
+ 2.7.0
+ 1.8
+
+
+
+
+
+ org.springframework.boot
+ spring-boot
+ ${spring.boot.version}
+ provided
+
+
+
+ org.springframework.boot
+ spring-boot-autoconfigure
+ ${spring.boot.version}
+ provided
+
+
+
+ com.alipay.sofa.koupleless
+ koupleless-base-plugin
+ ${revision}
+ provided
+
+
+
\ No newline at end of file
diff --git a/koupleless-adapter-executorservice-spring-2.7/src/main/java/com/alipay/sofa/koupleless/common/KouplelessThreadPoolTaskExecutor.java b/koupleless-adapter-executorservice-spring-2.7/src/main/java/com/alipay/sofa/koupleless/common/KouplelessThreadPoolTaskExecutor.java
new file mode 100644
index 000000000..2759c6398
--- /dev/null
+++ b/koupleless-adapter-executorservice-spring-2.7/src/main/java/com/alipay/sofa/koupleless/common/KouplelessThreadPoolTaskExecutor.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 com.alipay.sofa.koupleless.common;
+
+import com.alipay.sofa.koupleless.common.util.ReflectionUtils;
+import com.alipay.sofa.koupleless.plugin.concurrent.KouplelessExecutorService;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.RejectedExecutionHandler;
+import java.util.concurrent.ThreadFactory;
+
+/**
+ * @author lianglipeng.llp@alibaba-inc.com
+ * @version $Id: KouplelessThreadPoolTaskExecutor.java, v 0.1 2024年05月13日 20:51 立蓬 Exp $
+ */
+public class KouplelessThreadPoolTaskExecutor extends ThreadPoolTaskExecutor {
+
+ @Override
+ protected ExecutorService initializeExecutor(ThreadFactory threadFactory,
+ RejectedExecutionHandler rejectedExecutionHandler) {
+
+ ExecutorService executorService = super.initializeExecutor(threadFactory,
+ rejectedExecutionHandler);
+ KouplelessExecutorService executor = new KouplelessExecutorService(executorService);
+ ReflectionUtils.setField("threadPoolExecutor", this, executor);
+ return executor;
+ }
+}
\ No newline at end of file
diff --git a/koupleless-adapter-executorservice-spring-2.7/src/main/java/org/springframework/boot/autoconfigure/task/TaskExecutionAutoConfiguration.java b/koupleless-adapter-executorservice-spring-2.7/src/main/java/org/springframework/boot/autoconfigure/task/TaskExecutionAutoConfiguration.java
new file mode 100644
index 000000000..c9ce3cbb3
--- /dev/null
+++ b/koupleless-adapter-executorservice-spring-2.7/src/main/java/org/springframework/boot/autoconfigure/task/TaskExecutionAutoConfiguration.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.springframework.boot.autoconfigure.task;
+
+import com.alipay.sofa.koupleless.common.KouplelessThreadPoolTaskExecutor;
+import org.springframework.beans.factory.ObjectProvider;
+import org.springframework.boot.autoconfigure.AutoConfiguration;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.task.TaskExecutionProperties.Shutdown;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.boot.task.TaskExecutorBuilder;
+import org.springframework.boot.task.TaskExecutorCustomizer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.core.task.TaskDecorator;
+import org.springframework.core.task.TaskExecutor;
+import org.springframework.scheduling.annotation.AsyncAnnotationBeanPostProcessor;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+
+/**
+ * {@link EnableAutoConfiguration Auto-configuration} for {@link TaskExecutor}.
+ * springboot 2.7.x 均可以用该类覆盖
+ * @author Stephane Nicoll
+ * @author Camille Vienot
+ * @since 2.1.0
+ */
+@ConditionalOnClass(ThreadPoolTaskExecutor.class)
+@AutoConfiguration
+@EnableConfigurationProperties(TaskExecutionProperties.class)
+public class TaskExecutionAutoConfiguration {
+
+ /**
+ * Bean name of the application {@link TaskExecutor}.
+ */
+ public static final String APPLICATION_TASK_EXECUTOR_BEAN_NAME = "applicationTaskExecutor";
+
+ @Bean
+ @ConditionalOnMissingBean
+ public TaskExecutorBuilder taskExecutorBuilder(TaskExecutionProperties properties,
+ ObjectProvider taskExecutorCustomizers,
+ ObjectProvider taskDecorator) {
+ TaskExecutionProperties.Pool pool = properties.getPool();
+ TaskExecutorBuilder builder = new TaskExecutorBuilder();
+ builder = builder.queueCapacity(pool.getQueueCapacity());
+ builder = builder.corePoolSize(pool.getCoreSize());
+ builder = builder.maxPoolSize(pool.getMaxSize());
+ builder = builder.allowCoreThreadTimeOut(pool.isAllowCoreThreadTimeout());
+ builder = builder.keepAlive(pool.getKeepAlive());
+ Shutdown shutdown = properties.getShutdown();
+ builder = builder.awaitTermination(shutdown.isAwaitTermination());
+ builder = builder.awaitTerminationPeriod(shutdown.getAwaitTerminationPeriod());
+ builder = builder.threadNamePrefix(properties.getThreadNamePrefix());
+ builder = builder.customizers(taskExecutorCustomizers.orderedStream()::iterator);
+ builder = builder.taskDecorator(taskDecorator.getIfUnique());
+ return builder;
+ }
+
+ @Lazy
+ @Bean(name = { APPLICATION_TASK_EXECUTOR_BEAN_NAME,
+ AsyncAnnotationBeanPostProcessor.DEFAULT_TASK_EXECUTOR_BEAN_NAME })
+ @ConditionalOnMissingBean(Executor.class)
+ public ThreadPoolTaskExecutor applicationTaskExecutor(TaskExecutorBuilder builder) {
+ // 修改了此处
+ return builder.configure(new KouplelessThreadPoolTaskExecutor());
+ }
+
+}
\ No newline at end of file
diff --git a/koupleless-adapter-scheduler-spring-2.3/pom.xml b/koupleless-adapter-scheduler-spring-2.3/pom.xml
new file mode 100644
index 000000000..43cb3e059
--- /dev/null
+++ b/koupleless-adapter-scheduler-spring-2.3/pom.xml
@@ -0,0 +1,42 @@
+
+
+ 4.0.0
+
+ com.alipay.sofa.koupleless
+ koupleless-adapter
+ ${revision}
+ ../pom.xml
+
+
+ koupleless-adapter-scheduler-spring-2.3
+
+
+ 2.3.5.RELEASE
+ 1.8
+
+
+
+
+ org.springframework.boot
+ spring-boot
+ ${spring.boot.version}
+ provided
+
+
+
+ org.springframework.boot
+ spring-boot-autoconfigure
+ ${spring.boot.version}
+ provided
+
+
+
+ com.alipay.sofa.koupleless
+ koupleless-base-plugin
+ ${revision}
+ provided
+
+
+
\ No newline at end of file
diff --git a/koupleless-adapter-scheduler-spring-2.3/src/main/java/com/alipay/sofa/koupleless/common/KouplelessThreadPoolTaskScheduler.java b/koupleless-adapter-scheduler-spring-2.3/src/main/java/com/alipay/sofa/koupleless/common/KouplelessThreadPoolTaskScheduler.java
new file mode 100644
index 000000000..c45a7f75f
--- /dev/null
+++ b/koupleless-adapter-scheduler-spring-2.3/src/main/java/com/alipay/sofa/koupleless/common/KouplelessThreadPoolTaskScheduler.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 com.alipay.sofa.koupleless.common;
+
+import com.alipay.sofa.koupleless.common.util.ReflectionUtils;
+import com.alipay.sofa.koupleless.plugin.concurrent.KouplelessScheduledExecutorService;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.RejectedExecutionHandler;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ThreadFactory;
+
+/**
+ * @author lianglipeng.llp@alibaba-inc.com
+ * @version $Id: KouplelessThreadPoolTaskScheduler.java, v 0.1 2024年05月13日 23:33 立蓬 Exp $
+ */
+public class KouplelessThreadPoolTaskScheduler extends ThreadPoolTaskScheduler {
+
+ @Override
+ protected ExecutorService initializeExecutor(ThreadFactory threadFactory,
+ RejectedExecutionHandler rejectedExecutionHandler) {
+
+ ScheduledExecutorService scheduledExecutor = (ScheduledExecutorService) super.initializeExecutor(
+ threadFactory, rejectedExecutionHandler);
+ ScheduledExecutorService executor = new KouplelessScheduledExecutorService(
+ scheduledExecutor);
+ ReflectionUtils.setField("scheduledExecutor", this, executor);
+ return executor;
+ }
+}
\ No newline at end of file
diff --git a/koupleless-adapter-scheduler-spring-2.3/src/main/java/org/springframework/boot/autoconfigure/task/TaskSchedulingAutoConfiguration.java b/koupleless-adapter-scheduler-spring-2.3/src/main/java/org/springframework/boot/autoconfigure/task/TaskSchedulingAutoConfiguration.java
new file mode 100644
index 000000000..ed4935932
--- /dev/null
+++ b/koupleless-adapter-scheduler-spring-2.3/src/main/java/org/springframework/boot/autoconfigure/task/TaskSchedulingAutoConfiguration.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.springframework.boot.autoconfigure.task;
+
+import java.util.concurrent.ScheduledExecutorService;
+
+import com.alipay.sofa.koupleless.common.KouplelessThreadPoolTaskScheduler;
+import org.springframework.beans.factory.ObjectProvider;
+import org.springframework.boot.LazyInitializationExcludeFilter;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.task.TaskSchedulingProperties.Shutdown;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.boot.task.TaskSchedulerBuilder;
+import org.springframework.boot.task.TaskSchedulerCustomizer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.TaskScheduler;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
+import org.springframework.scheduling.config.TaskManagementConfigUtils;
+
+/**
+ * {@link EnableAutoConfiguration Auto-configuration} for {@link TaskScheduler}.
+ * springboot 2.3.x ~ 2.4.5 都可以用这个类覆盖
+ * @author Stephane Nicoll
+ * @since 2.1.0
+ */
+@ConditionalOnClass(ThreadPoolTaskScheduler.class)
+@Configuration(proxyBeanMethods = false)
+@EnableConfigurationProperties(TaskSchedulingProperties.class)
+@AutoConfigureAfter(TaskExecutionAutoConfiguration.class)
+public class TaskSchedulingAutoConfiguration {
+
+ @Bean
+ @ConditionalOnBean(name = TaskManagementConfigUtils.SCHEDULED_ANNOTATION_PROCESSOR_BEAN_NAME)
+ @ConditionalOnMissingBean({ SchedulingConfigurer.class, TaskScheduler.class,
+ ScheduledExecutorService.class })
+ public ThreadPoolTaskScheduler taskScheduler(TaskSchedulerBuilder builder) {
+ return builder.configure(new KouplelessThreadPoolTaskScheduler());
+ }
+
+ @Bean
+ @ConditionalOnMissingBean
+ public TaskSchedulerBuilder taskSchedulerBuilder(TaskSchedulingProperties properties,
+ ObjectProvider taskSchedulerCustomizers) {
+ TaskSchedulerBuilder builder = new TaskSchedulerBuilder();
+ builder = builder.poolSize(properties.getPool().getSize());
+ Shutdown shutdown = properties.getShutdown();
+ builder = builder.awaitTermination(shutdown.isAwaitTermination());
+ builder = builder.awaitTerminationPeriod(shutdown.getAwaitTerminationPeriod());
+ builder = builder.threadNamePrefix(properties.getThreadNamePrefix());
+ builder = builder.customizers(taskSchedulerCustomizers);
+ return builder;
+ }
+
+}
\ No newline at end of file
diff --git a/koupleless-adapter-scheduler-spring-2.4.6/pom.xml b/koupleless-adapter-scheduler-spring-2.4.6/pom.xml
new file mode 100644
index 000000000..777e63dcf
--- /dev/null
+++ b/koupleless-adapter-scheduler-spring-2.4.6/pom.xml
@@ -0,0 +1,45 @@
+
+
+ 4.0.0
+
+ com.alipay.sofa.koupleless
+ koupleless-adapter
+ ${revision}
+ ../pom.xml
+
+
+
+ koupleless-adapter-scheduler-spring-2.4.6
+ ${revision}
+
+
+ 2.4.6
+ 1.8
+
+
+
+
+ org.springframework.boot
+ spring-boot
+ ${spring.boot.version}
+ provided
+
+
+
+ org.springframework.boot
+ spring-boot-autoconfigure
+ ${spring.boot.version}
+ provided
+
+
+
+ com.alipay.sofa.koupleless
+ koupleless-base-plugin
+ ${revision}
+ provided
+
+
+
+
\ No newline at end of file
diff --git a/koupleless-adapter-scheduler-spring-2.4.6/src/main/java/com/alipay/sofa/koupleless/common/KouplelessThreadPoolTaskScheduler.java b/koupleless-adapter-scheduler-spring-2.4.6/src/main/java/com/alipay/sofa/koupleless/common/KouplelessThreadPoolTaskScheduler.java
new file mode 100644
index 000000000..c45a7f75f
--- /dev/null
+++ b/koupleless-adapter-scheduler-spring-2.4.6/src/main/java/com/alipay/sofa/koupleless/common/KouplelessThreadPoolTaskScheduler.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 com.alipay.sofa.koupleless.common;
+
+import com.alipay.sofa.koupleless.common.util.ReflectionUtils;
+import com.alipay.sofa.koupleless.plugin.concurrent.KouplelessScheduledExecutorService;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.RejectedExecutionHandler;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ThreadFactory;
+
+/**
+ * @author lianglipeng.llp@alibaba-inc.com
+ * @version $Id: KouplelessThreadPoolTaskScheduler.java, v 0.1 2024年05月13日 23:33 立蓬 Exp $
+ */
+public class KouplelessThreadPoolTaskScheduler extends ThreadPoolTaskScheduler {
+
+ @Override
+ protected ExecutorService initializeExecutor(ThreadFactory threadFactory,
+ RejectedExecutionHandler rejectedExecutionHandler) {
+
+ ScheduledExecutorService scheduledExecutor = (ScheduledExecutorService) super.initializeExecutor(
+ threadFactory, rejectedExecutionHandler);
+ ScheduledExecutorService executor = new KouplelessScheduledExecutorService(
+ scheduledExecutor);
+ ReflectionUtils.setField("scheduledExecutor", this, executor);
+ return executor;
+ }
+}
\ No newline at end of file
diff --git a/koupleless-adapter-scheduler-spring-2.4.6/src/main/java/org/springframework/boot/autoconfigure/task/TaskSchedulingAutoConfiguration.java b/koupleless-adapter-scheduler-spring-2.4.6/src/main/java/org/springframework/boot/autoconfigure/task/TaskSchedulingAutoConfiguration.java
new file mode 100644
index 000000000..69f64ce03
--- /dev/null
+++ b/koupleless-adapter-scheduler-spring-2.4.6/src/main/java/org/springframework/boot/autoconfigure/task/TaskSchedulingAutoConfiguration.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.springframework.boot.autoconfigure.task;
+
+import java.util.concurrent.ScheduledExecutorService;
+
+import com.alipay.sofa.koupleless.common.KouplelessThreadPoolTaskScheduler;
+import org.springframework.beans.factory.ObjectProvider;
+import org.springframework.boot.LazyInitializationExcludeFilter;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.task.TaskSchedulingProperties.Shutdown;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.boot.task.TaskSchedulerBuilder;
+import org.springframework.boot.task.TaskSchedulerCustomizer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.TaskScheduler;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
+import org.springframework.scheduling.config.TaskManagementConfigUtils;
+
+/**
+ * {@link EnableAutoConfiguration Auto-configuration} for {@link TaskScheduler}.
+ * springboot 2.4.6 ~ 2.6.x 都可以用这个类覆盖
+ * @author Stephane Nicoll
+ * @since 2.1.0
+ */
+@ConditionalOnClass(ThreadPoolTaskScheduler.class)
+@Configuration(proxyBeanMethods = false)
+@EnableConfigurationProperties(TaskSchedulingProperties.class)
+@AutoConfigureAfter(TaskExecutionAutoConfiguration.class)
+public class TaskSchedulingAutoConfiguration {
+
+ @Bean
+ @ConditionalOnBean(name = TaskManagementConfigUtils.SCHEDULED_ANNOTATION_PROCESSOR_BEAN_NAME)
+ @ConditionalOnMissingBean({ SchedulingConfigurer.class, TaskScheduler.class,
+ ScheduledExecutorService.class })
+ public ThreadPoolTaskScheduler taskScheduler(TaskSchedulerBuilder builder) {
+ return builder.configure(new KouplelessThreadPoolTaskScheduler());
+ }
+
+ @Bean
+ public static LazyInitializationExcludeFilter scheduledBeanLazyInitializationExcludeFilter() {
+ return new ScheduledBeanLazyInitializationExcludeFilter();
+ }
+
+ @Bean
+ @ConditionalOnMissingBean
+ public TaskSchedulerBuilder taskSchedulerBuilder(TaskSchedulingProperties properties,
+ ObjectProvider taskSchedulerCustomizers) {
+ TaskSchedulerBuilder builder = new TaskSchedulerBuilder();
+ builder = builder.poolSize(properties.getPool().getSize());
+ Shutdown shutdown = properties.getShutdown();
+ builder = builder.awaitTermination(shutdown.isAwaitTermination());
+ builder = builder.awaitTerminationPeriod(shutdown.getAwaitTerminationPeriod());
+ builder = builder.threadNamePrefix(properties.getThreadNamePrefix());
+ builder = builder.customizers(taskSchedulerCustomizers);
+ return builder;
+ }
+
+}
diff --git a/koupleless-adapter-scheduler-spring-2.7/pom.xml b/koupleless-adapter-scheduler-spring-2.7/pom.xml
new file mode 100644
index 000000000..2655e1114
--- /dev/null
+++ b/koupleless-adapter-scheduler-spring-2.7/pom.xml
@@ -0,0 +1,43 @@
+
+
+ 4.0.0
+
+ com.alipay.sofa.koupleless
+ koupleless-adapter
+ ${revision}
+ ../pom.xml
+
+
+ koupleless-adapter-scheduler-spring-2.7
+ ${revision}
+
+
+ 2.7.0
+ 1.8
+
+
+
+
+ org.springframework.boot
+ spring-boot
+ ${spring.boot.version}
+ provided
+
+
+
+ org.springframework.boot
+ spring-boot-autoconfigure
+ ${spring.boot.version}
+ provided
+
+
+
+ com.alipay.sofa.koupleless
+ koupleless-base-plugin
+ ${revision}
+ provided
+
+
+
\ No newline at end of file
diff --git a/koupleless-adapter-scheduler-spring-2.7/src/main/java/com/alipay/sofa/koupleless/common/KouplelessThreadPoolTaskScheduler.java b/koupleless-adapter-scheduler-spring-2.7/src/main/java/com/alipay/sofa/koupleless/common/KouplelessThreadPoolTaskScheduler.java
new file mode 100644
index 000000000..c45a7f75f
--- /dev/null
+++ b/koupleless-adapter-scheduler-spring-2.7/src/main/java/com/alipay/sofa/koupleless/common/KouplelessThreadPoolTaskScheduler.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 com.alipay.sofa.koupleless.common;
+
+import com.alipay.sofa.koupleless.common.util.ReflectionUtils;
+import com.alipay.sofa.koupleless.plugin.concurrent.KouplelessScheduledExecutorService;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.RejectedExecutionHandler;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ThreadFactory;
+
+/**
+ * @author lianglipeng.llp@alibaba-inc.com
+ * @version $Id: KouplelessThreadPoolTaskScheduler.java, v 0.1 2024年05月13日 23:33 立蓬 Exp $
+ */
+public class KouplelessThreadPoolTaskScheduler extends ThreadPoolTaskScheduler {
+
+ @Override
+ protected ExecutorService initializeExecutor(ThreadFactory threadFactory,
+ RejectedExecutionHandler rejectedExecutionHandler) {
+
+ ScheduledExecutorService scheduledExecutor = (ScheduledExecutorService) super.initializeExecutor(
+ threadFactory, rejectedExecutionHandler);
+ ScheduledExecutorService executor = new KouplelessScheduledExecutorService(
+ scheduledExecutor);
+ ReflectionUtils.setField("scheduledExecutor", this, executor);
+ return executor;
+ }
+}
\ No newline at end of file
diff --git a/koupleless-adapter-scheduler-spring-2.7/src/main/java/org/springframework/boot/autoconfigure/task/TaskSchedulingAutoConfiguration.java b/koupleless-adapter-scheduler-spring-2.7/src/main/java/org/springframework/boot/autoconfigure/task/TaskSchedulingAutoConfiguration.java
new file mode 100644
index 000000000..0f0606a58
--- /dev/null
+++ b/koupleless-adapter-scheduler-spring-2.7/src/main/java/org/springframework/boot/autoconfigure/task/TaskSchedulingAutoConfiguration.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.springframework.boot.autoconfigure.task;
+
+import com.alipay.sofa.koupleless.common.KouplelessThreadPoolTaskScheduler;
+import org.springframework.beans.factory.ObjectProvider;
+import org.springframework.boot.LazyInitializationExcludeFilter;
+import org.springframework.boot.autoconfigure.AutoConfiguration;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.task.TaskSchedulingProperties.Shutdown;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.boot.task.TaskSchedulerBuilder;
+import org.springframework.boot.task.TaskSchedulerCustomizer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.scheduling.TaskScheduler;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
+import org.springframework.scheduling.config.TaskManagementConfigUtils;
+
+import java.util.concurrent.ScheduledExecutorService;
+
+/**
+ * {@link EnableAutoConfiguration Auto-configuration} for {@link TaskScheduler}.
+ *
+ * @author Stephane Nicoll
+ * @since 2.1.0
+ */
+@ConditionalOnClass(ThreadPoolTaskScheduler.class)
+@AutoConfiguration(after = TaskExecutionAutoConfiguration.class)
+@EnableConfigurationProperties(TaskSchedulingProperties.class)
+public class TaskSchedulingAutoConfiguration {
+
+ @Bean
+ @ConditionalOnBean(name = TaskManagementConfigUtils.SCHEDULED_ANNOTATION_PROCESSOR_BEAN_NAME)
+ @ConditionalOnMissingBean({ SchedulingConfigurer.class, TaskScheduler.class,
+ ScheduledExecutorService.class })
+ public ThreadPoolTaskScheduler taskScheduler(TaskSchedulerBuilder builder) {
+ return builder.configure(new KouplelessThreadPoolTaskScheduler());
+ }
+
+ @Bean
+ @ConditionalOnBean(name = TaskManagementConfigUtils.SCHEDULED_ANNOTATION_PROCESSOR_BEAN_NAME)
+ public static LazyInitializationExcludeFilter scheduledBeanLazyInitializationExcludeFilter() {
+ return new ScheduledBeanLazyInitializationExcludeFilter();
+ }
+
+ @Bean
+ @ConditionalOnMissingBean
+ public TaskSchedulerBuilder taskSchedulerBuilder(TaskSchedulingProperties properties,
+ ObjectProvider taskSchedulerCustomizers) {
+ TaskSchedulerBuilder builder = new TaskSchedulerBuilder();
+ builder = builder.poolSize(properties.getPool().getSize());
+ Shutdown shutdown = properties.getShutdown();
+ builder = builder.awaitTermination(shutdown.isAwaitTermination());
+ builder = builder.awaitTerminationPeriod(shutdown.getAwaitTerminationPeriod());
+ builder = builder.threadNamePrefix(properties.getThreadNamePrefix());
+ builder = builder.customizers(taskSchedulerCustomizers);
+ return builder;
+ }
+
+}
diff --git a/pom.xml b/pom.xml
index 6d5e7ed6c..9d3ee6f62 100644
--- a/pom.xml
+++ b/pom.xml
@@ -93,6 +93,13 @@
koupleless-adapter-spring-boot-logback-2.7.14
koupleless-adaptor-module-resource-load-spring-boot-2.7.14
+
+ koupleless-adapter-scheduler-spring-2.4.6
+ koupleless-adapter-scheduler-spring-2.3
+ koupleless-adapter-scheduler-spring-2.7
+ koupleless-adapter-executorservice-spring-2.3
+ koupleless-adapter-executorservice-spring-2.7
+
koupleless-adapter-log4j2-spring-starter-3.0
koupleless-adapter-log4j2-spring-starter-3.2