spring boot通过文件配置yaml里面的属性
yaml文件
fsg:
batch-approval:
# 批量审批
batch-approval:
pool:
core-size: 2
max-size: 10
queue-capacity: 100
keep-alive: 60
name-prefix: ApprovalThread-
shutdown:
await-termination: true
await-termination-period: 60
ConfigurationProperties配置
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import java.time.Duration;
@Data
@ConfigurationProperties("fsg.batch-approval")
public class BatchApprovalProperties {
private Pool pool = new Pool();
private Shutdown shutdown = new Shutdown();
@Data
public static class Pool {
/**
* Queue capacity. An unbounded capacity does not increase the pool and therefore
* ignores the "max-size" property.
*/
private int queueCapacity = 200;
/**
* Core number of threads.
*/
private int coreSize = 2;
/**
* Maximum allowed number of threads. If tasks are filling up the queue, the pool
* can expand up to that size to accommodate the load. Ignored if the queue is
* unbounded.
*/
private int maxSize = 10;
/**
* Whether core threads are allowed to time out. This enables dynamic growing and
* shrinking of the pool.
*/
private boolean allowCoreThreadTimeout = true;
/**
* Time limit for which threads may remain idle before being terminated.
*/
private Integer keepAlive = 60;
private String namePrefix = "ApprovalThread-";
}
@Data
public static class Shutdown {
/**
* Whether the executor should wait for scheduled tasks to complete on shutdown.
*/
private boolean awaitTermination;
/**
* Maximum time the executor should wait for remaining tasks to complete.
*/
private Duration awaitTerminationPeriod;
}
}
使用配置文件的属性
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 java.util.concurrent.Executor;
@EnableAsync
@Configuration
@EnableConfigurationProperties(BatchApprovalProperties.class)
public class BatchApprovalAsyncConfig {
@Bean(name = "batchApprovalTaskExecutor")
public Executor batchApprovalTaskExecutor(BatchApprovalProperties props) {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(props.getPool().getCoreSize()); // 核心线程数
executor.setMaxPoolSize(props.getPool().getMaxSize()); // 最大线程数
executor.setQueueCapacity(props.getPool().getQueueCapacity()); // 队列大小
executor.setKeepAliveSeconds(props.getPool().getKeepAlive()); // 线程空闲时的存活时间
executor.setThreadNamePrefix(props.getPool().getNamePrefix()); // 线程名称前缀
executor.initialize(); // 初始化线程池
return executor;
}
}