学会动态变更springboot定时任务时间,涨薪还不随随便便

spring定时任务调度如何实现动态变更执行时间

用过springboot的都知道,spring自带定时任务调度平台,它可以指定一个表达式,根据这个表达式的时间来执行需要执行任务,没用过也不要担心,下面我都会介绍一下利用cron表达式执行任务和利用毫秒值来执行任务,以及前端页面输入时间来改变任务的执行时间。

先来介绍一下大家都熟知的利用注解方式定时任务实现方式

先创建一个springboot工程

添加依赖

<parent>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-parent</artifactId>

        <version>2.3.8.RELEASE</version>

    </parent>

    <dependencies>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

        </dependency>

    </dependencies>

创建一个类用户要执行的任务 这里利用cron表达式一秒执行一次

@RestController

public class Stack {

    @Scheduled(cron = "0/1 * * * * ?")

    public void Demo(){

        System.out.println(LocalDateTime.now());

    }

}

注意:在启动类中开启定时任务(@EnableScheduling),不开启是定时任务是无效的。

@SpringBootApplication

@EnableScheduling

public class DemoApplication {

    public static void main(String[] args) {

        SpringApplication.run(DemoApplication.class,args);

    }

}

运行结果如下,则表示定时任务启动成功

下面来介绍@Scheduled注解的其他参数

fixedDelay: 在上次调用结束和下一次调用开始之间以毫秒为单位的固定时间段内执行方法

fixedDelayString:在上次调用结束和下一次调用开始之间以毫秒为单位的固定时间段内执行方法(需要注意这里参数需要字符串)

fixedRate:在调用之间以毫秒为单位的固定时间段执行方法

fixedRateString:在调用之间以毫秒为单位的固定时间段执行带注释的方法(这里的参数也是字符串)

以上参数有兴趣有需要的可自行测试,博主已经测试过,在这里就不测试了。

下面主要介绍动态变更定时任务执行时间,停止任务,和重启任务;

要想学会动态定时任务,下面的介绍需要你注意仔细阅读,或者可以拿去测试;

1.什么是Future类型?

Future是对于具体的Runnable或者Callable任务的执行结果进行取消、查询是否完成、获取结果的接口。必要时可以通过get方法获取执行结果,该方法会阻塞直到任务返回结果。

它的接口定义如下:

public interface Future<V> {

    boolean cancel(boolean mayInterruptIfRunning);

    boolean isCancelled();

    boolean isDone();

    V get() throws InterruptedException, ExecutionException;

    V get(long timeout, TimeUnit unit)

        throws InterruptedException, ExecutionException, TimeoutException;

}

2. 它声明这样的五个方法:

cancel方法用来取消任务,如果取消任务成功则返回true,如果取消任务失败则返回false。参数mayInterruptIfRunning表示是否允许取消正在执行却没有执行完毕的任务,如果设置true,则表示可以取消正在执行过程中的任务。如果任务已经完成,则无论mayInterruptIfRunning为true还是false,此方法肯定返回false,即如果取消已经完成的任务会返回false;如果任务正在执行,若mayInterruptIfRunning设置为true,则返回true,若mayInterruptIfRunning设置为false,则返回false;如果任务还没有执行,则无论mayInterruptIfRunning为true还是false,肯定返回true。

isCancelled方法表示任务是否被取消成功,如果在任务正常完成前被取消成功,则返回 true。

isDone方法表示任务是否已经完成,若任务完成,则返回true;

get()方法用来获取执行结果,这个方法会产生阻塞,会一直等到任务执行完毕才返回;

get(long timeout, TimeUnit unit)用来获取执行结果,如果在指定时间内,还没获取到结果,就直接返回null。

3.也就是说Future提供了三种功能:

判断任务是否完成

能够中断任务

能够获取任务执行结果

4.1 编写动态Task类,主要实现通过URL控制任何的添加修改等等。

@RestController

public class DynamicTaskController {

    @Autowired

    private ThreadPoolTaskScheduler threadPoolTaskScheduler;

    /**

     *

     * ThreadPoolTaskScheduler:线程池任务调度类,能够开启线程池进行任务调度。

     * ThreadPoolTaskScheduler.schedule()方法会创建一个定时计划ScheduledFuture,

     * 在这个方法需要添加两个参数,Runnable(线程接口类) 和CronTrigger(定时任务触发器)

     * @return

     */

    @Bean

    public ThreadPoolTaskScheduler threadPoolTaskScheduler() {

        return new ThreadPoolTaskScheduler();

    }

    /**

     * 在ScheduledFuture中有一个cancel可以停止定时任务。

     */

    private ScheduledFuture<?> future;

    /**

     * 启动任务

     **/

    @RequestMapping("/startTask")

    public String startCron() {

    //这里设定任务1秒执行一次

        future = threadPoolTaskScheduler.scheduleAtFixedRate(new TestRunnable(),1000);

        System.out.println("TaskController.startCron()");

        try{

            //get()方法用来获取执行结果,这个方法会产生阻塞,会一直等到任务执行完毕才返回;

            //future的get()设定超时时间

            Object o = future.get(3900, TimeUnit.MILLISECONDS);

            System.out.println(o);

            Object o1 = future.get();

            System.out.println(o1);

        }

        catch ( Exception e){

            System.out.println(e);

        }

        return "startTask";

    }

    /**

     * 停止任务

     **/

    @RequestMapping("/stop")

    public String stopCron() {

        if (future != null) {

            future.cancel(true);

        }

        System.out.println("stopCron()");

        return "stopTask";

    }

    /**

     * 前端页面输入任务间隔,再次启动任务

     **/

    @RequestMapping("/change")

     public String changeCron(@RequestParam int fixedRate) {

        stopCron();// 先停止,再开启.

        future = threadPoolTaskScheduler.scheduleAtFixedRate(new TestRunnable(),fixedRate);

        System.out.println("TaskController.changeCron()");

        return "change";

    }

}

4.2 编写一个简单的线程:

public class TestRunnable implements Runnable {

    @Override

    public void run() {

         Date date = new Date();

        System.out.println("现在执行函数的时间为:"+date);

    }

}

4.3 注:上面类中有几个点需要了解:

一个类ThreadPoolTaskScheduler:线程池任务调度类,能够开启线程池进行任务调度。


ThreadPoolTaskScheduler.schedule()方法会创建一个定时计划ScheduledFuture,在这个方法需要添加两个参数,Runnable(线程接口类) 和CronTrigger(定时任务触发器)

在ScheduledFuture中有一个cancel可以停止定时任务。

看到这里相信大家都已经进一步了解springboot定时任务,快动起来测试一下吧,

这里给大家测试一下变更时间,其他的大家自行测试

启动程序在postman输入如下内容

在控制台打印如下内容表示更改时间成功

 下面的图片列举了可以使用的方法有需要的可以试一试,今天就先说到这里后续也会给大家分享一些技术方面知识,感谢大家能阅读到这里希望能给你的工作提供帮助。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java毕业实习报告资料 java 毕业实习报告   java 毕业>实习报告(一)      作为就业>培训,项目的好坏对培训质量的影响非常大,常常是决定性的作用。这 篇文章是关于在学习 JAVA 软件开发时练习项目的总结,简单总结为以下几点:      1、项目一定要全新的项目,不能是以前做过的      2、项目一定要企业真实项目,不能是精简以后的,不能脱离实际应用系统      3、在开发时要和企业的开发保持一致      4、在做项目的时候不应该有参考代码      长话短说就是以上几点,如果你想要更多的了解,可以继续往后看。      一:项目的地位      因为参加就业培训的学员很多都是有一定的计算机基础,大部分都具备一定的编 程基础,尤其是在校或者是刚毕业的学生,多少都有一些基础。      他们欠缺的主要是两点:      (1)不能全面系统的、深入的掌握某种技术,也就是会的挺多,但都是皮毛,不 能满足就业的需要。      (2)没有任何实际的开发经验,完全是想象中学习,考试还行,一到实际开发和 应用就歇菜了。      解决的方法就是通过项目练习,对所学知识进行深化,然后通过项目来获取实际 开发的经验,从而弥补这些不足,尽快达到企业的实际要求。      二:如何选择项目      项目既然那么重要,肯定不能随随便便找项目,那么究竟如何来选择呢?根据 Java 的研究和实践经验总结,选择项目的时候要注意以下方面:      1:项目不能太大,也不能太小      这个要根据项目练习的阶段,练习的时间,练习的目标来判断。不能太大,太大 了做不完,也不能太小,太小了没有意义,达不到练习的目的。 java毕业实习报告资料全文共8页,当前为第1页。   java毕业实习报告资料全文共8页,当前为第1页。   2:项目不能脱离实际应用系统      项目应该是实际的系统,或者是实际系统的简化和抽象,不能够是没有实战意义 的教学性或者是纯练习性的项目。因为培训的时间有限,必须让学员尽快地融入到实 际项目的开发当中去。任何人接受和掌握一个东西都需要时间去适应,需要重复几次 才能够真正掌握,所以每个项目都必须跟实际应用挂钩。      3:项目应能覆盖所学的主要知识点      学以致用,学完的知识点需要到应用中使用,才能够真正理解和掌握,再说了, 软件开发是一个动手能力要求很高的行业,什么算会了,那就是能够做出来,写出代 码来,把问题解决了,你就算会了。      4:最后综合项目一定要是实际应用系统      学员经过这个项目的练习,就要走上实际的工作岗位了,如果这个系统还达不到 实际应用系统的标准,学员练习过后也还是达不到企业实际的需要,那么这个培训应 该说质量就不高了。理想的状况是这个项目就是实际项目,到时候学员就业到另外一 个公司,不过是换个地方干活而已,完全没有技能上的问题。      三:Java 怎么选择项目      这个不是靠想象,而是根据实际的情况一步一步分析出来的(呵呵要卖弄一下: 这也算是逻辑思维),当然这里只是讨论方法,不涉及具体的项目案例。      我们可以采用倒推的方式来分析:      (1)最终的项目一定是真实的项目,也就是要把学员训练到能够独立开发实际应 用,通常我们还不能选最简单的项目,因为学员的吸收还要有一个折扣,所以最终的 项目应该选实际项目中中等难度的项目      (2)最终项目定下来过后,开始分解这个项目,看看为了达到完成这个项目需要 哪些技术和知识点,以及每部分知识点的深度,然后定出每个分阶段的任务      (3)然后开始选择分阶段的项目,分阶段的项目应该比刚才分析出来的分阶段任 务稍稍复杂点,这样才能达到训练的目标。定下分阶段项目后,同样去分解,定出为 了完成他所需要的各部分知识点和深度。      (4)然后是选择上课期间的演示项目,演示的项目是为了做分阶段项目服务的, 可以认为是分阶段项目的分阶段项目      (5)最终把要求掌握的知识点和要求掌握的深度,分散到日常教学和练习中。    java毕业实习报告资料全文共8页,当前为第2页。  好了,把上面的分析用正向描述就是:日常教学和练习中学习和掌握的知识 java毕业实习报告资料全文共8页,当前为第2页。      ==〉演示项目      ==〉分阶段项目      ==〉综合项目      ==〉胜任企业实际开发需要。      附注:有了好的项目还要有好的训练方法(这个另外立文讨论),最最基本和重要 的一条就是:绝对要指导学生亲自动手做,而不是看和听,所以尽量不要选择有现成 代码的项目,演示用的项目也最好不配发代码,让学生能够跟着做出来才是真的掌握 了。      上面阐述了 Java 对项目的态
java毕业实习报告-1全文共15页,当前为第1页。java毕业实习报告-1全文共15页,当前为第1页。java毕业实习报告 java毕业实习报告-1全文共15页,当前为第1页。 java毕业实习报告-1全文共15页,当前为第1页。   以下是小编整理的关于java毕业实习报告,欢迎阅读参考。   作为就业培训,项目的好坏对培训质量的影响非常大,常常是决定性的作用。这篇文章是关于在学习JAVA软件开发时练习项目的总结,简单总结为以下几点:   1、项目一定要全新的项目,不能是以前做过的   2、项目一定要企业真实项目,不能是精简以后的,不能脱离实际应用系统   3、在开发时要和企业的开发保持一致   4、在做项目的时候不应该有参考代码   长话短说就是以上几点,如果你想要更多的了解,可以继续往后看。   一:项目的地位   因为参加就业培训的学员很多都是有一定的计算机基础,大部分都具备一定的编程基础,尤其是在校或者是刚毕业的学生,多少都有一些基础。   他们欠缺的主要是两点:   不能全面系统的、深入的掌握某种技术,也就是会的挺多,但都是皮毛,不能满足就业的需要。   没有任何实际的开发经验,完全是想象中学习,考试还java毕业实习报告-1全文共15页,当前为第2页。java毕业实习报告-1全文共15页,当前为第2页。行,一到实际开发和应用就歇菜了。   解决的方法就是通过项目练习,对所学知识进行深化,然后通过项目来获取实际开发的经验,从而弥补这些不足,尽快达到企业的实际要求。   二:如何选择项目   项目既然那么重要,肯定不能随随便便找项目,那么究竟如何来选择呢?根据Java的研究和实践经验总结,选择项目的时候要注意以下方面:   1:项目不能太大,也不能太小   这个要根据项目练习的阶段,练习的时间,练习的目标来判断。不能太大,太大了做不完,也不能太小,太小了没有意义,达不到练习的目的。   2:项目不能脱离实际应用系统   项目应该是实际的系统,或者是实际系统的简化和抽象,不能够是没有实战意义的教学性或者是纯练习性的项目。因为培训的时间有限,必须让学员尽快地融入到实际项目的开发当中去。任何人接受和掌握一个东西都需要时间去适应,需要重复几次才能够真正掌握,所以每个项目都必须跟实际应用挂钩。   3:项目应能覆盖所学的主要知识点   学以致用,学完的知识点需要到应用中使用,才能够真正理解和掌握,再说了,软件开发是一个动手能力要求很高java毕业实习报告-1全文共15页,当前为第3页。java毕业实习报告-1全文共15页,当前为第3页。的行业,什么算会了,那就是能够做出来,写出代码来,把问题解决了,你就算会了。   4:最后综合项目一定要是实际应用系统   学员经过这个项目的练习,就要走上实际的工作岗位了,如果这个系统还达不到实际应用系统的标准,学员练习过后也还是达不到企业实际的需要,那么这个培训应该说质量就不高了。理想的状况是这个项目就是实际项目,到时候学员就业到另外一个公司,不过是换个地方干活而已,完全没有技能上的问题。   三:Java怎么选择项目   这个不是靠想象,而是根据实际的情况一步一步分析出来的,当然这里只是讨论方法,不涉及具体的项目案例。   我们可以采用倒推的方式来分析:   最终的项目一定是真实的项目,也就是要把学员训练到能够独立开发实际应用,通常我们还不能选最简单的项目,因为学员的吸收还要有一个折扣,所以最终的项目应该选实际项目中中等难度的项目   最终项目定下来过后,开始分解这个项目,看看为了达到完成这个项目需要哪些技术和知识点,以及每部分知识点的深度,然后定出每个分阶段的任务   然后开始选择分阶段的项目,分阶段的项目应该比刚才分析出来的分阶段任务稍稍复杂点,这样才能达到训练的目java毕业实习报告-1全文共15页,当前为第4页。java毕业实习报告-1全文共15页,当前为第4页。标。定下分阶段项目后,同样去分解,定出为了完成他所需要的各部分知识点和深度。   然后是选择上课期间的演示项目,演示的项目是为了做分阶段项目服务的,可以认为是分阶段项目的分阶段项目   最终把要求掌握的知识点和要求掌握的深度,分散到日常教学和练习中。   好了,把上面的分析用正向描述就是:日常教学和练习中学习和掌握的知识   ==〉演示项目   ==〉分阶段项目   ==〉综合项目   ==〉胜任企业实际开发需要。   附注:有了好的项目还要有好的训练方法,最最基本和重要的一条就是:绝对要指导学生亲自动手做,而不是看和听,所以尽量不要选择有现成代码的项目,演示用的项目也最好不配发代码,让学生能够跟着做出来才是真的掌握了。   上面阐述了Java对项目的态度和基本选择方法,这里再把其中几个重要的、与众不同的特点阐述如下:
聚生网管是一款功能极为强大的局域网控制软件,是所有网管必备的管理利器!只要在局域网中的任何一台计算机安装聚生网管,就可以控制整个局域网,而所有受控机器不需要安装任何软件或进行任何设置~安装超级的方便!!   它可以直接在网络应用层对P2P(BT、电驴、pp点点通、卡盟……)数据报文进行封堵,从而可以让管理只要轻轻点击一下鼠标,就可以完全封堵所有的BT的下载。并且它实时控制局域网任意主机上、下行流速(带宽);同时又可以控制任意主机上、下行流量和总流量。还能限制别人使用聊天工具(如QQ、MSN)和限制别人访问网站(全部或指定的部分),限制迅雷下载等……   它甚至还可以检测到局域网终结者、网络执法官、网络剪刀手等当前对局域网危害最为严重的三大工具攻击的监控软件。使你不受他们的骚扰~~   反正聚生的功能是绝对的强大了!但是好软件就像锋利的刀一样,被不同的人用来干不同的事,它可以成为网管的好助手,也能成为某些人欺负弱者的道具。我在这里声明,你怎么使用它与我无关,不过我还是建议你最好不要随随便便的去限制别人,免得遭人鄙视或惹来真人PK呢~因为不当的使用这个工具而吵架打架的不是少数哟~ 当然,世上除了有矛也会有盾的,如果你受聚生网管等一类软件的骚扰,可以参考这篇文章! 来看看聚生网管的功能优势 一、下载控制 1、P2P下载完全控制功能:完全控制如BT、eMule(电驴)、百度下吧、PP点点通、卡盟、迅雷等P2P工具的下载。 2、P2P下载智能带宽抑制功能:当发现有主机进行P2P下载时,自动降低该主机可用带宽。 3、HTTP下载控制功能:用户可以自行设定控制任意文件下载,也可以指定文件后缀名限制下载。 4、FTP下载功能:用户可以自行设定控制任意文件下载,也可以指定文件后缀名。 二、带宽(流速)、流量管理 1、实时查看局域网主机带宽占用:从大到小排序功能使得网管可以对网络占用了然于胸。 2、针对特定主机分配公网带宽:可以使企业有限的公网带宽得到最充分的利用,从而使得某些主机无法再大量消耗带宽。 3、主机报文数据分析功能:使得网管可以知道主机所占带宽是用于什么应用。 4、系统可以为局域网主机设定上行、下行流量和总流量,超过设定流量,自动断开其公网连接。 三、聊天管理 1、QQ聊天控制:系统可以完全控制这个一般监控软件无法控制的聊天工具。 2、MSN聊天控制。 3、网易泡泡聊天控制。 4、新浪UC聊天控制。 5、其他任意聊天工具。 四、 WWW访问管理 1、WWW访问完全控制:网管可以选择是全部禁止上网还是使用过滤规则上网。 2、黑白名单规则:网管可以设定网址过滤规则,支持黑白名单自定义。 3、色情网址过滤:系统可以自动过滤符合色情网址库的访问。 4、局域网主机充当代理服务器控制:系统可以自动限制局域网主机充当代理服务器,以禁止不当局域网扩展。 5、局域网使用WWW代理控制:禁止局域网主机使用Socks等代理访问WWW。 五、门户邮箱控制 1、控制局域网主机只能访问yahoo邮箱,但不能点击其他任意的yahoo链接。 2、控制局域网主机只能访问sina各种邮箱,但不能点击其他任意的sina连接。 3、控制局域网主机只能访问网易163的各种邮箱,但不能点击其他任意的网易连接。 4、控制局域网主机只能访问sohu各种邮箱,但不能点击其他任意的sohu连接。 5、控制任意网站的邮箱,但不能点击网站的任意其他连接。 六、组策略(上网权限)管理功能 1、可以为局域网所有主机建立统一的控制策略。 2、可以按照局域网主机的不同IP来分配不同的策略。 3、各个控制策略组里面的主机可以在各个不同的策略之间灵活转换。 七、时间管理 管理员可以设定对主机的控制时间(如工作时间与非工作时间、自定义时间),便于灵活管理。 八、跨网段管理 在实际网络应用中,经常会遇到这样的情况:某局域网中同时存在着两个或两个以上的网段(即VLAN),各个网段间物理上联通,但相互之间不能访问,网络管理员要针对每一个网段单独进行的管理工作,重复工作量大,而且还增加了开销。针对这种的情况,聚生网管特别提供了的“透明跨网段管理”这项功能,来帮助网络管理员进行跨网段的管理工作。 目前跨网段主要通过以下手段来实现: A、通过添置路由器实现跨网段管理。 B、通过扩大子网来增加可管理的IP数量,只需把所有机器的子网掩码设为255.255.0.0即可 举例:局域网有500台电脑,所有机器的子网掩码设为255.255.0.0,IP地址就可以 设为192.168.0.1-192.168.0.250和192.168.1.1-192.168.1.250 本系统对以上跨网段设置均有良好的支持作用。 九、自定义ACL规则 系统为网管人员提供自定义控制接口-ACL规则设置,通过ACL规则,你可以设置包括IP源地址、IP目标地址、协议号(TCP/UDP)、端口范围等参数的规则,系统将自动拦截符合规则的数据报文,通过使用ACL规则,你可以轻松的实现控制功能的灵活扩展。如控制局域网任意主机IP对任意公网IP的访问;控制任意的聊天工具、控制任意的网络游戏…… 十、局域网安全管理 1、IP-MAC绑定:系统支持对局域网主机进行IP-MAC绑定,一旦发现非法主机,即可以将其隔离网络。 2、嗅探主机扫描:通过使用系统附带的“反侦听技术”以及windows的底层分析技术,可以检测出当前对局域网危害最为严重的三大攻击工具:如局域网终结者、网络执法官、网络剪刀手等。 3、断开主机公网连接:系统可以断开指定主机的公网连接。 十一、网络流量统计 系统提供了多种详细、图文并茂的主机流量、流速统计功能。其中包括: 1、日流量统计功能:系统提供了指定主机或所有主机的日流量汇总统计功能。 2、月流量统计功能:系统提供了指定主机或所有主机的月流量汇总统计功能。 3、日流速统计功能:系统提供了指定主机、指定时间内的流速趋势图。 十二、详细日志记录 1、系统详细记录了所有控制信息,用户可以通过查看日志文件来确定被管理主机网络访问情况。 2、系统详细记录了局域网主机的WWW访问网址,用户可以自行查询。 十三、其他功能 除上述功能外,系统提供了许多非常实用的功能,如给局域网任意主机发送消息;实时查看局域网主机的流速大小,并提供柱状图直观显示;记录局域网其他运行聚生网管的主机,并且正式版可以强制测试版退出等等

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值