mirror of
				https://github.com/continew-org/continew-admin.git
				synced 2025-11-04 10:57:10 +08:00 
			
		
		
		
	refactor: 适配线程池自动配置
This commit is contained in:
		@@ -1,74 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * 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
 | 
			
		||||
 *
 | 
			
		||||
 *     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 top.charles7c.cnadmin.common.config.threadpool;
 | 
			
		||||
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.concurrent.Executor;
 | 
			
		||||
import java.util.concurrent.ScheduledExecutorService;
 | 
			
		||||
 | 
			
		||||
import lombok.RequiredArgsConstructor;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
 | 
			
		||||
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
 | 
			
		||||
import org.springframework.context.annotation.Configuration;
 | 
			
		||||
import org.springframework.scheduling.annotation.AsyncConfigurer;
 | 
			
		||||
import org.springframework.scheduling.annotation.EnableAsync;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.util.ArrayUtil;
 | 
			
		||||
 | 
			
		||||
import top.charles7c.cnadmin.common.exception.ServiceException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 异步任务执行配置
 | 
			
		||||
 *
 | 
			
		||||
 * @author Lion Li(RuoYi-Vue-Plus)
 | 
			
		||||
 * @author Charles7c
 | 
			
		||||
 * @since 2022/12/23 22:33
 | 
			
		||||
 */
 | 
			
		||||
@Slf4j
 | 
			
		||||
@Configuration
 | 
			
		||||
@RequiredArgsConstructor
 | 
			
		||||
@EnableAsync(proxyTargetClass = true)
 | 
			
		||||
public class AsyncConfiguration implements AsyncConfigurer {
 | 
			
		||||
 | 
			
		||||
    private final ScheduledExecutorService scheduledExecutorService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 异步任务 @Async 执行时,使用 Java 内置线程池
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public Executor getAsyncExecutor() {
 | 
			
		||||
        return scheduledExecutorService;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 异步任务执行时的异常处理
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
 | 
			
		||||
        return (throwable, method, objects) -> {
 | 
			
		||||
            throwable.printStackTrace();
 | 
			
		||||
            StringBuilder sb = new StringBuilder();
 | 
			
		||||
            sb.append("Exception message - ").append(throwable.getMessage()).append(", Method name - ")
 | 
			
		||||
                .append(method.getName());
 | 
			
		||||
            if (ArrayUtil.isNotEmpty(objects)) {
 | 
			
		||||
                sb.append(", Parameter value - ").append(Arrays.toString(objects));
 | 
			
		||||
            }
 | 
			
		||||
            throw new ServiceException(sb.toString());
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,85 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * 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
 | 
			
		||||
 *
 | 
			
		||||
 *     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 top.charles7c.cnadmin.common.config.threadpool;
 | 
			
		||||
 | 
			
		||||
import java.util.concurrent.ScheduledExecutorService;
 | 
			
		||||
import java.util.concurrent.ScheduledThreadPoolExecutor;
 | 
			
		||||
import java.util.concurrent.ThreadPoolExecutor;
 | 
			
		||||
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
 | 
			
		||||
import org.apache.commons.lang3.concurrent.BasicThreadFactory;
 | 
			
		||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 | 
			
		||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
 | 
			
		||||
import org.springframework.context.annotation.Bean;
 | 
			
		||||
import org.springframework.context.annotation.Configuration;
 | 
			
		||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 | 
			
		||||
 | 
			
		||||
import top.charles7c.cnadmin.common.util.ExceptionUtils;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 线程池配置
 | 
			
		||||
 *
 | 
			
		||||
 * @author Lion Li(RuoYi-Vue-Plus)
 | 
			
		||||
 * @author Charles7c
 | 
			
		||||
 * @since 2022/12/23 23:13
 | 
			
		||||
 */
 | 
			
		||||
@Slf4j
 | 
			
		||||
@Configuration
 | 
			
		||||
@EnableConfigurationProperties(ThreadPoolProperties.class)
 | 
			
		||||
public class ThreadPoolConfiguration {
 | 
			
		||||
 | 
			
		||||
    /** 核心(最小)线程数 = CPU 核心数 + 1 */
 | 
			
		||||
    private final int corePoolSize = Runtime.getRuntime().availableProcessors() + 1;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Spring 内置线程池:ThreadPoolTaskExecutor
 | 
			
		||||
     */
 | 
			
		||||
    @Bean
 | 
			
		||||
    @ConditionalOnProperty(prefix = "thread-pool", name = "enabled", havingValue = "true")
 | 
			
		||||
    public ThreadPoolTaskExecutor threadPoolTaskExecutor(ThreadPoolProperties threadPoolProperties) {
 | 
			
		||||
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
 | 
			
		||||
        // 核心(最小)线程数
 | 
			
		||||
        executor.setCorePoolSize(corePoolSize);
 | 
			
		||||
        // 最大线程数
 | 
			
		||||
        executor.setMaxPoolSize(corePoolSize * 2);
 | 
			
		||||
        // 队列容量
 | 
			
		||||
        executor.setQueueCapacity(threadPoolProperties.getQueueCapacity());
 | 
			
		||||
        // 活跃时间
 | 
			
		||||
        executor.setKeepAliveSeconds(threadPoolProperties.getKeepAliveSeconds());
 | 
			
		||||
        // 配置当池内线程数已达到上限的时候,该如何处理新任务:不在新线程中执行任务,而是由调用者所在的线程来执行
 | 
			
		||||
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
 | 
			
		||||
        return executor;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Java 内置线程池:ScheduledExecutorService(适用于执行周期性或定时任务)
 | 
			
		||||
     */
 | 
			
		||||
    @Bean
 | 
			
		||||
    public ScheduledExecutorService scheduledExecutorService() {
 | 
			
		||||
        return new ScheduledThreadPoolExecutor(corePoolSize,
 | 
			
		||||
            new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build(),
 | 
			
		||||
            new ThreadPoolExecutor.CallerRunsPolicy()) {
 | 
			
		||||
 | 
			
		||||
            @Override
 | 
			
		||||
            protected void afterExecute(Runnable runnable, Throwable throwable) {
 | 
			
		||||
                super.afterExecute(runnable, throwable);
 | 
			
		||||
                ExceptionUtils.printException(runnable, throwable);
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,43 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * 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
 | 
			
		||||
 *
 | 
			
		||||
 *     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 top.charles7c.cnadmin.common.config.threadpool;
 | 
			
		||||
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import org.springframework.boot.context.properties.ConfigurationProperties;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 线程池配置属性
 | 
			
		||||
 *
 | 
			
		||||
 * @author Lion Li(RuoYi-Vue-Plus)
 | 
			
		||||
 * @author Charles7c
 | 
			
		||||
 * @since 2022/12/23 23:06
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
@ConfigurationProperties(prefix = "thread-pool")
 | 
			
		||||
public class ThreadPoolProperties {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 队列容量
 | 
			
		||||
     */
 | 
			
		||||
    private int queueCapacity;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 活跃时间
 | 
			
		||||
     */
 | 
			
		||||
    private int keepAliveSeconds;
 | 
			
		||||
}
 | 
			
		||||
@@ -216,12 +216,11 @@ management.health:
 | 
			
		||||
 | 
			
		||||
--- ### 线程池配置
 | 
			
		||||
thread-pool:
 | 
			
		||||
  # 是否启用线程池
 | 
			
		||||
  enabled: true
 | 
			
		||||
  # 队列容量
 | 
			
		||||
  queueCapacity: 128
 | 
			
		||||
  # 活跃时间
 | 
			
		||||
  keepAliveSeconds: 300
 | 
			
		||||
  queue-capacity: 128
 | 
			
		||||
  # 活跃时间(单位:秒)
 | 
			
		||||
  keep-alive-seconds: 300
 | 
			
		||||
 | 
			
		||||
--- ### 代码生成器配置
 | 
			
		||||
generator:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user