mirror of
https://github.com/PowerJob/PowerJob.git
synced 2025-07-17 00:00:04 +08:00
1 line
19 KiB
JavaScript
1 line
19 KiB
JavaScript
'use strict';(function(){const indexCfg={cache:true};indexCfg.doc={id:'id',field:['title','content'],store:['title','href'],};const index=FlexSearch.create('balance',indexCfg);window.bookSearchIndex=index;index.add({'id':0,'href':'/ohmyscheduler/docs/startup/','title':"快速开始",'content':""});index.add({'id':1,'href':'/ohmyscheduler/docs/startup/1-server-startup/','title':"调度中心(Server)部署",'content':"环境要求 Open JDK 8+\n Apache Maven 3+\n 任意 Spring Data Jpa 支持的关系型数据库(MySQL/Oracle/MS SQLServer\u0026hellip;)\n MongoDB(可选),任意支持GridFS的mongoDB版本(4.2.6测试通过,其余未经测试,仅从理论角度分析可用),缺失该组件的情况下将无法使用在线日志、容器部署等扩展功能\n 初始化关系数据库 调度服务器(oh-my-scheduler-server)的持久化层基于Spring Boot Jpa实现,对于能够直连数据库的应用,开发者仅需完成数据库的创建,即运行SQL:CREATE database if NOT EXISTS oms-product default character set utf8mb4 collate utf8mb4_unicode_ci;`\n OhMyScheduler支持环境隔离,提供日常(daily)、预发(pre)和线上(product)三套环境,请根据使用的环境分别部署对应的数据库:oms-daily、oms-pre和oms-product。 调度服务器属于时间敏感应用,强烈建议检查当前数据库所使用的时区信息(show variables like \u0026quot;%time_zone%\u0026quot;;),务必确保time_zone代表的时区与JDBC URL中serverTimezone字段代表的时区一致! 手动建表表SQL文件:下载地址 部署调度服务器—源码编译 调度服务器(oh-my-scheduler-server)支持任意的水平扩展,即多实例集群部署仅需要在同一个局域网内启动新的服务器实例,性能强劲无上限!\n 调度服务器(oh-my-scheduler-server)为了支持环境隔离,分别采用了日常(application-daily.properties)、预发(application-pre.properties)和线上(application-product.properties)三套配置文件,请根据实际需求进行修改,以下为配置文件详解。\n 配置项 含义 可选 server.port SpringBoot配置,HTTP端口号,默认7700 否 oms.akka.port OhMyScheduler配置,Akka端口号,默认10086 否 oms.alarm.bean.names OhMyScheduler报警服务Bean名称,多值逗号分隔 是 spring.datasource.core.xxx 关系型数据库连接配置 否 spring.mail.xxx 邮件配置 是,未配置情况下将无法使用邮件报警功能 spring.data.mongodb.xxx MongoDB连接配置 是,未配置情况下将无法使用在线日志功能 oms.log.retention.local 本地日志保留天数,负数代表永久保留 否 oms.log.retention.remote 远程日志保留天数,负数代表永久保留 否 oms.container.retention.local 扩展的报警服务Bean,多值逗号分割,默认为邮件报警 否 oms.container.retention.remote 远程容器保留天数,负数代表永久保留 否 完成配置文件修改后,即可正式开始部署:\n 打包:运行mvn clean package -U -Pdev -DskipTests,构建调度中心Jar文件。 运行:运行java -jar oms-server.jar --spring.profiles.active=product,指定生效的配置文件。 验证:访问http://ip:port查看是否出现OhMyScheduler的欢迎页面。 部署调度服务器—Docker 建议自己根据项目中的Dockerfile稍作修改,制作自己的Docker镜像,而不是直接使用官方镜像!原因在于:容器功能需要用到Git和Maven来编译代码库,而公司内部往往都会搭建自己的私有仓库,所以Git容器功能没办法正常运行(即,官方镜像中的调度服务器不支持Git容器的部署)。\n Docker Hub地址\n部署流程:\n 下载镜像:docker pull tjqq/oms-server 创建容器并运行(所有SpringBoot的启动参数都可通过-e Params=\u0026quot;\u0026quot;传入) docker run -d -e PARAMS=\u0026#34;--spring.profiles.active=product\u0026#34; -p 7700:7700 -p 10086:10086 -p 27777:27777 --name oms-server -v ~/docker/oms-server:/root/oms-server tjqq/oms-server:$version 单独部署前端页面(可选) 每一个oh-my-scheduler-server都自带了前端页面,不过Tomcat(为了完善的WebSocket支持,现已切换到Undertow)做Web服务器的性能就呵呵了(看评测好像还行,不过有追求的用户还是建议单独使用源码部署)~\n 源码克隆:OhMyScheduler-Console 替换地址:修改main.js中的axios.defaults.baseURL为服务器地址 npm run build -\u0026gt; nginx config 特别鸣谢:感谢某知名上市电商公司前端对本项目的大力支持!\n初始化应用分组 每一个业务系统初次接入OhMyScheduler时,都需要先完成应用注册。\n 应用注册,用于进行业务分组: 应用名称:关键参数,一般填入接入的业务应用名称即可,需要保证唯一。同一个应用名称的所有worker视为一个集群被调度中心调度。 应用描述:可选参数,便于记忆,无实际用处。 用户注册,用于收集报警信息,用户注册录入个人信息后,即可通过报警配置进行通知。 "});index.add({'id':2,'href':'/ohmyscheduler/docs/startup/2-worker-startup/','title':"执行器(Worker)初始化",'content':"基于宿主应用的执行器初始化 宿主应用即原有的业务应用,假如需要调度执行的任务与当前业务有较为紧密的联系,建议采取该方式。\n OhMyScheduler当前支持Shell、Python等脚本处理器和Java处理器。脚本处理器只需要开发者完成脚本的编写(xxx.sh / xxx.py),在控制台填入脚本内容即可,本章不再赘述。本章将重点阐述Java处理器开发方法与使用技巧。\n Java处理器可根据代码所处位置划分为内置Java处理器和容器Java处理器,前者直接集成在宿主应用(也就是接入本系统的业务应用)中,一般用来处理业务需求;后者可以在一个独立的轻量级的Java工程中开发,通过容器技术(详见容器章节)被worker集群热加载,提供Java的“脚本能力”,一般用于处理灵活多变的需求。 Java处理器可根据对象创建者划分为SpringBean处理器和普通Java对象处理器,前者由Spring IOC容器完成处理器的创建和初始化,后者则有OhMyScheduler维护其状态。如果宿主应用支持Spring,强烈建议使用SpringBean处理器,开发者仅需要将Processor注册进Spring IOC容器(一个@Component注解或一句bean配置)。 Java处理器可根据功能划分为单机处理器、广播处理器、Map处理器和MapReduce处理器。 单机处理器对应了单机任务,即某个任务的某次运行只会有某一台机器的某一个线程参与运算。 广播处理器对应了广播任务,即某个任务的某次运行会调动集群内所有机器参与运算。 Map处理器对应了Map任务,即某个任务在运行过程中,允许产生子任务并分发到其他机器进行运算。 MapReduce处理器对应了MapReduce任务,在Map任务的基础上,增加了所有任务结束后的汇总统计。 首先,添加相关的jar包依赖,最新依赖版本请参考maven中央仓库:推荐地址\u0026amp;备用地址\n\u0026lt;dependency\u0026gt; \u0026lt;groupId\u0026gt;com.github.kfcfans\u0026lt;/groupId\u0026gt; \u0026lt;artifactId\u0026gt;oh-my-scheduler-worker\u0026lt;/artifactId\u0026gt; \u0026lt;version\u0026gt;1.2.0\u0026lt;/version\u0026gt; \u0026lt;/dependency\u0026gt; 其次,填写执行器客户端配置文件OhMyConfig,各参数说明如下表所示:\n 属性名称 含义 默认值 appName 宿主应用名称,需要提前在控制台完成注册 无,必填项,否则启动报错 port Worker工作端口 27777 serverAddress 调度中心(oh-my-scheduler-server)地址列表 无,必填项,否则启动报错 storeStrategy 本地存储策略,枚举值磁盘/内存,大型MapReduce等会产生大量Task的任务推荐使用磁盘降低内存压力,否则建议使用内存加速计算 StoreStrategy.DISK(磁盘) maxResultLength 每个Task返回结果的默认长度,超长将被截断。过长可能导致网络拥塞 8096 enableTestMode 是否启用测试模式,启用后无需Server也能顺利启动OhMyScheduler-Worker,用于处理器本地的单元测试 false 最后,初始化客户端,完成执行器的启动,代码示例如下:\n@Configuration public class OhMySchedulerConfig { @Bean public OhMyWorker initOMS() throws Exception { // 服务器HTTP地址(端口号为 server.port,而不是 ActorSystem port) List\u0026lt;String\u0026gt; serverAddress = Lists.newArrayList(\u0026#34;127.0.0.1:7700\u0026#34;, \u0026#34;127.0.0.1:7701\u0026#34;); // 1. 创建配置文件 OhMyConfig config = new OhMyConfig(); config.setPort(27777); config.setAppName(\u0026#34;oms-test\u0026#34;); config.setServerAddress(serverAddress); // 如果没有大型 Map/MapReduce 的需求,建议使用内存来加速计算 // 为了本地模拟多个实例,只能使用 MEMORY 启动(文件只能由一个应用占有) config.setStoreStrategy(StoreStrategy.MEMORY); // 2. 创建 Worker 对象,设置配置文件 OhMyWorker ohMyWorker = new OhMyWorker(); ohMyWorker.setConfig(config); return ohMyWorker; } } 非Spring应用程序在创建OhMyWorker对象后手动调用ohMyWorker.init()方法完成初始化即可。\n基于agent的执行器初始化 agent是一个没有任何业务逻辑的执行器(其实就是为worker加了一个main方法)。\n 代码编译方式启动示例:java -jar oh-my-scheduler-worker-agent-1.2.0.jar -a my-agent:\nUsage: OhMyAgent [-hV] -a=\u0026lt;appName\u0026gt; [-l=\u0026lt;length\u0026gt;] [-p=\u0026lt;storeStrategy\u0026gt;] [-s=\u0026lt;server\u0026gt;] OhMyScheduler-Worker代理 -a, --app=\u0026lt;appName\u0026gt; worker-agent名称,可通过调度中心控制台创建 -h, --help Show this help message and exit. -l, --length=\u0026lt;length\u0026gt; 返回值最大长度 -p, --persistence=\u0026lt;storeStrategy\u0026gt; 存储策略,枚举值,DISK 或 MEMORY -s, --server=\u0026lt;server\u0026gt; 调度中心地址,多值英文逗号分隔,格式 IP:Port OR domain -V, --version Print version information and exit. Docker镜像:Docker Hub\n"});index.add({'id':3,'href':'/ohmyscheduler/docs/startup/3-processor-develop/','title':"处理器编写",'content':"处理器概述 OhMyScheduler当前支持Shell、Python等脚本处理器和Java处理器。脚本处理器只需要开发者完成脚本的编写(xxx.sh / xxx.py),在控制台填入脚本内容即可,本章不再赘述。本章将重点阐述Java处理器开发方法与使用技巧。\n Java处理器可根据代码所处位置划分为内置Java处理器和容器Java处理器,前者直接集成在宿主应用(也就是接入本系统的业务应用)中,一般用来处理业务需求;后者可以在一个独立的轻量级的Java工程中开发,通过容器技术(详见容器章节)被worker集群热加载,提供Java的“脚本能力”,一般用于处理灵活多变的需求。 Java处理器可根据对象创建者划分为SpringBean处理器和普通Java对象处理器,前者由Spring IOC容器完成处理器的创建和初始化,后者则有OhMyScheduler维护其状态。如果宿主应用支持Spring,强烈建议使用SpringBean处理器,开发者仅需要将Processor注册进Spring IOC容器(一个@Component注解或一句bean配置)。 Java处理器可根据功能划分为单机处理器、广播处理器、Map处理器和MapReduce处理器。 单机处理器对应了单机任务,即某个任务的某次运行只会有某一台机器的某一个线程参与运算。 广播处理器对应了广播任务,即某个任务的某次运行会调动集群内所有机器参与运算。 Map处理器对应了Map任务,即某个任务在运行过程中,允许产生子任务并分发到其他机器进行运算。 MapReduce处理器对应了MapReduce任务,在Map任务的基础上,增加了所有任务结束后的汇总统计。 初始化宿主应用 首先,添加相关的jar包依赖,最新依赖版本请参考maven中央仓库:推荐地址\u0026amp;备用地址\n\u0026lt;dependency\u0026gt; \u0026lt;groupId\u0026gt;com.github.kfcfans\u0026lt;/groupId\u0026gt; \u0026lt;artifactId\u0026gt;oh-my-scheduler-worker\u0026lt;/artifactId\u0026gt; \u0026lt;version\u0026gt;1.2.0\u0026lt;/version\u0026gt; \u0026lt;/dependency\u0026gt; "});index.add({'id':4,'href':'/ohmyscheduler/docs/shortcodes/','title':"Shortcodes",'content':""});index.add({'id':5,'href':'/ohmyscheduler/docs/shortcodes/columns/','title':"Columns",'content':"Columns Columns help organize shorter pieces of content horizontally for readability.\n{{\u0026lt; columns \u0026gt;}} \u0026lt;!-- begin columns block --\u0026gt; # Left Content Lorem markdownum insigne... \u0026lt;---\u0026gt; \u0026lt;!-- magic sparator, between columns --\u0026gt; # Mid Content Lorem markdownum insigne... \u0026lt;---\u0026gt; \u0026lt;!-- magic sparator, between columns --\u0026gt; # Right Content Lorem markdownum insigne... {{\u0026lt; /columns \u0026gt;}} Example Left Content Lorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat stringit, frustra Saturnius uteroque inter! Oculis non ritibus Telethusa protulit, sed sed aere valvis inhaesuro Pallas animam: qui quid, ignes. Miseratus fonte Ditis conubia. Mid Content Lorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat stringit, frustra Saturnius uteroque inter! Right Content Lorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat stringit, frustra Saturnius uteroque inter! Oculis non ritibus Telethusa protulit, sed sed aere valvis inhaesuro Pallas animam: qui quid, ignes. Miseratus fonte Ditis conubia. "});index.add({'id':6,'href':'/ohmyscheduler/docs/shortcodes/details/','title':"Details",'content':"Details Details shortcode is a helper for details html5 element. It is going to replace expand shortcode.\nExample {{\u0026lt; details \u0026#34;Title\u0026#34; [open] \u0026gt;}} ## Markdown content Lorem markdownum insigne... {{\u0026lt; /details \u0026gt;}} {{\u0026lt; details title=\u0026#34;Title\u0026#34; open=true \u0026gt;}} ## Markdown content Lorem markdownum insigne... {{\u0026lt; /details \u0026gt;}} Title Markdown content Lorem markdownum insigne\u0026hellip; "});index.add({'id':7,'href':'/ohmyscheduler/docs/shortcodes/expand/','title':"Expand",'content':"Expand Expand shortcode can help to decrease clutter on screen by hiding part of text. Expand content by clicking on it.\nExample Default {{\u0026lt; expand \u0026gt;}} ## Markdown content Lorem markdownum insigne... {{\u0026lt; /expand \u0026gt;}} Expand ↕ Markdown content Lorem markdownum insigne\u0026hellip; With Custom Label {{\u0026lt; expand \u0026#34;Custom Label\u0026#34; \u0026#34;...\u0026#34; \u0026gt;}} ## Markdown content Lorem markdownum insigne... {{\u0026lt; /expand \u0026gt;}} Custom Label ... Markdown content Lorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat stringit, frustra Saturnius uteroque inter! Oculis non ritibus Telethusa protulit, sed sed aere valvis inhaesuro Pallas animam: qui quid, ignes. Miseratus fonte Ditis conubia. "});index.add({'id':8,'href':'/ohmyscheduler/docs/shortcodes/hints/','title':"Hints",'content':"Hints Hint shortcode can be used as hint/alerts/notification block.\nThere are 3 colors to choose: info, warning and danger.\n{{\u0026lt; hint [info|warning|danger] \u0026gt;}} **Markdown content** Lorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat stringit, frustra Saturnius uteroque inter! Oculis non ritibus Telethusa {{\u0026lt; /hint \u0026gt;}} Example Markdown content\nLorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat stringit, frustra Saturnius uteroque inter! Oculis non ritibus Telethusa Markdown content\nLorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat stringit, frustra Saturnius uteroque inter! Oculis non ritibus Telethusa Markdown content\nLorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat stringit, frustra Saturnius uteroque inter! Oculis non ritibus Telethusa "});index.add({'id':9,'href':'/ohmyscheduler/docs/shortcodes/katex/','title':"Katex",'content':"KaTeX KaTeX shortcode let you render math typesetting in markdown document. See KaTeX\nExample {{\u0026lt; katex [display] [class=\u0026#34;text-center\u0026#34;] \u0026gt;}} f(x) = \\int_{-\\infty}^\\infty\\hat f(\\xi)\\,e^{2 \\pi i \\xi x}\\,d\\xi {{\u0026lt; /katex \u0026gt;}} Display Mode Example Here is some inline example: \\(\\pi(x)\\) , rendered in the same line. And below is display example, having display: block \\[f(x) = \\int_{-\\infty}^\\infty\\hat f(\\xi)\\,e^{2 \\pi i \\xi x}\\,d\\xi\\] Text continues here.\n"});index.add({'id':10,'href':'/ohmyscheduler/docs/shortcodes/mermaid/','title':"Mermaid",'content':"Mermaid Chart Mermaid is library for generating svg charts and diagrams from text.\nExample {{\u0026lt; mermaid [class=\u0026#34;text-center\u0026#34;]\u0026gt;}} sequenceDiagram Alice-\u0026gt;\u0026gt;Bob: Hello Bob, how are you? alt is sick Bob-\u0026gt;\u0026gt;Alice: Not so good :( else is well Bob-\u0026gt;\u0026gt;Alice: Feeling fresh like a daisy end opt Extra response Bob-\u0026gt;\u0026gt;Alice: Thanks for asking end {{\u0026lt; /mermaid \u0026gt;}} "});index.add({'id':11,'href':'/ohmyscheduler/docs/shortcodes/tabs/','title':"Tabs",'content':"Tabs Tabs let you organize content by context, for example installation instructions for each supported platform.\n{{\u0026lt; tabs \u0026#34;uniqueid\u0026#34; \u0026gt;}} {{\u0026lt; tab \u0026#34;MacOS\u0026#34; \u0026gt;}} # MacOS Content {{\u0026lt; /tab \u0026gt;}} {{\u0026lt; tab \u0026#34;Linux\u0026#34; \u0026gt;}} # Linux Content {{\u0026lt; /tab \u0026gt;}} {{\u0026lt; tab \u0026#34;Windows\u0026#34; \u0026gt;}} # Windows Content {{\u0026lt; /tab \u0026gt;}} {{\u0026lt; /tabs \u0026gt;}} Example MacOS MacOS This is tab MacOS content.\nLorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat stringit, frustra Saturnius uteroque inter! Oculis non ritibus Telethusa protulit, sed sed aere valvis inhaesuro Pallas animam: qui quid, ignes. Miseratus fonte Ditis conubia.\nLinux Linux This is tab Linux content.\nLorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat stringit, frustra Saturnius uteroque inter! Oculis non ritibus Telethusa protulit, sed sed aere valvis inhaesuro Pallas animam: qui quid, ignes. Miseratus fonte Ditis conubia.\nWindows Windows This is tab Windows content.\nLorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat stringit, frustra Saturnius uteroque inter! Oculis non ritibus Telethusa protulit, sed sed aere valvis inhaesuro Pallas animam: qui quid, ignes. Miseratus fonte Ditis conubia.\n "});index.add({'id':12,'href':'/ohmyscheduler/docs/','title':"Docs",'content':""});})(); |