diff --git a/blade-core-boot/src/main/java/org/springblade/core/boot/config/BladeExecutorConfiguration.java b/blade-core-boot/src/main/java/org/springblade/core/boot/config/BladeExecutorConfiguration.java new file mode 100644 index 0000000..dd4c422 --- /dev/null +++ b/blade-core-boot/src/main/java/org/springblade/core/boot/config/BladeExecutorConfiguration.java @@ -0,0 +1,67 @@ +/** + * Copyright (c) 2018-2028, Chill Zhuang 庄骞 (smallchill@163.com). + *
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *
+ * http://www.gnu.org/licenses/lgpl.html + *
+ * 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.springblade.core.boot.config; + +import lombok.AllArgsConstructor; +import org.springblade.core.boot.props.BladeAsyncProperties; +import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; +import org.springframework.aop.interceptor.SimpleAsyncUncaughtExceptionHandler; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.AsyncConfigurerSupport; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * 异步处理 + * + * @author Chill + */ +@Configuration +@EnableAsync +@EnableScheduling +@AllArgsConstructor +@EnableConfigurationProperties({ + BladeAsyncProperties.class +}) +public class BladeExecutorConfiguration extends AsyncConfigurerSupport { + + private final BladeAsyncProperties bladeAsyncProperties; + + @Override + @Bean(name = "taskExecutor") + public Executor getAsyncExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setCorePoolSize(bladeAsyncProperties.getCorePoolSize()); + executor.setMaxPoolSize(bladeAsyncProperties.getMaxPoolSize()); + executor.setQueueCapacity(bladeAsyncProperties.getQueueCapacity()); + executor.setKeepAliveSeconds(bladeAsyncProperties.getKeepAliveSeconds()); + executor.setThreadNamePrefix("async-executor-"); + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + return executor; + } + + @Override + public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { + return new SimpleAsyncUncaughtExceptionHandler(); + } + +} diff --git a/blade-core-boot/src/main/java/org/springblade/core/boot/props/BladeAsyncProperties.java b/blade-core-boot/src/main/java/org/springblade/core/boot/props/BladeAsyncProperties.java new file mode 100644 index 0000000..7f4b995 --- /dev/null +++ b/blade-core-boot/src/main/java/org/springblade/core/boot/props/BladeAsyncProperties.java @@ -0,0 +1,46 @@ +/** + * Copyright (c) 2018-2028, Chill Zhuang 庄骞 (smallchill@163.com). + *
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *
+ * http://www.gnu.org/licenses/lgpl.html + *
+ * 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.springblade.core.boot.props; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * 异步配置 + * @author Chill + */ +@Getter +@Setter +@ConfigurationProperties("blade.async") +public class BladeAsyncProperties { + /** + * 异步核心线程数,默认:2 + */ + private int corePoolSize = 2; + /** + * 异步最大线程数,默认:50 + */ + private int maxPoolSize = 50; + /** + * 队列容量,默认:10000 + */ + private int queueCapacity = 10000; + /** + * 线程存活时间,默认:300 + */ + private int keepAliveSeconds = 300; +}