# date-export-sync **Repository Path**: akinomx/DateExportSync ## Basic Information - **Project Name**: date-export-sync - **Description**: Quartz 定时任务处理文件推送(DB2数据库)、FTP 文件导出以及跑批程序脚本执行。 - **Primary Language**: Unknown - **License**: WTFPL - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-12-13 - **Last Updated**: 2024-12-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: quartz批处理 ## README # 定时任务(文件推送项目跑批重构) **作者: 闫鹏** **时间:2023年09月28日** **目录** [TOC] # 一**、目的** 参考目前对账跑批定时任务,对其进行深度优化改造,目的为提高代码的可维护性,性能,和扩展性。具体重构思路分为三部分,对代码的耦合性进行优化,对程序的扩展性进行优化,对功能的通用性进行优化。 # 二、**详细架构** 原跑批程序架构采用Java EE 架构,集成 quartz-2.2.2 定时任务框架,参数由配置文件统一配置。配置灵活度较差。新增任务必须对源码进行二次开发,维护成本过高。 优化后的跑批程序采用java web 单体架构,后端采用Spring Boot项目对参数进行设置,使用maven管理依赖,使用对象序列化技术实现数据持久化,系统集成lombok框架对实体与日志同一管理,采用Knife4j对接口进行同一管理,采用Spring Web 过滤器进行权限验证。 前端采用vue.js,elementUI,axios技术进行编写。 实现任务可视化配置,多系统通用管理,使用RESTF开发规范,使代码可读性高,耦合性低,易维护易扩展。 ## 1. **降低耦合性** ①**模块化设计**: 原有javaEE项目,没有模块化概念,新系统对原有代码进行拆分。分别为,任务管理模块,任务创建模块,数据库配置模块,FTP配置模块,接口配置模块,数据库引用模块。每个模块对应的具体实现。保证任务与任务之间低耦合,互不影响。开发采用controller - Sercive - dao 的结构对模块代码进行区分。方便维护与扩展。 ②**依赖注入****Maven** 在原有的Java EE项目中,依赖管理通常依赖于传统的JAR包导入方式。这种方式虽然常见,但在维护性、可扩展性和可测试性方面存在弊端。新架构系统使用Maven管理依赖,Maven会自动解析依赖关系,确保使用的库是最新的版本,同时还允许你明确定义所需库的版本。通过Maven,可以将依赖关系从代码内部移到外部配置文件中,例如pom.xml。这种外部化配置使得更改依赖或引入新依赖变得非常简单,不需要修改源代码。这有助于降低耦合性,使系统更加灵活,易于维护和升级。Maven可以自动化构建、测试和部署过程,简化了项目的构建和发布流程。 ③**接口抽象** 通过使用接口或抽象类,可以明确定义每个模块的行为和功能。这种契约清晰明了,有助于开发团队更好地理解模块之间的协作方式。接口或抽象类将模块的公共行为与具体实现分离开来。这意味着其他模块只需依赖于接口,而不需要关心具体实现的细节。这降低了模块之间的耦合度,使得更容易替换或升级模块的实现。 ## 2. **通用性优化** ### ① **参数可视化配置** 在架构过程中,对扩展性以及系统的功能通用性进行了深度的思考。为实现参数可视化灵活配置,系统采用单体项目架构,引入vue.js,elementUi等前端框架对参数配置,架构数据库配置模块,FTP配置模块。实现多数据库通用,多系统通用,多平台接口通用,FTP服务通用。对系统的维护扩展进行提高,这种参数可视化配置的方法为系统带来了巨大的优势。首先,通过引入前端框架如vue.js和elementUI,实现了参数配置的可视化,使用户能够轻松地进行配置和管理。此外,数据库配置模块和FTP配置模块的引入使得多数据库通用和FTP服务通用成为可能,从而在多个系统和平台之间实现了高度的通用性。 这种通用性优化不仅提高了系统的维护性,还大大简化了系统的扩展过程。新的功能或系统可以更容易地集成到现有的架构中,而不必重新编写大量代码。这为业务需求的快速演变提供了灵活性和敏捷性,使系统能够适应不断变化业务和技术要求。 ### ② **对象序列数据持久化** 在通用性优化方面,采用了一种轻量且高效的数据持久化方式,即对象序列化与反序列化技术。这种方法的优势在于:通过对象序列化,我们将系统数据以对象的形式进行持久化,而不依赖传统的关系型数据库。这使系统变得轻量、简洁,减少了数据库维护的复杂性和成本。这种方式还增加了系统的通用性,因为数据不再依赖于特定的数据库引擎或结构,而是以对象的形式存在。这使得系统可以更容易地与不同类型的数据存储和处理系统集成。 此外,对象序列化还有助于系统的性能优化。由于数据以二进制形式存储,读取和写入速度更快,特别是对于大量数据的处理。总之,对象序列化数据持久化为系统带来了轻量性、通用性和性能优势。这对于满足不断变化的业务需求至关重要。 ## 3. **任务可视化配置** 任务可视化配置是系统中的又一个重要方面,它旨在提高系统的可维护性和易用性。系统中引入了任务配置模块,这个模块的核心目标是提供一种可视化的方式来创建、管理和调度任务。用户可以通过界面轻松地定义任务的参数、执行时间、频率等信息,而无需深入了解代码实现。通过采用现代前端技术,如vue.js和elementUI,我们建立了一个直观、用户友好的任务管理界面。这个界面允许用户查看、编辑和监控系统中的各种任务,提供了实时的任务状态和日志信息。 任务可视化配置模块被设计成通用的,可以适用于多个系统和平台。这意味着无论是在不同的业务模块还是在不同的项目中,都可以轻松地利用这一模块来管理任务,从而提高了可重用性和效率。 为了提高系统的稳定性,我们引入了任务监控和报警功能。系统能够自动监测任务的执行情况,及时发现问题并触发报警通知,从而减少了故障时间和人工干预的需求。 ## 4. **前端技术栈** ### **①** **Vue.js** Vue.js是一种流行的前端JavaScript框架,被广泛用于构建现代的、交互式的Web应用程序。我们选择了Vue.js作为前端开发的主要框架,因为它提供了组件化开发的能力,使前端代码更具结构性和可维护性。Vue.js还拥有活跃的社区和丰富的生态系统,提供了大量的工具和插件,有助于加速开发过程。 ### **②ElementUI** ElementUI是一套基于Vue.js的前端UI组件库,它提供了丰富的UI组件,包括按钮、表格、表单、对话框等等。引入ElementUI使我们能够快速构建出现代化的用户界面,提高了用户体验,同时保持了一致性和美观性。 ### ③Axios Axios是一个用于发起HTTP请求的JavaScript库,它与Vue.js集成良好,提供了简洁而强大的方式来处理数据请求和响应。在任务可视化配置中,Axios用于与后端API进行通信,确保数据的可靠传输和交互。 通过采用这些前端技术,实现了参数可视化配置和任务管理界面的开发,还提高了系统的用户友好性和响应速度。这个前端技术栈的选择经过深思熟虑,确保了系统的稳定性和性能,为用户提供了卓越的体验。同时,这些技术也具备广泛的社区支持和持续的更新,使我们的系统能够跟随最新的前端趋势和最佳实践。 ## 5. **RESTF开发规范** ### **①**资源定义 我们将系统中的各种数据和功能抽象为资源,每个资源都有唯一的标识符(URI)。这样,客户端可以通过URI来访问和操作这些资源,使API设计更加清晰和直观。 ### **②**HTTP动词 我们使用HTTP动词(GET、POST、PUT、DELETE等)来定义对资源的操作。例如,GET用于获取资源,POST用于创建资源,PUT用于更新资源,DELETE用于删除资源。这种使用HTTP动词的方式使API的行为更加符合RESTful原则。 ### **③**状态码 我们在API的响应中使用标准的HTTP状态码,以便客户端了解请求的结果。例如,200000表示成功,201000表示资源创建成功,404000表示资源不存在,等等。这有助于客户端根据不同的状态码采取相应的处理逻辑。 ### **④Knife4j** 通过采用Knife4j来进行接口文档的统一管理是一种明智的选择。Knife4j是一款基于Swagger的开源工具,Knife4j自动生成接口文档,提供可视化界面,内置测试工具,支持版本管理,实现在线调试,节省时间,促进团队协作,提高API准确性和开发效率。Knife4j构建出一组清晰、简洁和易于理解的API,为客户端提供了一种直观的方式来与系统进行交互。这种一致性和规范性使得API更容易维护和扩展,同时也促进了开发团队之间的协作,提高了系统的整体可靠性和可维护性。 # 三、**详细设计** ## 1. **模块详细设计** ### **①任务管理模块** ![输入图片说明](https://foruda.gitee.com/images/1696731267782246599/6e284758_11257890.jpeg "wps1.jpg") 任务管理模块可以对任务状态进行修改,包括启动,暂停,恢复,删除。并可以对多种任务进行管理,包括但不限于数据推送,文件删除,接口收发,SQL定时执行。 ### **②新增任务模块** ![输入图片说明](https://foruda.gitee.com/images/1696731290168296225/f66957bc_11257890.jpeg "wps2.jpg") 新增任务模块可已对任务进行新增,对自定义参数,以及灵活SQL进行调整,支持但不限于数据推送任务,文件删除任务,接口收发任务,数据改造任务等。通过对参数的灵活配置,实现对任务的可视化创建。 ### **③数据库配置模块** ![输入图片说明](https://foruda.gitee.com/images/1696731310097328028/803e8faf_11257890.jpeg "wps3.jpg") 数据库配置模块可以对数据库进行灵活配置,支持多数据库,多端配置,数据库配置是为适应与多种任务类型的通用参数进行整合。可以实现一次配置多次使用 ### **④FTP配置模块** ![输入图片说明](https://foruda.gitee.com/images/1696731337871601979/d97d27b9_11257890.jpeg "wps4.jpg") FTP配置与数据库配置一致,支持多个FTP多服务进行配置,对多任务共有参数进行整合。可以实现一次配置多次使用。 ### **⑥其他配置模块** 在架构设计理念里,其他配置模块包含数据库引用配置,为执行定时数据库任务参数做配置,接口配置,为接口收发任务参数做配置。日志跟踪,为在客户端灵活查看日志排除问题所开发的模块,消息提醒,可以对任务的执行状态,执行接口进行监控预警,保证在出现不可控问题使及时通知客户端,为系统的可用性增添保障。 ## 2. **接口详细设计** 详细接口设计可通过系统项目后访问: http://localhost:8080/doc.html 网址进行调试访问 或者参考API导出文档:1.0.0.html(下载后直接打开) ![img](file:///C:\Users\Admin\AppData\Local\Temp\ksohtml17232\wps5.png) # 四、**环境部署** ### 1. **配置环境** Java版本:jdk1.8 系统架构:SpringBoot + element + vue.js 其余环境:序列化文件(同jar包目录) ### 2. **本地部署步骤** ①在有jdk1.8的环境下,解压部署包并打开 ![输入图片说明](https://foruda.gitee.com/images/1696731360315578496/6dc72e77_11257890.jpeg "wps6.jpg") ②打开cmd运行窗口,进入部署包路径 运行java -jar DataExportSync-0.0.1-SNAPSHOT.jar ![输入图片说明](https://foruda.gitee.com/images/1696731382432512011/49c0ab7c_11257890.jpeg "wps7.jpg") ③项目启动后访问 localhost:8080/index.html进入项目主页 ④项目启动后访问 localhost:8080/doc.html进入接口后台