|
@@ -0,0 +1,67 @@
|
|
|
+/**
|
|
|
+ * Copyright (c) 2018-2028, Chill Zhuang 庄骞 (smallchill@163.com).
|
|
|
+ * <p>
|
|
|
+ * 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
|
|
|
+ * <p>
|
|
|
+ * http://www.gnu.org/licenses/lgpl.html
|
|
|
+ * <p>
|
|
|
+ * 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();
|
|
|
+ }
|
|
|
+
|
|
|
+}
|