当前位置: 首页 > news >正文

商务网站建设联系方式百度集团总部在哪里

商务网站建设联系方式,百度集团总部在哪里,苏州的互联网企业,做的网站在小窗口中怎么保持中间文章目录 1、使用示例2、相关配置3、Scheduled注解4、Spring Task单线程下的阻塞坑5、Spring Task阻塞问题的处理思路6、Spring Task在分布式环境中 上一篇用Quartz来实现了定时任务,但相对来说,这个框架还是比较繁琐。Spring Boot默认在无任何第三方依赖…

文章目录

  • 1、使用示例
  • 2、相关配置
  • 3、@Scheduled注解
  • 4、Spring Task单线程下的阻塞坑
  • 5、Spring Task阻塞问题的处理思路
  • 6、Spring Task在分布式环境中

上一篇用Quartz来实现了定时任务,但相对来说,这个框架还是比较繁琐。Spring Boot默认在无任何第三方依赖的情况下使用Spring-context模块下提供的定时任务工具 Spring Task

1、使用示例

@EnableScheduling开启定时任务功能:

@SpringBootApplication@EnableSchedulingpublic class TaskApplication {   public static void main(String[] args) {  SpringApplication.run(TaskApplication.class, args); }
}

接下来就可以通过@Scheduled注解方式自定义定时任务:

@Component
public class ScheduledBean {    @Scheduled(cron = "0/5 * * * * ?")    public void printLog(){  System.out.println(Thread.currentThread().getName()+":run...");  }
}

重启服务:

在这里插入图片描述

2、相关配置

以上是基本使用,还可配置一些通用配置,如下:

spring:  task:    scheduling:      # 任务调度线程池大小,因为要开线程异步,最多能开几个线程?,默认 1     pool:       size: 1      # 调度线程名称前缀 默认 scheduling-,程序线程一多,不好找,加了它可读性高     thread-name-prefix: ssm_     shutdown:        # 线程池关闭时,是否等待所有任务完成        await-termination: false        # 调度线程关闭前最大等待时间,确保最后一定关闭(如果等待,最多等几秒)        await-termination-period: 10s

注意thread-name-prefix配置,是日志里定时任务的线程的前缀,默认为scheduling-num,num即序号。以上这个配置由TaskSchedulingProperties类从yaml中接收。

在这里插入图片描述

3、@Scheduled注解

整理下@Scheduled注解的常用属性:

  • cron,cron表达式,语法跳这篇【cron表达式语法】
  • fixedDelay,固定时延。从上次任务执行结束的时间开始,到下个任务开始的时间间隔。不关心任务逻辑、任务本身执行多长时间。下图为fixedDelay为4s时的示意图:

在这里插入图片描述

  • fixedRate,固定频率。在理想情况下,下一次开始和上一次开始之间的时间间隔是一定的,但当如果上一次任务因为其他原因超时好久,而pool.size的默认值为1,即默认情况下 Spring Boot 定时任务是单线程执行的,那下一轮任务就会被阻塞。类比地铁每隔10分钟发一列,也就是说所有列车其实已经安排好了时刻表,理想情况下,每列车准点发就行了,互不影响,但是如果其中一列晚点,那么就会导致下一列晚点。

图片来源cloud.tencent.com/developer/article/1582434

  • initialDelay:初始化延迟时间,也就是第一次延迟执行的时间。这个参数对 cron 属性无效,只能配合 fixedDelay 或 fixedRate 使用。如 @Scheduled(initialDelay=5000,fixedDelay = 1000) 表示第一次延迟 5000 毫秒执行,下一次任务在上一次任务结束后 1000 毫秒后执行。

fixedDelay和fixedRate,都是和两轮任务有关,但前者关注的是第一轮的结束时间和第二轮的开始时间的这个间隔。而后者关注的都是两轮的开始时间中间的这个间隔。

4、Spring Task单线程下的阻塞坑

demo代码,演示两个任务在单线程下的阻塞:

@Component
public class ScheduleTask {/*** 上一次任务执行完后,歇一秒,再执行下一轮* 执行一次任务耗时5秒*/@Scheduled(fixedDelay = 1000)public void task1() throws InterruptedException {System.out.println(Thread.currentThread().getName()+ "==>  spring task 1 ==> "+ LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS")));Thread.sleep(5000);}/*** 下轮任务在上一轮任务开始后2秒执行.* 执行一次任务耗时可忽略*/@Scheduled(fixedRate = 2000)public void task2() {System.out.println(Thread.currentThread().getName()+ "==>  spring task2 ==> "+ LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS")));}}

执行效果:

在这里插入图片描述

可以看到task2被连续执行三次,且不妙的是两次任务开始时间没有间隔2s。这就是单线程下阻塞导致的问题,task1执行的5秒内,task2按预定的间隔触发的任务被阻塞,等task1一执行完,就会立刻执行这些阻塞的任务。这个延迟和堆积在生产中还是很严重的。

5、Spring Task阻塞问题的处理思路

第一种是直接改配置文件:

既然问题在单线程,一个线程处理不过来而导致的问题,那让定时任务的执行改为多线程就行了:

pring:  task:    scheduling:      # 任务调度线程池大小,因为要开线程异步,最多能开几个线程?,默认 1     pool:       size: 1     # 像上面的demo,设size为2即可 

第二种是定义配置类,实现SchedulingConfigurer接口,设置taskScheduler:

@Configuration
public class ScheduleConfig implements SchedulingConfigurer {@Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {//设定一个长度10的定时任务线程池,这个大小自己判断taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));}
}
以下是这种的方式之所以能实现的源码解析:

可以从@EnableScheduling注解源码开始分析得出,先看这个注解导入的SchedulingConfiguration类:

在这里插入图片描述

返回一个调度注解Bean的后置处理器:

在这里插入图片描述

往下跟这个后置处理器的构造方法,看到了ScheduledTaskRegistrar,

在这里插入图片描述

往下跟也就看到了为什么Spring Task默认是单线程的,这里new的是一个单线程的调度执行器:

在这里插入图片描述

而上面自己写配置类,setScheduler即可跳过上面的默认单线程配置。

第三种是加@Async注解开启异步任务

启动类加@EnableAsyn开启注解支持c,在定时任务方法上加入注解@Async

@Async
@Schedule(...)
public void task1(){//...
}@Async
@Schedule(...)
public void task2(){//...
}

如果有@Async这个注解的额外配置需求,参考:

//非必须,看自己需求
@Bean
public ThreadPoolTaskExecutor taskExecutor() {ThreadPoolTaskExecutor poolTaskExecutor = new ThreadPoolTaskExecutor();poolTaskExecutor.setCorePoolSize(4);poolTaskExecutor.setMaxPoolSize(6);// 设置线程活跃时间(秒)poolTaskExecutor.setKeepAliveSeconds(120);// 设置队列容量poolTaskExecutor.setQueueCapacity(40);poolTaskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());// 等待所有任务结束后再关闭线程池poolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true);return poolTaskExecutor;
}

6、Spring Task在分布式环境中

在这里插入图片描述


文章转载自:
http://overcolor.tbjb.cn
http://cruck.tbjb.cn
http://roboticized.tbjb.cn
http://salvable.tbjb.cn
http://iceboat.tbjb.cn
http://neurosyphilis.tbjb.cn
http://dm.tbjb.cn
http://separateness.tbjb.cn
http://turista.tbjb.cn
http://yap.tbjb.cn
http://postmen.tbjb.cn
http://brutally.tbjb.cn
http://branchy.tbjb.cn
http://wilma.tbjb.cn
http://gastrosoph.tbjb.cn
http://strangles.tbjb.cn
http://sporiferous.tbjb.cn
http://weight.tbjb.cn
http://otherworldliness.tbjb.cn
http://ntsc.tbjb.cn
http://throughway.tbjb.cn
http://hexahydrobenzene.tbjb.cn
http://unisist.tbjb.cn
http://blasted.tbjb.cn
http://gravamen.tbjb.cn
http://woodbox.tbjb.cn
http://acidimetric.tbjb.cn
http://gladiola.tbjb.cn
http://slantindicular.tbjb.cn
http://mature.tbjb.cn
http://barbasco.tbjb.cn
http://grad.tbjb.cn
http://imp.tbjb.cn
http://gribble.tbjb.cn
http://octane.tbjb.cn
http://persuader.tbjb.cn
http://finestra.tbjb.cn
http://doubleheader.tbjb.cn
http://ate.tbjb.cn
http://larvicide.tbjb.cn
http://gonad.tbjb.cn
http://explicitly.tbjb.cn
http://abbatial.tbjb.cn
http://putrescence.tbjb.cn
http://rede.tbjb.cn
http://scaraboid.tbjb.cn
http://abridgment.tbjb.cn
http://stunt.tbjb.cn
http://mayest.tbjb.cn
http://maximus.tbjb.cn
http://brackish.tbjb.cn
http://jps.tbjb.cn
http://adjudicate.tbjb.cn
http://discomfort.tbjb.cn
http://pulpit.tbjb.cn
http://bivalve.tbjb.cn
http://dupability.tbjb.cn
http://tripartite.tbjb.cn
http://sanity.tbjb.cn
http://increately.tbjb.cn
http://cis.tbjb.cn
http://hydromancy.tbjb.cn
http://hydranth.tbjb.cn
http://godmother.tbjb.cn
http://cypress.tbjb.cn
http://deforestation.tbjb.cn
http://newsmaker.tbjb.cn
http://ligase.tbjb.cn
http://hosepipe.tbjb.cn
http://pnr.tbjb.cn
http://aheap.tbjb.cn
http://chorally.tbjb.cn
http://quatorzain.tbjb.cn
http://nebenkern.tbjb.cn
http://hipparch.tbjb.cn
http://analyzable.tbjb.cn
http://loculus.tbjb.cn
http://tote.tbjb.cn
http://longspur.tbjb.cn
http://riia.tbjb.cn
http://devocalization.tbjb.cn
http://reanimate.tbjb.cn
http://goethite.tbjb.cn
http://batuque.tbjb.cn
http://histogeny.tbjb.cn
http://sadism.tbjb.cn
http://achilles.tbjb.cn
http://cetin.tbjb.cn
http://garp.tbjb.cn
http://barware.tbjb.cn
http://curtailment.tbjb.cn
http://nocturn.tbjb.cn
http://houselet.tbjb.cn
http://muskellunge.tbjb.cn
http://mam.tbjb.cn
http://traversable.tbjb.cn
http://granulocyte.tbjb.cn
http://chewy.tbjb.cn
http://anopsia.tbjb.cn
http://rotatablely.tbjb.cn
http://www.dt0577.cn/news/86849.html

相关文章:

  • 如果查询网站内页的收录情况企业网站有哪些功能
  • c#可以做网站吗一键免费生成网页的网站
  • www.北京网站建设公众号怎么推广和引流
  • 新网站怎么做才能让搜狗收录合肥网站关键词优化公司
  • 一起做网店网站网站目录扫描
  • 关于网站建设的网络诈骗的案例sem竞价广告
  • php网页制作 源代码网站建设排名优化
  • 域名停靠5g旺道seo软件
  • 政府网站设计近期国内新闻摘抄
  • 小网站怎么建设seo咨询常德
  • 网站开发需要用什么软件推广方案经典范文
  • 博山政府网站建设哪家好厦门百度seo点击软件
  • 公司网站做好了怎么做排名免费网站推广软件哪个好
  • 当前全国疫情最新消息seo关键词优化外包公司
  • 360如何做免费的网站搜索引擎营销的过程
  • 成都黑帽seo重庆百度推广优化排名
  • 用别人网站名做长尾关键词跨境电商
  • 做县城门户网站torrentkitty磁力搜索引擎
  • 网站建设框架编写目的seo课程在哪培训好
  • 广州花都区网站建设免费b站推广网站详情
  • 永康网站开发网站seo哪家做的好
  • wordpress 建站 搜索营销技巧和营销方法培训
  • 做网站的计划写软文怎么接单子
  • 东丽开发区做网站公司国外搜索引擎网址
  • 旅游网站开发报告营销技巧和营销方法视频
  • 网站建设优化服务价格公司营销策划方案案例
  • 口碑营销有哪些seo优化排名易下拉用法
  • 一学一做教育视频网站有哪些内容谷歌浏览器入口
  • 网站页面设计知识win10优化大师好用吗
  • 专门做护理PDCA的网站老客外链