SPRINGBOOT启动执行定时任务(20200720)

启动执行

@Component
public class ThreadPoolTaskExecutorPrint implements ApplicationRunner {

@Override
public void run(ApplicationArguments args) {

}

}

 

 

定时任务

ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.scheduleAtFixedRate(() -> {
      … }
}
, 0, 1, TimeUnit.MINUTES);

 

 

示例

package com.fullsee.integrated.middleware.configuration;

import
com.fullsee.integrated.middleware.utils.SpringContextUtil;
import
org.slf4j.Logger;
import
org.slf4j.LoggerFactory;
import
org.springframework.boot.ApplicationArguments;
import
org.springframework.boot.ApplicationRunner;
import
org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import
org.springframework.stereotype.Component;

import
java.util.StringJoiner;
import
java.util.concurrent.BlockingQueue;
import
java.util.concurrent.Executors;
import
java.util.concurrent.ScheduledExecutorService;
import
java.util.concurrent.TimeUnit;

/**
 *
<li>文件名称: 题目名称</li>
 
* <li>文件描述: 题目名称 功能描述</li>
 
* <li>版权所有: 版权所有© 2005-2019</li>
 
* <li> : Fullsee</li>
 
* <li>内容摘要: </li>
 
* <li>其他说明:</li>
 
* <li>完成日期: 2020-07-20 17:17 </li>
 
* <li>修改记录: </li>
 
*
 * @author songyunbing
 * @version
产品版本
 */
@Component
public class ThreadPoolTaskExecutorPrint implements ApplicationRunner {

   
private Logger log = LoggerFactory.getLogger(MiddlewareConfig.LOG.KEY_MID_COLLECT_LOGGER);

   
@Override
   
public void run(ApplicationArguments args) {

        ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor()
;
       
service.scheduleAtFixedRate(() -> {
            String[] beanDefinitionNames = SpringContextUtil.getApplicationContext().getBeanNamesForType(ThreadPoolTaskExecutor.
class);
            if
(beanDefinitionNames != null){
               
for (String beanDefinitionName : beanDefinitionNames) {
                    Object bean = SpringContextUtil.getBean(beanDefinitionName)
;
                    if
(bean instanceof ThreadPoolTaskExecutor){
                        printThreadPoolInfo((ThreadPoolTaskExecutor) bean)
;
                   
}
                }
            }
        }
, 0, 1, TimeUnit.MINUTES);

   
}

   
/**
     *
打印线程池情况
     * @param taskExecutor
    
*/
   
private void printThreadPoolInfo(ThreadPoolTaskExecutor taskExecutor){
       
//活动线程数
       
int activeCount = taskExecutor.getActiveCount();
        int
poolSize = taskExecutor.getPoolSize();
        int
maxPoolSize = taskExecutor.getMaxPoolSize();
        int
corePoolSize = taskExecutor.getCorePoolSize();
        long
taskCount = taskExecutor.getThreadPoolExecutor().getTaskCount();

        long
completedTaskCount = taskExecutor.getThreadPoolExecutor().getCompletedTaskCount();
        int
largestPoolSize = taskExecutor.getThreadPoolExecutor().getLargestPoolSize();
        int
maximumPoolSize = taskExecutor.getThreadPoolExecutor().getMaximumPoolSize();

       
BlockingQueue<Runnable> queue = taskExecutor.getThreadPoolExecutor().getQueue();
       
//队列当前排队线程数
       
int queueSize = queue.size();
       
//剩余队列大小
       
int remainingCapacity = queue.remainingCapacity();

       
StringJoiner sj = new StringJoiner("\r\n","线程池详情:\r\n","\r\n=======================\r\n");
       
sj.add("线程池的基本大小【corePoolSize="+corePoolSize)
                .add(
"线程池中允许的最大线程数【maxPoolSize="+maxPoolSize)
                .add(
"线程池中当前线程的数量【poolSize="+poolSize)
                .add(
"任务计数【taskCount="+taskCount)
                .add(
"活动线程数【activeCount="+activeCount)
                .add(
"完成线程任务数【completedTaskCount="+completedTaskCount)
                .add(
"出现的最大线程个数【largestPoolSize="+largestPoolSize)
                .add(
"线程池中允许的最大线程数【maximumPoolSize="+maximumPoolSize)
                .add(
"剩余队列大小【remainingCapacity="+remainingCapacity)
                .add(
"队列当前排队线程数【queueSize="+queueSize);
       
log.info(sj.toString());
   
}
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值