【后端】项目开发后端知识要点地图

目录

工程结构篇

协议篇

基本功能及配置篇

Dubbo

Nacos

OSS

Trigger/Async/Schedule

Excel导入/导出(file)

Expression(表达式)

ShardingJDBC(分库分表)

Elasticsearch(ES)

数据库方言配置(Dialect)

其他功能使用文档

特定场景解决方案

工程部署

后端部署

设计器部署

其他环境部署

可视化调试工具

协同开发

工作流

数据可视化运行时

界面设计器

流程设计器

数据可视化

其他

QA

Oinone社区 作者:张博昊原创文章,如若转载,请注明出处:https://doc.oinone.top/backend/18493.html

访问Oinone官网:https://www.oinone.top获取数式Oinone低代码应用平台体验

Like (0)
张博昊's avatar张博昊数式管理员
Previous 2024年10月23日 am10:07
Next 2024年10月23日 pm2:37

相关推荐

  • EIP开放接口使用MD5验签发起请求(v5.x)

    验签工具类 PS:该验签方法仅在pamirs-core的5.0.16版本以上可正常使用 public class EipSignUtils { public static final String SIGN_METHOD_MD5 = "md5"; private static final String SIGN_METHOD_HMAC = "hmac"; private static final String SECRET_KEY_ALGORITHM = "HmacMD5"; private static final String MESSAGE_DIGEST_MD5 = "MD5"; public static String signTopRequest(Map<String, String> params, String secret, String signMethod) throws IOException { // 第一步:检查参数是否已经排序 String[] keys = params.keySet().toArray(new String[0]); Arrays.sort(keys); // 第二步:把所有参数名和参数值串在一起 StringBuilder query = new StringBuilder(); if (SIGN_METHOD_MD5.equals(signMethod)) { query.append(secret); } for (String key : keys) { String value = params.get(key); if (StringUtils.isNoneBlank(key, value)) { query.append(key).append(value); } } // 第三步:使用MD5/HMAC加密 byte[] bytes; if (SIGN_METHOD_HMAC.equals(signMethod)) { bytes = encryptHMAC(query.toString(), secret); } else { query.append(secret); bytes = encryptMD5(query.toString()); } // 第四步:把二进制转化为大写的十六进制(正确签名应该为32大写字符串,此方法需要时使用) return byte2hex(bytes); } private static byte[] encryptHMAC(String data, String secret) throws IOException { byte[] bytes; try { SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), SECRET_KEY_ALGORITHM); Mac mac = Mac.getInstance(secretKey.getAlgorithm()); mac.init(secretKey); bytes = mac.doFinal(data.getBytes(StandardCharsets.UTF_8)); } catch (GeneralSecurityException e) { throw new IOException(e.toString(), e); } return bytes; } private static byte[] encryptMD5(String data) throws IOException { return encryptMD5(data.getBytes(StandardCharsets.UTF_8)); } private static byte[] encryptMD5(byte[] data) throws IOException { try { MessageDigest md = MessageDigest.getInstance(MESSAGE_DIGEST_MD5); return md.digest(data); } catch (NoSuchAlgorithmException e)…

    2024年6月29日
    2.0K00
  • 后端基础学习路径

    模块 内容 目标 概念/举例 文档链接 环境搭建 mac环境搭建 按照教程搭建环境 按照教程搭建环境 3.1.2 环境准备(windows版) windows环境搭建 按照教程搭建环境 按照教程搭建环境 3.1.2 环境准备(windows版) 常见问题 常见问题查阅 列举了可能出现的问题,比如mysql 大小写的问题 【附件一】下载说明 元数据-模块 模块 新建一个独立的模块 能力中心的概念,不被用户感知,可被其他模型或者应用使用 3.2.1 构建第一个Module 应用 新建一个独立的应用,依赖新建的模块 可被用户直接操作的模块称为应用 3.2.1 构建第一个Module 元数据-模型 抽象模型 新建一个抽象模型 不会直接用于构建协议和基础设施(如表结构等),而是通过继承的机制供子模型复用其字段和函数。子模型可以是所有类型的模型。 3.3.2 模型的类型 传输模型 新建一个传输模型 没有默认的数据管理器,只有数据构造器,所以在不自定义动作的情况下,传输模型可以打开详情页、新增表单和修改表单和列表页,但是所有的动作全部为窗口动作。传输模型本身不会存储,如果是关联关系字段关联传输模型,可以将传输模型序列化存储在模型的关联关系字段上。因为没有数据管理器,所以传输模型的列表页没有分页能力 3.3.2 模型的类型 存储模型 新建一个存储模型 用于定义数据表结构和数据的增删改查(数据管理器)功能,是直接与连接器进行交互的数据容器。 3.3.2 模型的类型 代理模型 新建一个代理模型 用于代理存储模型的数据管理器能力,同时又可以扩展出非存储数据信息的交互功能的模型 3.3.2 模型的类型 数据管理器 熟悉Oinone数据管理器和数据构造器,并用于上述新建的模型中 数据管理器和数据构造器是Oinone为模型自动赋予的Function是内在数据管理能力,数据管理器针对存储模型是方便在大家编程模式下可以利用数据管理器Function快速达到相关数据操作的目的。数据构造器则主要用于模型进行初始化时字段默认值计算和页面交互 3.3.3 模型的数据管理器 编码生成器 给单据生成指定格式的编码 商品编码按照生产日期+物料编号+缩写生成唯一标识 3.3.4 模型的继承 元数据-模型继承 抽象基类ABSTRACT 新建一个抽象基类 同抽象模型 3.3.4 模型的继承 扩展继承EXTENDS 新建多个模型,完成扩展继承 零售商品模型、b2b商品模型依赖商品中心的商品模型,零售商品模型想加几个字段 3.3.4 模型的继承 多表继承MULTI_TABLE 新建多个模型,完成多表继承 零售商品模型、b2b商品模型依赖商品中心的商品模型,商品类型不同 3.3.4 模型的继承 代理继承PROXY 新建多个模型,完成代理继承 继承方式代理另一个存储模型, 一个代理模型也可以继承任意数量继承相同父类的代理模型 3.3.4 模型的继承 临时继承TRANSIENT 新建多个模型,完成临时继承 同传输模型 3.3.4 模型的继承 枚举与数据字典 可继承枚举 实现可继承枚举 继承BaseEnum可以实现java不支持的继承枚举。同时可继承枚举也可以用编程式动态创建枚举项。可继承枚举也可以兼容无代码枚举 3.3.6 枚举与数据字典 二进制枚举 实现二进制枚举 通过@Dict注解设置数据字典的bit属性或者实现BitEnum接口来标识该枚举值为2的次幂 3.3.6 枚举与数据字典 不可继承枚举 实现不可继承枚举 实现JAVA语言的enum 3.3.6 枚举与数据字典 异常枚举 实现异常枚举 oinone管理异常的规范 3.3.6 枚举与数据字典 元数据-字段 序列化方式 熟悉字段序列化的方式 使用@Field注解的serialize属性来配置非字符串类型属性的序列化与反序列化方式,最终会以序列化后的字符串持久化到存储中。 3.3.7 字段之序列化方式 字段类型 熟悉字段类型 字段是描述实体的特征属性,重点介绍字段的基础类型与复合类型 3.3.8 字段类型之基础与复合 关系与引用 熟悉字段的关系与引用 关系与引用类型才让oinone具备完整的描述模型与模型间关系的能力 3.3.9 字段类型之关系与引用 函数 Function 熟悉函数 Function做为oinone的可管理的执行逻辑单元 3.4.1 构建第一个Function 开放级别与类型 为方法定义不同的开放层级 辑都通过Function来归口统一管理,所以在Function是可以定义其开放级别有API、REMOTE、LOCAL三种类型,配置可多选。 3.4.2 函数的开放级别与类型 继承与多态 熟悉函数继承与多态 面向对象-继承与多态 3.4.3.1 面向对象-继承与多态 面向切面-拦截器 熟悉函数-面向切面-拦截器 拦截器为平台满足条件的函数以非侵入方式根据优先级扩展函数执行前和执行后的逻辑。 3.4.3.2 面向切面-拦截器 扩展点 熟悉函数扩展点 逻辑中会预留扩展点,以便日后应对不同需求时可以灵活替换某一小块逻辑 3.4.3.3 SPI机制-扩展点 交互 菜单 新增业务菜单 模块就是地图,菜单是导航 3.5.1 构建第一个Menu 视图 自定义视图 日常业务开发中对页面进行调整 3.5.2.1 整体介绍 服务器动作ServerAction 熟悉服务器动作 类似于Spring MVC的控制器Controller 3.5.3 Action的类型 窗口动作ViewAction 熟悉窗口动作 站内跳转,通过模型编码和动作名称路由 3.5.3 Action的类型 跳转动作UrlAction 熟悉跳转动作 外链跳转 3.5.3 Action的类型…

    2024年6月15日
    1.4K00
  • 平台配置日志输出和推送到APM与LogStash

    场景描述 目前设计器镜像启动后日志文件为out.log,是启动脚本中定向输出了(>>)out.log文件。实际项目可能: 日志输出到特定目录的特定文件名中 指定以日志保留策略(单个文件大小和文件保留个数) 日志输出到APM工具中(如skywalking) 日志推送到LogStash 日志自定义输出 不定向输出,采用自己配置的方式,与标准的SpringBoot工程配置日志一样。两种方式(都是Spring提供的方式): 方式一 bootstrap.yml 里面可以按profiles指定logback的配置文件,具体文件名和文件输入在logback里面进行配置,跟通用的logback配置一致. 例如: logging: config: classpath:logback-pre.xml 方式二 resources的根目录,直接配置 logback-spring.xml, 启动会自动加载。 日志自定义场景 配置日志推送到LogStash <!–配置日志推送到LogStash–> <contextListener class="pro.shushi.pamirs.demo.core.config.DemoLogbackFiledConfig"/> <appender name="LogStash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>127.0.0.1:4560</destination> <!– encoder必须配置,有多种可选 –> <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"> <!– SkyWalking插件, log加tid–> <provider class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.logstash.TraceIdJsonProvider" /> <!–在生成的json中会加这些字段–> <customFields> {"app.name":"pamirs-demo", "app.type":"Microservice", "platform":"pamirs", "env":"dev"} </customFields> <timeZone>Asia/Shanghai</timeZone> <writeVersionAsInteger>true</writeVersionAsInteger> <providers> <pattern> <pattern> <!–动态的变量–> { "ip": "%{ip}", "server.name": "%{server.name}", "logger_name": "%logger" } </pattern> </pattern> </providers> </encoder> </appender> skywalking的日志rpc上传 <!– skywalking的日志rpc上传 –> <appender name="SkyWalkingLogs" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender"> <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout"> <Pattern>${CONSOLE_LOG_PATTERN}</Pattern> </layout> </encoder> </appender> 完整的代码示例 Logback自定义字段 package pro.shushi.pamirs.demo.core.config; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.spi.LoggerContextListener; import ch.qos.logback.core.Context; import ch.qos.logback.core.spi.ContextAwareBase; import ch.qos.logback.core.spi.LifeCycle; import java.net.InetAddress; import java.net.UnknownHostException; /** * Logback自定义字段 * * @author wx@shushi.pro * @date 2024/4/17 */ public class DemoLogbackFiledConfig extends ContextAwareBase implements LoggerContextListener, LifeCycle { private boolean started = false; @Override public boolean isResetResistant() { return false; } @Override public void onStart(LoggerContext loggerContext) { } @Override public void onReset(LoggerContext loggerContext) { } @Override public void onStop(LoggerContext loggerContext) { } @Override public void onLevelChange(Logger logger, Level level) { } @Override public void start() { if (started) { return; } Context context = getContext();…

    2024年5月18日
    2.0K00
  • 数式Oinone培训学习路径

    一、培训学习路径 下载培训清单(world) 数式Oinone 培训学习路径清单.docx 类别 步骤详解 核心事件 参与人员 是否完成 快速上手 阅读查看快速上手文档 阅读并理解文档中的每个步骤和视频 前端/后端 ✅ 启动完成 对应参与人员完成前/后端工程启动 前端/后端 ✅ 实现deno 生成demo 效果 前端/后端 ✅ 准备工作 技术工具检查 请确在本地已安装并配置好必要的开发工具和环境(如 IDE、Node.js、数据库等) 前端/后端 ✅ 问题反馈 快速上手过程中问题清单提交 前端/后端 ✅ 版本情况 版本是否是最新的版本,且建议研发人员版本一致,且类型是 min 前端/后端 ✅ 培训知识点 前后端标准研发流程 了解数式Oinone 前后端协作 前端/后端 ✅ 前端工程讲解 了解数式Oinone 前端工程最佳实践 前端 ✅ 后端工程讲解 了解数式Oinone 后端工程最佳实践 后端 ✅ 前端文章大纲 阅读数式Oinone 前端文章大纲,知道相应文章如何查找 前端 ✅ 前端初阶知识点讲解 了解数式Oinone 如何自定义母版/视图/动作/字段 前端 ✅ 前端进阶知识点讲解 了解如何自定义GraphQL 请求/前端组件覆盖/ 前端ts写法 前端 ✅ 前端调试工具使用 了解数式Oinone debug 调试工具如何使用 前端 ✅ 后端文章大纲 阅读数式Oinone 后端文章大纲,知道相应文章如何查找 后端 ✅ 后端初阶知识点讲解 了解数式Oinone 模块类型/定义/数据管理器/继承/枚举与数据字典/字段序列化与类型、函数(Function)概述Oinone执行逻辑单元与模型方法的绑定 后端 ✅ 后端进阶知识点讲解 了解数式Oinone 界面导入导出、文件导入导出、工作流、协同开发等功能如何使用 后端 ✅ 二、培训注意要点事项 快速入门,简单快捷 数式Oinone培训前注意事项 三、培训学习知识点 优秀创见者经验分享,让学习事半功倍 数式Oinone 标准研发流程(点击此处观看) 视频简介:前后端同学将了解如何高效协作,解决常见开发难题,并掌握如何使用Oinone平台提高工作效率。课程分为五个模块:1) 前后端开发流程最佳实践,2) 前端与后端各自的责任,3) 协同开发模式,4) 自查自纠方法,5) 传统开发模式的问题 观看对象:建议都看 数式Oinone前端工程合理讲解(点击此处查看) 视频简介:前端工程结构建议参考,以及注意事项 观看对象:前端,对Vue有基础的了解,且已经完成了前端工程启动 点击查看文章:前端工程结构示例,包括标品和定制层 数式Oinone后端工程合理讲解(点击此处查看) 视频简介:后端工程结构建议参考,以及注意事项 观看对象:后端,对Java有基础的了解,且已经完成了后端工程启动 点击查看文章:后端工程示例 前端必看知识点清单 前端文章大纲 (建议前端伙伴一定要收藏哦) 文章内容:使用数式Oinone ,前端项目中场景使用场景文章合集 观看对象:前端,且已经完成前端工程启动,对Vue有基础的了解 前端初阶知识点讲解 数式Oinone— 如何自定义母版(点击此处观看) 视频简介:母版是什么,以及在业务中如何应用,如何自定义 观看对象: 前端,且已经完成前端工程启动,对Vue有基础的了解 点击查看文章:3.5.7.2 自定义母版 数式Oinone —如何自定义视图(点击此处观看) 视频简介:视图是什么,以及在业务中如何应用,如何自定义 观看对象: 前端,且已经完成前端工程启动,对Vue有基础的了解 点击查看文章:3.5.7.4 自定义页面 数式Oinone —如何自定义动作(点击此处观看) 视频简介:动作各种类型操作及示例,以及在业务中如何应用,如何自定义 观看对象: 前端,且已经完成前端工程启动,对Vue有基础的了解 点击查看文章 :3.5.7.5 自定义动作 数式Oinone—如何自定义字段(点击此处观看) 视频简介:动作各种类型操作及示例,以及在业务中如何应用,如何自定义 观看对象: 前端,且已经完成前端工程启动,对Vue有基础的了解 点击查看文章:3.5.7.6 自定义字段 前端进阶知识点讲解 如何自定义 GraphQL 请求 (点击此处观看) 视频简介:GraphhQL在业务中如何应用,如何自定义 观看对象: 前端,且已经完成前端工程启动,对Vue和GraphhQL有基础的了解 点击查看文章:如何自定义 GraphQL 请求 数式Oinone—前端组件覆盖 (点击此次观看) 视频简介:了解如何自定义组件,以及如何组件覆盖 观看对象: 前端,且已经完成前端工程启动,对Vue有基础的了解 数式Oinone—前端ts写法(点击此处观看) 视频简介:了解如何前端ts写法,以及如何应用 观看对象: 前端,且已经完成前端工程启动,对Vue有基础的了解点击查看文章:前端 SPI 注册 + 渲染 数式–Oinone前端调试工具如何使用提升开发效率(点击此处观看) 视频简介:了解数式Oinone debug,学会使用平台默认的调试工具,通过控制台查看当前视图元数据信息,学会浏览器调试,以及如何使用vue 调试工具提升研发效率 观看对象: 前端,且已经完成前端工程启动,对Vue有基础的了解 点击查看文章:调试工具在业务场景的使用-前端 点击查看文章:如何提高自定义组件的开发效率…

    2024年12月24日
    4.0K01
  • OSS(CDN)配置和文件系统的一些操作

    目前Oinone支持的OSS类型 类型 服务 OSS 阿里云OSS UPYUN 又拍云 MINIO MinIO HUAWEI_OBS 华为云OBS LOCAL 本地NGINX文件存储 TENCENT_COS 腾讯云COS CTYUN_ZOS 天翼云ZOS OSS通用yaml配置 cdn: oss: name: # 名称 type: # 类型 bucket: uploadUrl: # 上传URL downloadUrl: # 下载URL accessKeyId: accessKeySecret: mainDir: # 主目录 validTime: 3600000 timeout: 600000 active: true referer: localFolderUrl: others: [key]: name: # 名称 type: # 类型 bucket: uploadUrl: # 上传URL downloadUrl: # 下载URL accessKeyId: accessKeySecret: mainDir: # 主目录 validTime: 3600000 timeout: 600000 active: true referer: localFolderUrl: PS:others中使用自定义key来指定OSS服务进行文件上传/下载功能。上传/下载必须匹配,否则无法正常使用。 OSS配置示例 阿里云OSS cdn: oss: name: 阿里云 type: OSS bucket: pamirs(根据实际情况修改) uploadUrl: oss-cn-hangzhou.aliyuncs.com downloadUrl: oss-cn-hangzhou.aliyuncs.com accessKeyId: 你的accessKeyId accessKeySecret: 你的accessKeySecret # 根据实际情况修改 mainDir: upload/ validTime: 3600000 timeout: 600000 active: true imageResizeParameter: referer: 华为云OBS cdn: oss: name: 华为云 type: HUAWEI_OBS bucket: pamirs(根据实际情况修改) uploadUrl: obs.cn-east-2.myhuaweicloud.com downloadUrl: obs.cn-east-2.myhuaweicloud.com accessKeyId: 你的accessKeyId accessKeySecret: 你的accessKeySecret # 根据实际情况修改 mainDir: upload/ validTime: 3600000 timeout: 600000 active: true allowedOrigin: http://192.168.95.31:8888,https://xxxx.xxxxx.com referer: 华为云OBS需要在启动工程增加以下依赖 <okhttp3.version>4.9.3</okhttp3.version> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>${okhttp3.version}</version> </dependency> 注意事项华为云OBS的防盗链配置,仅允许携带特定referer的才可以,而excel导入后端处理的逻辑匿名读的时候是不带referer的,所以会被拒绝 MINIO 文件系统,mino的配置: cdn: oss: name: minio type: MINIO bucket: pamirs(根据实际情况修改) uploadUrl: http://192.168.243.6:32190(根据实际情况修改) downloadUrl: http://192.168.243.6:9000(根据实际情况修改) accessKeyId: 你的accessKeyId accessKeySecret: 你的accessKeySecret # 根据实际情况修改 mainDir: upload/ validTime: 3600000 timeout: 600000 active: true referer: localFolderUrl: MINIO无公网访问地址下OSS的配置方式: https://doc.oinone.top/yun-wei-shi-jian/7112.html 又拍云 cdn: oss: name: 又拍云…

    后端 2023年11月1日
    2.3K00

Leave a Reply

Please Login to Comment