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 输出࿱…...
数字化时代,企业的数据指标体系
在社会节奏越来越快,处理的信息量越来越大的今天,传统的经营管理模式已经适应不了当下的环境。而由经验、情感组成的业务调整以及决策能力不再能正确指导企业走在正确的方向上,所以数据就成为了企业新的业务优化调整和支撑企业高层管理进行决…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
TJCTF 2025
还以为是天津的。这个比较容易,虽然绕了点弯,可还是把CP AK了,不过我会的别人也会,还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...
