From ee3653b1c4633e73d8c74a4f8c283c82ac6c7dd9 Mon Sep 17 00:00:00 2001 From: smallchill Date: Fri, 25 Jan 2019 15:58:30 +0800 Subject: [PATCH] =?UTF-8?q?:zap:=20=E5=A2=9E=E5=8A=A0=E5=BC=82=E6=AD=A5?= =?UTF-8?q?=E7=BA=BF=E7=A8=8B=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/BladeExecutorConfiguration.java | 67 +++++++++++++++++++ .../core/boot/props/BladeAsyncProperties.java | 46 +++++++++++++ 2 files changed, 113 insertions(+) create mode 100644 blade-core-boot/src/main/java/org/springblade/core/boot/config/BladeExecutorConfiguration.java create mode 100644 blade-core-boot/src/main/java/org/springblade/core/boot/props/BladeAsyncProperties.java 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; +}