我用java写了个定时工具沾沾自喜,结果发现小丑竟是我自己!

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 我用java写了个定时工具沾沾自喜,结果发现小丑竟是我自己!

1.事件起因

服务器上的redis总是出问题,就是本来好好的,突然就挂了,报一大堆错误,可是每次重启就好了,很奇怪吧。

所以我想着做一个简单的小工具去定时重启。

21.png

2.taskkill命令

这个小工具的原理就是用java去执行系统命令,比如taskkill(windows系统里面的)。

比如,我现在启动了redis.exe

22.png

任务管理器里面是这样的。

23.png

我要关闭这个进程,就用taskkill命令。


taskkill /f /im redis-server.exe

24.png

可以看到,这个进程已经被干掉了。

3.如何重新启动应用

很简单,直接输入启动程序的全路径就可以了,比如我的是:


C:\Users\Administrator\Downloads\redis-64.3.0.503\redis-server.exe

25.png

启动成功!

4.导入Hutool

使用Hutool的目的是,方便我们进行定时任务的设计。

用idea创建项目

26.png


在项目里面创建一个lib目录,把hutool工具包放进去,然后add As library。

我们需要用到Hutool提供的定时器工具类,需要一个配置文件,在src下面创建config目录,然后创建一个cron.setting

27.png

[com.task]
Main.test=0/1 * * * * ?

com.task是包名,Main是类名,test是方法名。


0/1 * * * * ? 是cron表达式,表示每隔1秒钟就执行一次, cron表达式 就是一种设置定时任务的专用表达式,如果不会写,可以在线生成。


https://cron.qqe2.com/


Main.java 代码如下:


package com.task;
import cn.hutool.cron.CronUtil;
public class Main {
    public void test(){
        System.out.println("just test ...");
    }
    public static void main(String[] args) {
        CronUtil.setMatchSecond(true);
        CronUtil.start();
    }
}

运行效果

28.png

5. RuntimeUtil

RuntimeUtil是hutool给我吗提供的命令行工具,它会根据系统来执行我们所设置命令。


步骤 1 命令行工具-RuntimeUtil


Hutool封装了JDK的Process类,用于执行命令行命令(在Windows下是cmd,在Linux下是shell命令)。

exec 执行命令行命令,返回Process对象,Process可以读取执行命令后的返回内容的流
execForStr 执行系统命令,返回字符串
execForLines 执行系统命令,返回行列表

步骤 2 restartRedis

之前我们只是写了一个test方法来测试,现在要编写正式的方法了,目的是定时重启redis服务器。

   /**
     * 重启Redis服务
     */
    public void restartRedis(){
        String str = RuntimeUtil.execForStr("taskkill /f /im redis-server.exe");
        System.out.println(str);
        //休息2秒钟,再重启Redis
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        RuntimeUtil.execForStr("C:\\Users\\Administrator\\Downloads\\redis-64.3.0.503\\redis-server.exe");
        System.out.println("Redis已经成功重启");
    }

步骤 3 Cron表达式

修改cron.setting,设置为每天早上6点重启Redis。

[com.task]
Main.restartRedis=0 0 6 * * *

6. 后话…

后来经过排查,原来是下载的redis有问题,重新换一个redis安装就没事了。。。

29.png

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
数据采集 编解码 Java
解锁Hutool魔法箱:Java开发者不可错过的神奇工具集
解锁Hutool魔法箱:Java开发者不可错过的神奇工具集
58 0
|
2月前
|
缓存 监控 Java
线程池的魔法:Java 开发者必备的并发工具
线程池的魔法:Java 开发者必备的并发工具
45 0
|
3月前
|
存储 Java 数据安全/隐私保护
探索Java中神奇的ThreadLocal:为什么它是多线程编程的重要工具?
探索Java中神奇的ThreadLocal:为什么它是多线程编程的重要工具?
|
29天前
|
缓存 NoSQL Java
java中实现定时给微信群中发送每日简报
java中实现定时给微信群中发送每日简报
27 0
|
29天前
|
Java
java中日期处理的一些工具方法
java中日期处理的一些工具方法
17 1
|
28天前
|
安全 Java 数据安全/隐私保护
提升 Java 编程安全性 - 代码加密混淆工具的重要性和应用
提升 Java 编程安全性 - 代码加密混淆工具的重要性和应用
|
28天前
|
安全 Java 数据安全/隐私保护
探讨 Java 代码混淆加固工具
探讨 Java 代码混淆加固工具
|
29天前
|
Java
java中实现定时给微信群中发送每日天气情况
java中实现定时给微信群中发送每日天气情况
19 0
|
30天前
|
存储 安全 Java
基于Java的qq截图工具(毕业设计含源码)
基于Java的qq截图工具(毕业设计含源码)
28 0