sigar springboot_Spring Boot详解(3)定时任务

54070e80712b4df9039d91324c7f0efa.png
Spring Boot详解(3)定时任务​mp.weixin.qq.com
edc88c0beefb6a3c9b502eaee080c780.png

定时任务:我们在项目中,会使用定时任务去执行一些业务上或者是项目数据的备份和更新的操作,那么我们在微服务架构中怎么使用定时任务呢?又有多少种定时任务的实现方式呢?而定时任务的原理又是什么呢?


1. Timer 和 ScheduledExecutorService

Timer是jdk中提供的一个定时器工具,使用的时候会在主线程之外起一个单独的线程执行指定的计划任务,可以指定执行一次或者反复执行多次。但是不能指定时间运行,所以使用在使用场景上较为局限!

import 

ScheduledExecutorService的主要作用就是可以将定时任务与线程池功能结合使用。

public 

2.Spring 配置定时任务

在Spring中,通过Spring的配置文件进行注入定时任务的配置类,注入定时任务的执行类,通过标签定义。

<description>
        定时任务
    

代码实现

@Service

同样,我们也可以使用注解的形式来实现定时任务。

@Component

3.SpringBoot 实现定时任务

  • 基于注解@Schedule

默认是单线程的,任务的执行时间受上一个任务的执行时间影响。

@Component

通过不同的corn表达式,我们可以定义各种任务的执行时间

0 
  • 基于接口的定时任务(SchedulingConfiguration)

导入依赖

<parent>
        

添加数据库记录,在数据库中配置定时任务表达式

DROP DATABASE IF EXISTS `socks`;
CREATE DATABASE `socks`;
USE `SOCKS`;
DROP TABLE IF EXISTS `cron`;
CREATE TABLE `cron`  (
  `cron_id` varchar(30) NOT NULL PRIMARY KEY,
  `cron` varchar(30) NOT NULL  
);
INSERT INTO `cron` VALUES ('1', '0/5 * * * * ?');

创建定时器,这里我们使用的是TriggerTask,目的是来循环执行我们在数据库中配置的执行周期,执行定时任务!

@Componen

多线程定时任务,基于注解实现!

//@Component注解用于对那些比较中立的类进行注释;

这种方式可以使每个任务的执行不受上一个或其他任务执行的状态所影响,在项目中我们在执行一些周期性间隔的任务时,可以配置为多线程的任务形式,但是我们要考虑到每个线程的执行时间,不要造成定时任务占用过多的线程,导致系统可用性降低!

4.使用quartz实现定时任务

Quartz设计者做了一个设计选择来从调度分离开作业。Quartz中的触发器用来告诉调度程序作业什么时候触发。框架提供了一把触发器类型,但两个最常用的是SimpleTrigger和CronTrigger。SimpleTrigger为需要简单打火调度而设计。典型地,如果你需要在给定的时间和重复次数或者两次打火之间等待的秒数打火一个作业,那么SimpleTrigger适合你。另一方面,如果你有许多复杂的作业调度,那么或许需要CronTrigger。
    CronTrigger是基于Calendar-like调度的。当你需要在除星期六和星期天外的每天上午10点半执行作业时,那么应该使用CronTrigger。正如它的名字所暗示的那样,CronTrigger是基于Unix克隆表达式的。

导入依赖:

<dependency>
    

由于我们使用的是spring-boot框架,其目的是做到零配置文件,所以我们不使用xml文件的配置文件来定义一个定时器,而是使用向spring容器暴露bean的方式

@Configuration

MethodInvokingJobDetailFactoryBean:此工厂主要用来制作一个jobDetail,即制作一个任务。由于我们所做的定时任务根本上讲其实就是执行一个方法。所以用这个工厂比较方便。

      注意:其setTargetObject所设置的是一个对象而不是一个类。

CronTriggerBean:定义一个触发器。

      注意:setCronExpression:是一个表达式,如果此表达式不合规范,即会抛出异常。

SchedulerFactoryBean:主要的管理的工厂,这是最主要的一个bean。quartz通过这个工厂来进行对各触发器的管理。

  4.对quartz的封装

    由上面代码可以看出来,此处我们设置的是一个固定的cronExpression,那么,做为项目中使用的话,我们一般是需要其动态设置比如从数据库中取出来。

    其实做法也很简单,我们只需要定义一个Trigger来继承CronTriggerBean。顶用其setCronExpression方法即可。

    那么另外一个问题,如果我们要定义两个定时任务则会比较麻烦,需要先注入一个任务工厂,在注入一个触发器。

    为了减少这样的配置,我们定义了一个抽象的超类来继承CronTriggerBean。

public 

其init()方法,来为这个触发器绑定任务。其任务为一个Job类型的,也就是说其执行的任务为实现了Job接口的类,这个任务会有一个execute()方法,来执行任务题。

public 

为了给触发器添加任务,我们需要在子类中调用init()方法,由于spring容器注入时是使用的空参的构造函数,所以我们在此构造函数中调用init()方法。

@Component

此时我们只需要在配置类中加入一个配置就可以了。

@Bean
    

本文为SpringBoot详解系列的定时任务专题,配套的为大家找到相关的的学习视频和项目资料,别忘记关注我获取视频呦!

6bc43a18134de69f146059358cda49b1.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一种用于构建独立的、可扩展的Java应用程序的开发框架。而SIGAR是一个Java库,用于获取系统信息,如CPU使用率、内存使用率、磁盘空间等。集成SIGAR可以让我们在Spring Boot应用程序中获取系统的详细信息。 要在Spring Boot中集成SIGAR,我们首先需要将SIGAR库添加到项目的依赖中。可以通过在pom.xml文件中添加如下依赖来实现: ```xml <dependency> <groupId>org.fusesource</groupId> <artifactId>sigar</artifactId> <version>1.6.4</version> <scope>runtime</scope> </dependency> ``` 添加依赖后,我们可以使用SIGAR库提供的API来获取系统信息。例如,我们可以编写一个类来获取CPU使用率的示例: ```java import org.hyperic.sigar.CpuPerc; import org.hyperic.sigar.Sigar; import org.springframework.stereotype.Component; @Component public class SystemInfo { private Sigar sigar; public SystemInfo() { sigar = new Sigar(); } public double getCpuUsage() { try { CpuPerc cpuPerc = sigar.getCpuPerc(); return cpuPerc.getCombined(); } catch (Exception e) { e.printStackTrace(); return 0.0; } } } ``` 在这个示例中,我们使用了Sigar类和CpuPerc类来获取CPU使用率。通过调用getCpuPerc方法,我们可以得到一个CpuPerc对象,然后通过调用getCombined方法获取CPU的使用率。 在这个类上添加@Component注解可以让Spring Boot自动扫描并将其作为一个Bean进行管理。我们可以在其他地方注入SystemInfo类,并调用getCpuUsage方法来获取CPU使用率。 除了获取CPU使用率,SIGAR库还提供了很多其他的功能,如获取内存使用率、磁盘空间等。使用SIGAR库可以让我们更方便地在Spring Boot应用程序中获取系统信息,帮助我们监控和管理应用程序的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值