spring boot 集成多线程
来源:互联网 发布:广州增城区怎么样 知乎 编辑:程序博客网 时间:2024/06/08 05:38
配置pom文件
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
线程池的配置文件
新建配置文件application.yml
添加内容
#线程池配置spring: task: pool: corePoolSize : 4 maxPoolSize : 8 keepAliveSeconds : 60 queueCapacity : 20
新建线程池参数装载类
@ConfigurationProperties(prefix = "spring.task.pool")public class TaskThreadPoolConfig { private int corePoolSize; private int maxPoolSize; private int keepAliveSeconds; private int queueCapacity; public int getCorePoolSize() { return corePoolSize; } public void setCorePoolSize(int corePoolSize) { this.corePoolSize = corePoolSize; } public int getMaxPoolSize() { return maxPoolSize; } public void setMaxPoolSize(int maxPoolSize) { this.maxPoolSize = maxPoolSize; } public int getKeepAliveSeconds() { return keepAliveSeconds; } public void setKeepAliveSeconds(int keepAliveSeconds) { this.keepAliveSeconds = keepAliveSeconds; } public int getQueueCapacity() { return queueCapacity; } public void setQueueCapacity(int queueCapacity) { this.queueCapacity = queueCapacity; }}
@ConfigurationProperties(prefix = “spring.task.pool”)是让spring在创建bean时去加载配置文件中开头为spring.task.pool的内容。
这一步需要在spring boot 启动类上加上注解:
@EnableConfigurationProperties({TaskThreadPoolConfig.class})
告诉spring 去根据配置文件的内容去创建bean
线程池的创建
@Configuration@EnableAsyncpublic class TaskExecutePool { @Autowired private TaskThreadPoolConfig config; @Bean public Executor myTaskAsyncPool() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(config.getCorePoolSize()); executor.setMaxPoolSize(config.getMaxPoolSize()); executor.setQueueCapacity(config.getQueueCapacity()); executor.setKeepAliveSeconds(config.getKeepAliveSeconds()); executor.setThreadNamePrefix("MyExecutor-"); // rejection-policy:当pool已经达到max size的时候,如何处理新任务 // CALLER_RUNS:不在新线程中执行任务,而是由调用者所在的线程来执行 executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); executor.initialize(); return executor; }}
创建多线程任务类和方法
@Componentpublic class doSomeThing{ @Async("myTaskAsyncPool") public void produceTask(){ System.out.println("任务生产..."); } @Async("myTaskAsyncPool") public void comsumerTask(){ System.out.println("任务消费..."); }}
注意:在需要多线程执行的类上加上注解@Component,在需要多线程执行的方法上加上@Async(“myTaskAsyncPool”)
spring boot 的多线程任务就搭好了,核心线程数量可以根据机器处理器核数进行确定。最好不要超过处理器核数。
阅读全文
0 1
- spring boot 集成多线程
- Spring Boot 集成MyBatis
- Spring Boot 集成Swagger
- Spring Boot 集成Mybatis
- Spring Boot 集成Swagger
- spring-boot集成mybatis
- Spring Boot 集成Swagger
- Spring Boot 集成Swagger2
- Spring Boot 集成 log4j2
- spring-boot集成shiro
- spring-boot集成Quartz
- Spring Boot集成Swagger2
- Spring boot集成Mybatis
- spring-boot集成MongoDB
- spring-boot集成ActiveMQ
- Spring Boot 集成Swagger
- spring-boot集成hsqldb
- spring-boot 集成 activemq
- python 切片与迭代
- CentOS 7下静态IP配置的一些坑
- master想回滚到当初的某一个状态,请问怎么操作呀
- 【数据结构作业四】以二叉链表作存储结构,建立一棵二叉树,并输出该二叉树的先序、中序、后序遍历序列、高度和其叶子结点数。
- 代理模式与适配器模式的区别
- spring boot 集成多线程
- charles使用教程指南
- Java常见Lock(三): lock之ReadWriteLock、ReentrantReadWriteLock
- 算法----C中的各类数据在内存中的分布情况(数据区,代码区,堆栈区,操作系统堆栈 详细说明)
- 三种简单的企业预测模型应用
- ShortestPath
- ld script 学习笔记
- 产链接和短连接的区别
- 动态代理机制