Java项目启动检测 Redis 是否启动,未启动则启动(macOS 版本)

文章目录

      • 一、概述
      • 二、代码

一、概述

启动项目时,检测macos 上 Redis 是否启动,未启动,则启动。

二、代码

/*** 用途: 项目启动时检查 redis,未启动则启动(开发环境)** @author: ADAM* @create: 2024/04/28 14:45* @version: 1.0*/
@Slf4j
@Component
@Profile("dev")
public class RedisServiceChecker implements CommandLineRunner {@Overridepublic void run(String... args) throws Exception {boolean flag = isRedisRunning();log.info("Redis启动状态:" + flag);if (!flag) {startRedis();}}/*** 功能:检测 redis 是否启动* @param* @return: boolean* @author: ADAM* @date: 2024/4/28 15:15*/private boolean isRedisRunning() {boolean hasRedis = false;try {// 整个命令作为一个List传给Runtime.getRuntime().exec(),避免字符串中嵌套引号和转义字符的问题String[] cmd = {"/bin/bash", "-c", "ps aux | grep redis-server"};Process process = Runtime.getRuntime().exec(cmd);// 读取命令的输出和错误输出BufferedReader stdoutReader = new BufferedReader(new InputStreamReader(process.getInputStream()));BufferedReader stderrReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));String line;// 同时读取输出和错误流while ((line = stdoutReader.readLine()) != null || (line = stderrReader.readLine()) != null) {if (line != null) {log.info("line: " + line); // 打印出来帮助调试,看是否有预期的输出if (line.trim().contains("redis-server") && !line.trim().contains("grep redis-server")) {hasRedis = true;break; // 找到有效Redis进程行,可以提前结束循环}}}// 确保流关闭stdoutReader.close();stderrReader.close();// 检查是否找到Redis进程if (hasRedis) {log.info("Redis服务正在运行");} else {log.info("未找到Redis服务运行");}} catch (IOException e) {e.printStackTrace();}// 如果没有找到Redis进程,则认为Redis没有运行return hasRedis;}private void startRedis() throws IOException, InterruptedException {log.info("尝试启动Redis服务...");String redisBinaryPath = "redis-server";String[] command = {redisBinaryPath, "--daemonize", "yes"};ProcessBuilder pb = new ProcessBuilder(command);pb.redirectErrorStream(true); // 将错误输出重定向到标准输出,以便统一处理// 设置环境,以便sudo不提示输入密码(需要提前配置sudoers文件)Map<String, String> env = pb.environment();env.put("PASSWORD", "");// 启动进程Process process = pb.start();// 读取输出和错误流,用于日志或进一步处理BufferedReader stdoutReader = new BufferedReader(new InputStreamReader(process.getInputStream()));BufferedReader stderrReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));String line;while ((line = stdoutReader.readLine()) != null) {log.info("STDOUT: " + line);}while ((line = stderrReader.readLine()) != null) {log.error("STDERR: " + line);}// process.waitFor()的作用是阻塞当前线程,直到子进程(即启动的Redis服务)结束。int exitCode = process.waitFor();if (exitCode == 0) {log.info("Redis服务启动成功!");} else {log.error("Redis服务启动失败,退出码: " + exitCode);}// 确保流关闭stdoutReader.close();stderrReader.close();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/4714.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4.Docker本地镜像发布至阿里云仓库、私有仓库、DockerHub

文章目录 0、镜像的生成方法1、本地镜像发布到阿里云仓库2、本地镜像发布到私有仓库3、本地镜像发布到Docker Hub仓库 Docker仓库是集中存放镜像的地方&#xff0c;分为公共仓库和私有仓库。 注册服务器是存放仓库的具体服务器&#xff0c;一个注册服务器上可以有多个仓库&…

项目开发规范

Restful REST&#xff0c;表述性状态转换&#xff0c;他是一种软件架构风格 使用URL定位资源&#xff0c;HTTP动词描述操作 根据发出请求类型来区分操作 GET&#xff1a; 查询id为1的用户POST&#xff1a;新增用户PUT&#xff1a;修改用户DELETE&#xff1a;删除id为1的用户 …

springboot权限验证学习-上

创建maven项目 创建父工程 这类项目和原来项目的区别在于&#xff0c;打包方式是pom 由于pom项目一般都是用来做父项目的&#xff0c;所以该项目的src文件夹可以删除掉。 创建子工程 子工程pom.xml 父工程pom.xml 添加依赖 父工程导入依赖包 <!--导入springboot 父工程…

18.Nacos配置管理-微服务读取Nacos中的配置

需要解决的问题 1.实现配置更改热更新&#xff0c;而不是改动了配置文件还要去重启服务才能生效。 2.对多个微服务的配置文件统一集中管理。而不是需要对每个微服务逐一去修改配置文件&#xff0c;特别是公共通用的配置。 配置管理服务中的配置发生改变后&#xff0c;回去立…

病理组学+配对 mIHC 验证+转录组多组学

目录 病理DeepRisk网络模型构建 DPS和新辅助化疗 mIHC 验证 STAD转录组层面 病理DeepRisk网络模型构建 自有数据训练&#xff0c;TCGA数据进行验证&#xff0c;然后配对mIF验证&#xff0c;最后还在转录组层面分析。 该模型基于中山数据集&#xff08;n 1120&#xff09…

【AIGC调研系列】Sora级别的国产视频大模型-Vidu

Vidu能够达到Sora级别的标准。Vidu被多个来源认为是国内首个Sora级别的视频大模型[2][3][4]。它采用了团队原创的Diffusion与Transformer融合的架构U-ViT&#xff0c;能够生成长达16秒、分辨率高达1080P的高清视频内容[1][6]。此外&#xff0c;Vidu的一致性、运动幅度都达到了S…

美易官方:巴菲特股东大会召开在即,新浪财经中美投资人酒会5月4日举行

在五月的阳光下&#xff0c;全球投资者的目光都聚焦在了美国中部城市奥马哈。这里是“投资界春晚”——巴菲特股东大会的举办地&#xff0c;也是全球投资者共享投资智慧的圣地。今年的巴菲特股东大会更是备受瞩目&#xff0c;不仅有“股神”巴菲特的精彩演讲&#xff0c;还有新…

【Spring】IOC/DI中常用的注解@Lazy、@Scope与@Conditional

目录 1、Lazy 懒加载bean 1.1、与component配合使用 1.2、与Bean注解配合使用 2、Scope bean的作用域 2.1、不指定Scope 2.2、指定Scope为 prototype 3、Conditional 条件注解 1、Lazy 懒加载bean Lazy用于指定单例bean实例化的时机&#xff0c;在没有指定此注解时&…

基于SpringBoot+Vue校园竞赛管理系统的设计与实现

项目介绍&#xff1a; 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;竞赛信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行…

Linux学习阶段划分及学习方法

目录 Linux学习阶段划分 Linux学习方法 整理自 一周学会Linux韩顺平 Linux学习阶段划分 这节可以让你知道你目前是什么水平 1、Linux环境下基本操作命令 例如文件管理&#xff0c;用户管理&#xff0c;vi vim编辑器 2、Linux的各种配置 例如网络的配置&#xff0c;服务的…

安卓常用组件(启停活动页面、活动之间传递信息、收发应用广播、操作后台服务)

启停活动页面 Activity的启动和结束 页面跳转可以使用startActivity接口&#xff0c;具体格式为startActivity(new Intent(this, 目标页面.class));。 关闭一个页面可以直接调用finish();方法即可退出页面。 Activity的生命周期 页面在安卓有个新的名字叫活动&#xff0c;因…

单例模式及其应用

单例模式介绍&#xff1a; 单例模式是一种常见的设计模式&#xff0c;其目的是确保某个类只有一个实例存在&#xff0c;并提供一个全局访问点。 在实现单例模式时&#xff0c;一般需要注意以下几点&#xff1a; 私有化构造函数&#xff1a;防止外部直接实例化对象。私有静态…

微软ML Copilot框架释放机器学习能力

摘要&#xff1a;大模型席卷而来&#xff0c;通过大量算法模型训练推理&#xff0c;能根据人类输入指令产生图文&#xff0c;其背后是大量深度神经网络模型在做运算&#xff0c;这一过程称之为机器学习&#xff0c;本文从微软语言大模型出发&#xff0c;详解利用大型语言模型&a…

取得Claude模型的Key

目录 1.登录Claude \ Anthropic。需要美丽国IP。 2.取得Key 3.可用模型 4.帮助文档地址 5.使用这个key 6.取得Credit 1.登录Claude \ Anthropic。需要美丽国IP。 2.取得Key 3.可用模型 4.帮助文档地址 https://docs.anthropic.com/claude/docs/intro-to-claude --------…

前后端分离,使用sa-token作为安全框架快速搭建一个微服务项目

之前写过一个单体项目&#xff0c;现在想把它升级为微服务项目。在拆分升级的过程中发现了很多问题&#xff0c;本次就来记录一下遇到的问题和解决方法。&#xff08;这篇文章只是记录一下拆分项目的基础架构&#xff0c;并使用sa-token做微服务项目的安全框架&#xff0c;快速…

upload-labs后续(14-)

图片马 在图片中加入木马&#xff0c;然后上传让浏览器解析&#xff0c;达到上传木马的目的 制作图片马&#xff1a;可以在notepad或者winhex中打开文件&#xff0c;在文件头中加入图片的文件头&#xff0c;再在文件末尾加入木马即可。 图片文件头如下&#xff1a; 1.Png图片…

学生党学习亚马逊云科技AWS、求职上岸就申AWS Cloud Club队长!

毕业了怎么找工作&#xff1f;该怎么学AWS&#xff1f;这是同学们最关心的问题。最近AWS推出的Cloud Club校园社区计划就可以完美解决这些问题&#xff01; &#x1f3eb;AWS校园社区计划是在学校构建校园社团(全球学校)&#xff0c;带着大家学最热的开发、AI/ML技术&#xff0…

IDEA主题美化【保姆级】

前言 一款好的 IDEA 主题虽然不能提高我们的开发效率&#xff0c;但一个舒适简单的主题可以使开发人员更舒适的开发&#xff0c;时常换一换主题可以带来不一样的体验&#xff0c;程序员的快乐就这么简单。话不多说&#xff0c;先上我自己认为好看的主题设置。 最终效果图: 原…

《机器学习by周志华》学习笔记-线性模型-03

1、多分类学习 1.1、背景 我们在上一节介绍了「线性判别分析(LDA)」,LDA的从二分类任务可以推广到多分类任务中。 而现实中常遇到的多分类学习任务。有些二分类的学习方法可以直接推广到多分类,但是更多情况下是基于一些策略,利用二分类学习器来解决多分类的问题。 1.…

41 对MVC,MVP,MVVM的理解

对MVC&#xff0c;MVP&#xff0c;MVVM的理解 三者都是项目的架构模式(不是类的设计模式)&#xff0c;即:一个项目的结构&#xff0c;如何分层&#xff0c;不同层负责不同的职责。 1、MVC: MVC的出现是用在后端(全栈时代) M:model&#xff0c;模型: 主要完成业务功能&#xff0…