Dockerfile部署xxljob

news2024/9/20 13:15:06

使用Dockerfile部署xxljob

1. 背景

  1. 我们在使用定时任务调度时,通常会使用xxljob
  2. 容器化部署xxljob,通常使用 docker pull xuxueli/xxl-job-admin:2.4.0 拉取镜像并启动容器。这种方式对于x86架构服务器来说,没有任何问题。但是在arm架构的服务器上,运行容器会报错架构不匹配。
The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
  1. 由于在arm架构无法启动容器,因此,我们采用Dockerfile运行jar包的方式创建容器,使用这种方式,可以规避架构导致的容器运行失败的问题。

2. 前提条件:

  1. 已安装docker及docker-compose
  2. 已存在 jdk 镜像,我使用的是openjdk 17
    在这里插入图片描述

3. 拉取xxljob源码,打包编译

  1. git 项目地址
    https://github.com/xuxueli/xxl-job
    拉取代码
  2. 导入数据
    在项目的 doc/db 目录下有一个sql文件,导入自己的数据库中
  3. idea打开项目,使用maven 拉取依赖
  4. 修改xxl-job-admin工程的 application.properties配置文件,将数据库的配置改为自己的连接信息
  5. 运行xxl-job-admin工程,查看是否正常启动
  6. 启动成功后访问 http://localhost:8080/xxl-job-admin
  7. 如果能正常访问,说明环境没有问题,此时可以将xxl-job-admin打包成jar包

4. 部署xxljob

  1. 将 xxl-job-admin.jar 上传到服务器指定目录,我放在了 /data/xxl-job 目录
  2. 在同级目录创建 logback-spring.xml 用于配置日志
vim logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
	<!--定义日志文件的存储地址 -->
	<property name="LOG_HOME" value="/data/logs/xxl-job/" />

	<!--<property name="COLOR_PATTERN" value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta( %replace(%caller{1}){'\t|Caller.{1}0|\r\n', ''})- %gray(%msg%xEx%n)" />-->
	<!-- 控制台输出 -->
	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>-->
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}:%L) - %msg%n</pattern>
		</encoder>
	</appender>

	<!-- 按照每天生成日志文件 -->
	<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<!--日志文件输出的文件名 -->
			<FileNamePattern>${LOG_HOME}/xxl-job-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
			<!--日志文件保留天数 -->
			<MaxHistory>30</MaxHistory>
			<maxFileSize>10MB</maxFileSize>
		</rollingPolicy>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
		</encoder>
	</appender>





	<!--myibatis log configure -->
	<logger name="com.apache.ibatis" level="TRACE" />
	<logger name="java.sql.Connection" level="DEBUG" />
	<logger name="java.sql.Statement" level="DEBUG" />
	<logger name="java.sql.PreparedStatement" level="DEBUG" />

	<!-- 日志输出级别 -->
	<root level="INFO">
		<appender-ref ref="STDOUT" />
		<appender-ref ref="FILE" />
	</root>

</configuration>

  1. 在同级目录创建 Dockerfile 文件
vim Dockerfile
FROM openjdk:17 # 引入jdk,对应自己的版本

ENV TZ=Asia/Shanghai

ADD xxl-job-admin.jar /data/xxl-job/xxl-job-admin.jar
EXPOSE 8080

CMD java ${JAVA_OPTS} -Dlogging.config=/data/xxl-job/logback-spring.xml -jar /data/xxl-job/xxl-job-admin.jar
  1. 创建 docker-compose-xxljob.yaml
vim docker-compose-xxljob.yaml
version: '3'
services:  
  dsp-xxl-job:
    restart: always
    build: 
      context: /data/xxl-job
      dockerfile: Dockerfile
    container_name: xxl-job
    image: xxl-job
    hostname: xxl-job
    network_mode: host
    privileged: true
    environment:
      TZ:  Asia/Shanghai
      SPRING_DATASOURCE_URL: jdbc:mysql://xxx:3306/xxl-job?Unicode=true&characterEncoding=UTF-8
      SPRING_DATASOURCE_USERNAME: root
      SPRING_DATASOURCE_PASSWORD: 123456
    ports:
      - 8080:8080
    volumes:
      - '/etc/localtime:/etc/localtime:ro'
      - '/data/xxl-job:/data/xxl-job:ro'
      - '/data/logs/xxl-job:/data/logs/xxl-job:rw'
  1. 启动容器
docker-compose -f docker-compose-xxljob.yaml up -d
  1. 启动成功后访问 http://服务器IP地址:8080/xxl-job-admin

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

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

相关文章

什么是 IP 地址信誉?5 种改进方法

IP 地址声誉是营销中广泛使用的概念。它衡量 IP 地址的质量&#xff0c;这意味着您的电子邮件进入垃圾邮件或被完全阻止发送的可能性。 由于每个人都使用专用电子邮件提供商而不是直接通过 IP 地址进行通信&#xff0c;因此&#xff0c;这些服务可以跟踪和衡量发件人的行为质量…

玩机进阶教程-----MTK芯片机型 回读 备份 导出分区来制作线刷包 其中MT****_Android_scatter.txt的修改 分区的写入与否

在与一些小品牌机型定制系统过程中。其中一些机型定制导出分区制作线刷包。默认分区的写入与否要了解清楚。有些分区导出后在写入有可能会导致机型不开机或者卡第一屏的故障。这方面最基本的就是涉及mtk分区写入地址引导MT****_Android_scatter.txt的修改 通过博文了解 1----…

一文了解高速工业相机

超高速相机是工业相机的一种&#xff0c;一般高速相机指的是数字工业相机&#xff0c;其一般安装在机器流水线上代替人眼来做测量和判断&#xff0c;通过数字图像摄取目标转换成图像信号&#xff0c;传送给专用的图像处理系统。 超高速工业相机的采集速率> 50Gb/s&#xff…

AI取代程序员? or 成为10倍效能工程师!

Manuel Odendahl 是一位知名的人工智能和机器学习专家&#xff0c;尤其在计算机视觉和自然语言处理领域有显著贡献。他的研究涉及深度学习、图像识别和人机交互等方面&#xff0c;且在相关领域发表了多篇学术论文。 在这个人工智能快速发展的时代&#xff0c;程序员的工作方式正…

SpringCloud 基于 web 的只会养老平台

摘要 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数据库设计…

23:SPI二:W25Q64存储器模块的使用

W25Q64存储器模块的使用 1、W25Q64的简介2、模块内部结构2.1&#xff1a;引脚结构2.2&#xff1a;内部存储结构2.3&#xff1a;此模块的注意事项 3、程序模拟SPI读写W25Q644、片上外设SPI读写W25Q64 1、W25Q64的简介 其中最主要的特点就是掉电不丢失。 由上图所示&#xff1a…

基于SpringBoot+Vue的宠物医院管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

Rust编程的作用域与所有权

【图书介绍】《Rust编程与项目实战》-CSDN博客 《Rust编程与项目实战》(朱文伟&#xff0c;李建英)【摘要 书评 试读】- 京东图书 (jd.com) Rust编程与项目实战_夏天又到了的博客-CSDN博客 3.8 作 用 域 Rust的所有权系统和作用域息息相关&#xff0c;因此有必要先理解R…

C++和OpenGL实现3D游戏编程【连载9】——纹理的镂空显示

1、本节实现的内容 前面的课程中,我们学会了加载纹理并显示纹理图案,但是纹理的图案都是长方形的图片,图片就会有白色或黑色背景,那么在游戏设计过程中,我们经常不需要显示图片的背景部分,那么这节课我们就来讨论一下如何实现剔除白色或黑色背景后的镂空图像,下图就是将…

算法打卡:第十一章 图论part01

今日收获&#xff1a;图论理论基础&#xff0c;深搜理论基础&#xff0c;所有可达路径&#xff0c;广搜理论基础&#xff08;理论来自代码随想录&#xff09; 1. 图论理论基础 &#xff08;1&#xff09;邻接矩阵 邻接矩阵存储图&#xff0c;x和y轴的坐标表示节点的个数 优点…

PFC理论基础与Matlab仿真模型学习笔记(1)--PFC电路概述

一、整流器滤波电路简介 整流器滤波电路的主要功能是将交流电&#xff08;AC&#xff09;转换为直流电&#xff08;DC&#xff09;&#xff0c;并通过滤波器减少波动以输出稳定的直流电。其工作原理主要分为两个部分&#xff1a; 1.整流部分 整流器的核心器件是二极管&#…

Spring Boot从0到1 -day02

目录 学习目标Spring Boot 的基本配置启动类与核心注解SpringBootApplicationSpring Boot 的全局配置文件1. application.properties2. application.ymlSpring 中Spring Boot Application注解的作用 自动配置原理1. 自动配置类2. 自动配置的发现示例3. 自定义自动配置 条件注解…

手把手教你用Ollama AnythingLLM搭建AI知识库,无需编程,跟着做就行!

在本地电脑上跑大语言模型&#xff08;LLM&#xff09;&#xff0c;已经不是什么高科技操作了。随着技术的迭代&#xff0c;现在利用Ollam和AnythingLLM就可以轻松构建自己的本地知识库&#xff0c;人人皆可上手&#xff0c;有手就行。过往要达成这一目标&#xff0c;可是需要有…

令人拍案叫绝的Python条件控制技巧

目录 1. 条件控制的重要性 2. 理解条件语句的基础 3. 使用 elif 增加更多选择 4. 利用 in 和 not in 进行集合匹配 5. 利用 and 与 or 连接条件 6. 高级技巧&#xff1a;列表推导式中的条件表达式 7. 实战案例&#xff1a;自动评分系统 8. 总结 文末福利 1. 条件控制的…

计算机网络34——Windows内存管理

1、计算机体系结构 2、内存管理 分为连续分配管理和非连续分配管理 在块内存在的未使用空间叫内部碎片&#xff0c;在块外存在的未使用空间叫外部碎片 固定分区分配可能出现内部碎片&#xff0c;动态分区分配可能出现外部碎片 3、逻辑地址和实际地址的互相转换 4、缺页中断 …

渗透测试常用工具(非常详细)从零基础入门到精通,看完这一篇就够了。

对于白帽子来说&#xff0c;在进行渗透测试、代码审计、逆向工程等一系列工作中&#xff0c;都离不开安全工具的支撑&#xff0c;这些工具像一把把利剑&#xff0c;可以大大提高渗透效率。 在本篇中&#xff0c;我总结了超多网络安全工具&#xff0c;涉及暴力破解、渗透字典、…

Linux入门学习:make/Makefile(Linux项目自动化构建工具)

文章目录 1. makefile文件语法2. make clean工程清理3. 细节语法4. make原理 ⭕背景&#xff1a; 会不会写makefile&#xff0c;从一个侧面说明了一个人是否具备完成大型工程的能力。一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c…

Electron 安装包 asar 解压定位问题实战

背景 在开发 Electron 过程中&#xff0c;我们想知道 Electron 打包的最终形态是什么样的&#xff0c;以便我们能更好的理解 Electron 打包的过程&#xff0c;以及逆向来快速追踪一些问题&#xff0c;例如下面这个报错&#xff0c;以前这类报错都是靠猜&#xff0c;现在则可以…

算法设计与分析(最长公共子序列

目录 最长公共子序列问题描述代码实现输出结果注意事项 小结&#xff1a; 最长公共子序列 最长公共子序列&#xff08;Longest Common Subsequence, LCS&#xff09;问题是计算给定两个序列的最长子序列的长度&#xff0c;这个子序列不要求连续&#xff0c;但需要保持相同的相…

如何在SpringCloud中使用Consul进行服务发现与配置管理

Spring Cloud是一个用于构建分布式系统的开发工具包。它提供了一系列解决方案&#xff0c;用于在分布式系统中管理和协调服务发现、配置管理、负载均衡、容错机制等功能。Consul是一种用于服务发现、配置管理和分布式一致性的工具&#xff0c;与Spring Cloud可以很好地集成在一…