k8s+springboot+CronJob 定时任务部署
kubernetes+springboot+CronJob 定时任务配置如下代码:

- cronjob.yaml k8s 文件
apiVersion: batch/v1 kind: CronJob metadata:name: k8s-springboot-demonamespace: rz-dt spec:failedJobsHistoryLimit: 3 #执行失败job任务保留数量successfulJobsHistoryLimit: 5 #执行成功job任务保留数量startingDeadlineSeconds: 180concurrencyPolicy: Forbidschedule: "*/1 * * * *" #每分钟执行一次jobTemplate:spec:template:spec:containers:- name: k8s-springboot-demoimage: rz-dt-image-server-registry-vpc.cn-shanghai.cr.aliyuncs.com/rz-dt/k8s-springboot-demo:$IMG_TAGimagePullPolicy: Always#command: ["java","-jar","/usr/local/cenobitor/k8s-springboot-demo.jar"]#dockerfile已有此处不需要配置args: ["sendEmail","sendEmail2"] # 配置任务类的名称volumeMounts:- name: time-configmountPath: /etc/localtimereadOnly: true#envFrom:# - configMapRef:# name: smcp-config# - secretRef:# name: smcp-service-secretresources:requests:cpu: "250m"memory: 216Milimits:cpu: "500m"memory: 512MirestartPolicy: Never#从私有仓库拉取镜像凭证imagePullSecrets:- name: rz-dt-miyue-vpcvolumes:- name: time-confighostPath:path: /usr/share/zoneinfo/Asia/Shanghai - Dockerfile 文件
#基础镜像,如果本地仓库没有,会从远程仓库拉取 openjdk:8 FROM openjdk:8 #暴露端口 EXPOSE 8089 #容器中创建目录 RUN mkdir -p /usr/local/cenobitor #编译后的jar包copy到容器中创建到目录内 COPY target/k8s-springboot-demo.jar /usr/local/cenobitor/k8s-springboot-demo.jar #指定容器启动时要执行的命令 ENTRYPOINT ["java","-jar","/usr/local/cenobitor/k8s-springboot-demo.jar"] -
test.sh 文件
echo "开始制作镜像..." image_tag=`date +%Y-%m-%d-%H-%M-%S` #_%H%M echo "当前时间:$image_tag" docker build -t k8s-springboot-demo:${image_tag} . echo "制作镜像成功!"echo "登录" sudo docker login --username=aliyun0398513152 rz-dt-image-server-registry-vpc.cn-shanghai.cr.aliyuncs.com --password=1234echo "镜像最新版本提交" docker tag k8s-springboot-demo:${image_tag} rz-dt-image-server-registry-vpc.cn-shanghai.cr.aliyuncs.com/rz-dt/k8s-springboot-demo:${image_tag} docker push rz-dt-image-server-registry-vpc.cn-shanghai.cr.aliyuncs.com/rz-dt/k8s-springboot-demo:${image_tag}echo "k8s一键部署" export IMG_TAG=${image_tag} envsubst < cronjob.yaml | kubectl --kubeconfig ~/.kube-rz/config apply -f -4个代码实现类:
-
package com.example.demo.job;public interface Command {/*** 遵循Unix约定,如果命令执行正常,则返回0;否则为非0。*/int execute(String... args); }package com.example.demo.job;import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component;@Component @Slf4j public class SendEmailCommand implements Command {@Overridepublic int execute(String... args) {try {// 省略业务逻辑代码for (String arg:args) {log.info("send email success args:" +arg);}log.info("send email success");return 0;} catch (Exception e) {log.error("send email error", e);return -1;}} }package com.example.demo.job;import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component;@Component @Slf4j public class SendEmail2Command implements Command {@Overridepublic int execute(String... args) {try {// 省略业务逻辑代码for (String arg:args) {log.info("send email 2 success args:" +arg);}log.info("send email 2 success");return 0;} catch (Exception e) {log.error("send email error", e);return -1;}} }package com.example.demo.job;import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component;import javax.annotation.PostConstruct; import java.util.Arrays; import java.util.HashMap; import java.util.Map;@Component @Slf4j public class ProjectCommandLineRunner implements CommandLineRunner {Map<String, Command> commandMap = new HashMap<>();@Autowiredprivate SendEmailCommand sendEmailCommand;@Autowiredprivate SendEmail2Command sendEmail2Command;@PostConstructprivate void init() {commandMap.put("sendEmail", sendEmailCommand);commandMap.put("sendEmail2", sendEmail2Command);}@Overridepublic void run(String... args) throws Exception {if (args.length == 0) {return;}if (!commandMap.containsKey(args[0])) {log.error("'{}' command not found", args[0]);System.exit(-1);}for (String arg:args) {log.info("command args:" +arg);}for (int i = 0; i < args.length; i++) {Command command = commandMap.get(args[i]);String[] arguments = Arrays.copyOfRange(args, 0, args.length);command.execute(arguments);}//执行成功则,正常退出0, 异常退出非0System.exit(0);} }
kubectl 客户端执行,sh test.sh :




相关文章:
k8s+springboot+CronJob 定时任务部署
kubernetesspringbootCronJob 定时任务配置如下代码: cronjob.yaml k8s 文件 apiVersion: batch/v1 kind: CronJob metadata:name: k8s-springboot-demonamespace: rz-dt spec:failedJobsHistoryLimit: 3 #执行失败job任务保留数量successfulJobsHistoryLimit: 5 …...
Spring5 中更优雅的第三方 Bean 注入
小伙伴们知道,当我们使用 Spring 容器的时候,如果遇到一些特殊的 Bean,一般来说可以通过如下三种方式进行配置: 静态工厂方法实例工厂方法FactoryBean 不过从 Spring5 开始,在 AbstractBeandefinition 类中多了一个属…...
Yolov5-Face 原理解析及算法解析
YOLOv5-Face 文章目录 YOLOv5-Face1. 为什么人脸检测 一般检测?1.1 YOLOv5Face人脸检测1.2 YOLOv5Face Landmark 2.YOLOv5Face的设计目标和主要贡献2.1 设计目标2.2 主要贡献 3. YOLOv5Face架构3.1 模型架构3.1.1 模型示意图3.1.2 CBS模块3.1.3 Head输出3.1.4 stem…...
通俗易懂讲解CPU、GPU、FPGA的特点
1. CPU vs GPU 大家可以简单的将CPU理解为学识渊博的教授,什么都精通;而GPU则是一堆小学生,只会简单的算数运算。可即使教授再神通广大,也不能一秒钟内计算出500次加减法。因此,对简单重复的计算来说,单单一…...
PIC18 DataRAM 笔记
1.疑似最糟糕的英文技术文档段落 Since up to 16 registers may share the same low-order address, the user must always be careful to ensure that the proper bank is selected before performing a data read or write. For example, writing what should be program dat…...
【FFMPEG】AVFilter使用流程
流程图 核心类 AVFilterGraph ⽤于统合这整个滤波过程的结构体 AVFilter 滤波器,滤波器的实现是通过AVFilter以及位于其下的结构体/函数来维护的 AVFilterContext ⼀个滤波器实例,即使是同⼀个滤波器,但是在进⾏实际的滤波时,也…...
爬虫入门06——了解cookie和session
爬虫入门06——了解cookie和session (1)什么是cookie,有什么作用 http请求是无状态的请求协议,不会记住用户的状态和信息,也不清楚你在这之前访问过什么而当网站需要记录用户是否登录时,就需要在用户登录…...
Ubuntu 的移动梦醒了
老实讲,移动版 Ubuntu 在手机、平板上的发展自始至终可能都没有达到过 Canonical 的期望,既然如此,不再勉为其难地坚持下去,或许才是更加明智的做法。 时至今日,官方显然也意识到了这一点,在早些时候发布的…...
RabbitMQ的集群
新建一个虚拟机,重新安装一个RabbitMQ,不会安装的可以看下面的连接: 在Linux中安装RabbitMQ_流殇꧂的博客-CSDN博客 1.修改/etc/hosts映射文件,两台虚拟机都需要修改 vim /etc/hosts 127.0.0.1 node1 localhost.localdomain localhost4 localhost4.localdomain4 ::1 node1 loca…...
超长上下文处理:基于Transformer上下文处理常见方法梳理
原文链接:芝士AI吃鱼 目前已经采用多种方法来增加Transformer的上下文长度,主要侧重于缓解注意力计算的二次复杂度。 例如,Transformer-XL通过缓存先前的上下文,并允许随着层数的增加线性扩展上下文。Longformer采用了一种注意力…...
ChatGPT爆火 但生成式AI并非全新产物
以ChatGPT、Midjourney 为代表的 AIGC 产品横空出世,在全球掀起新一轮的 AI 技术变革新浪潮。近二十年来,我们见证了从「机器学习」算法到「深度学习」,再到「基础模型」的发展。随着数据量大规模膨胀,可扩展的算力,再…...
深度学习循环神经网络
循环神经网络(Recurrent Neural Network,RNN)是一种广泛应用于序列数据、自然语言处理等领域的神经网络。与传统的前馈神经网络不同,循环神经网络的输入不仅取决于当前输入,还取决于之前的状态。这使得循环神经网络可以…...
如何规范的设计数据库表
前言对于后端开发同学来说,访问数据库,是代码中必不可少的一个环节。系统中收集到用户的核心数据,为了安全性,我们一般会存储到数据库,比如:mysql,oracle等。后端开发的日常工作,需要…...
【CSS】跳动文字
文章目录 效果展示代码实现 效果展示 代码实现 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>一颗不甘坠落的流星</title></head><style type"text/css">/* 遮罩盒子样式 */#mask {/* 设…...
arm海思启动udev的错误
近日在配置HI3531D的文件时发现错误 random: udevd: uninitialized urandom read (16 bytes read) random: udevd: uninitialized urandom read (16 bytes read)udev 是一个为你的计算机提供设备事件的 Linux 子系统。通俗来讲就是,当你的计算机上插入了像网卡、外…...
网络协议与攻击模拟-15-DNS协议
DNS 协议 1、了解域名结构 2、 DNS 查询过程 3、在 Windows server 上部署 DNS 4、分析流量 实施 DNS 欺骗 再分析 一、 DNS 1、概念 ● DNS ( domain name system )域名系统,作为将域名的 IP 地址的相互映射关系存放在一个分布式的数据库࿰…...
ChatGPT将改变教育,而不是摧毁它
01 学校和大学的反应迅速而果断 就在 OpenAI 于 2022 年 11月下旬发布ChatGPT 的几天后,该聊天机器人被广泛谴责为一种免费的论文写作、应试工具,它很容易在作业中作弊。 美国第二大学区洛杉矶联合大学立即阻止了OpenAI网站从其学校网络访问。其他人很…...
springboot在线考试
在线考试系统的开发运用java技术,MIS的总体思想,以及MYSQL等技术的支持下共同完成了该系统的开发,实现了在线考试管理的信息化,使用户体验到更优秀的在线考试管理,管理员管理操作将更加方便,实现目标....
C国演义 [第三章]
第三章 组合分析步骤递归函数的返回值和参数递归结束的条件单层逻辑 组合总和 III 组合 力扣链接 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入:n 4, k 2 输出࿱…...
数字化时代,企业的数据指标体系
在社会节奏越来越快,处理的信息量越来越大的今天,传统的经营管理模式已经适应不了当下的环境。而由经验、情感组成的业务调整以及决策能力不再能正确指导企业走在正确的方向上,所以数据就成为了企业新的业务优化调整和支撑企业高层管理进行决…...
ESXI系统安装全攻略:从U盘启动到网络配置
1. ESXI系统安装前的准备工作 第一次接触ESXI系统的朋友可能会觉得有点懵,其实它就是一个专门用于虚拟化的操作系统。简单来说,它能让一台物理服务器变成多台虚拟服务器,特别适合用来搭建测试环境或者部署云服务。我自己在数据中心工作时&…...
7大监控场景+4步部署:Intel PCM性能监控全攻略
7大监控场景4步部署:Intel PCM性能监控全攻略 【免费下载链接】pcm Intel Performance Counter Monitor (Intel PCM) 项目地址: https://gitcode.com/gh_mirrors/pc/pcm Intel Performance Counter Monitor (Intel PCM) 是一款由Intel官方开发的系统性能分析…...
Langchain与Qwen结合:如何用Python构建一个智能问答机器人(含联网搜索功能)
Langchain与Qwen结合:如何用Python构建一个智能问答机器人(含联网搜索功能) 在人工智能技术快速发展的今天,构建一个能够理解自然语言并提供准确回答的智能系统已不再是遥不可及的梦想。通过结合Langchain框架和Qwen大语言模型&a…...
Phi-3-mini-128k-instruct开源镜像:个人学习研究专用+严禁非法用途声明
Phi-3-mini-128k-instruct开源镜像:个人学习研究专用严禁非法用途声明 1. 模型简介 Phi-3-Mini-128K-Instruct是一个38亿参数的轻量级开放模型,属于Phi-3系列的最新成员。这个模型经过精心训练,特别适合需要高质量文本生成和推理能力的应用…...
Phi-3-Mini-128K高并发服务架构设计:负载均衡与自动扩缩容策略
Phi-3-Mini-128K高并发服务架构设计:负载均衡与自动扩缩容策略 你是不是也遇到过这种情况?自己部署的AI模型服务,平时用着挺好,一旦用户量稍微上来点,或者有人发了个长请求,服务就卡死甚至直接挂掉。然后就…...
AtlasOS终极解决:2502/2503错误代码效率提升方案
AtlasOS终极解决:2502/2503错误代码效率提升方案 【免费下载链接】Atlas 🚀 An open and lightweight modification to Windows, designed to optimize performance, privacy and security. 项目地址: https://gitcode.com/GitHub_Trending/atlas1/Atl…...
零成本体验软路由:京东云AX1800 Pro刷iStoreOS OpenWrt的完整教程(含空间扩容技巧)
京东云AX1800 Pro软路由改造全指南:从刷机到空间优化的实战手册 在智能家居和高速网络需求激增的今天,一台性能出色的路由器已成为家庭数字生活的核心枢纽。京东云AX1800 Pro作为一款性价比极高的Wi-Fi 6路由器,其硬件配置远超同价位产品——…...
从PLC到Kubernetes:工业Python网关高可用配置的6层安全加固体系(含CVE-2024-XXXX漏洞规避方案)
第一章:工业Python网关的演进逻辑与高可用本质工业现场设备协议繁杂、环境严苛、响应实时性要求高,传统嵌入式网关受限于固件封闭、扩展能力弱和生态割裂,难以支撑现代智能制造对数据柔性接入与边缘智能协同的需求。Python凭借其丰富的工业协…...
【Linux第十四章】文件系统
前言 🚀在日常开发里,我们几乎每天都在和文件打交道:打开源码、读取日志、写入配置、删除临时文件。但从操作系统的视角看,磁盘上天然存在的并不是“文件”这种概念,底层真正能被访问的,是一块一块的存储单…...
【方案、开源】从零到国一:空地协同消防无人机系统全栈技术解析
1. 空地协同消防无人机系统设计思路 第一次接触这个项目时,我和很多同学一样感到无从下手。直到把整个系统拆解成几个核心模块,思路才逐渐清晰。这个系统的关键在于"空地协同"四个字,简单说就是让无人机和小车像两个配合默契的消防…...
