4.1.1 模块之yml文件结构详解

本节是对demo的boot工程的application-*.yml文件关于oinone相关配置的扩充讲解,大家可以先通读留个影响,以备不时之需

在基础入门的模块一章中大家构建,并通过启动前后应用,直观地感受到我们自己建的demo模块。在上述过程中想必大家都了解到我们oinone的boot工程是专门用来做应用启动管理,它完全没有任何业务逻辑,它只决定启动哪些模块、启动方式、以及相关配置。它跟Spring Boot的一个普通工程没有什么差异。所有我们只要看application-*.yml文件,oinone提供了哪些特殊配置就能窥探一二。

这里主要介绍pamirs路径下的核心以及常用的配置项

一、pamirs.boot

  1. pamirs.boot.init

    1. 描述:启动加载程序,是否启动元数据、业务数据和基础设施的加载与更新程序,在应用启动时同时对模块进行生命周期管理

    2. true ##标准版,只支持true

  2. pamirs.boot.sync

    1. 描述:同步执行加载程序,启动时对模块进行生命周期管理采用同步方式

    2. true ##标准版,只支持true

  3. pamirs.boot.modules

    a. 描述:启动模块列表。这里只有base模块是必须的。为了匹配我们的前端模版,在demo的例子中加入了其他几个通用业务模块。当然这些通用业务模块也是可以大大降低大家的开发难度以及提升业务系统的设计质量

    b. - base #oinone的基础模块

    c. - common #oinone的一些基础辅助功能

    d. - sequence #序列的能力

    e. - resource #基础资源如

    f. - user #基础用户

    g. - auth #权限

    h. - message #消息

    i. - international #国际化

    j. - business #商业关系

    k. - file #文件,demo里没有默认加入,如果要开发导入导出相关功能,可以对应引入改模块

    l. - …… 还有很多通用业务模块以及这些模块的详细介绍,我们在介绍第六章【oinone的通用能力】的章节去展开

  4. pamirs.boot.mode

    ⅰ. dev:不走缓存,可以直接修改元数据。特别是我们在说页面设计的时候,可以修改base_view表直接生效不需要重启系统

配置举例

pamirs:
    boot:
    init: true
    sync: true
    modules:
      - base
      - common
      - sequence
      - resource
      - user
      - auth
      - message
      - international
      - business
      - demo_core

图4-1-1-1 pamirs.boot.mode配置举例

二、pamirs.boot.profile与pamirs.boot.options

pamirs.boot.option, 在pamirs.boot.options中可以自定义可选项,也可以根据pamirs.boot.profile属性来指定这些可选项,pamirs.boot.profile属性的默认值为CUSTOMIZE。只有pamirs.boot.profile=CUSTOMIZE时,才能在pamirs.boot.options中自定义可选项。

可选项 说明 默认值 AUTO READONLY PACKAGE DDL
reloadModule 是否加载存储在数据库中的模块信息 false true true true true
checkModule 校验依赖模块是否安装 false true true true true
loadMeta 是否扫描包读取模块元数据 true true false true true
reloadMeta 是否加载存储在数据库中元数据 false true true true true
computeMeta 是否重算元数据 true true false true true
editMeta 编辑元数据,是否支持编程式编辑元数据 true true false true true
diffMeta 差量减计算元数据 false true false true false
refreshSessionMeta 刷新元数据缓存 true true true true true
rebuildHttpApi 刷新重建前后端协议 true true true false false
diffTable 差量追踪表结构变更 false true false true false
rebuildTable 更新重建表结构 true true false true false
printDDL 打印重建表结构DDL false false false false true
publishService 发布服务,是否发布远程服务 true true true false false
updateModule 分布式模块管理 false true false true false
updateMeta 初始化与更新元数据,是否将元数据的变更写入数据库 false true false true false
updateData 初始化与更新内置业务数据,是否将内置业务数据的变更写入数据库 true true false true false
params 扩展参数 可自定义 可自定义 可自定义 可自定义 可自定义

表4-1-1-1 pamirs.boot.options列表

可以在启动日志中可查看当前服务启动可选项。

image.png

图4-1-1-2 在启动日志中查看当前服务启动可选项

三、pamirs.meta

  1. pamirs.meta.metaPackages

    1. 描述:自定义元模型的所在包路径。标准版只能是pro.shushi.pamirs.trigger.model
  2. 配置举例

pamirs: 
    meta:
    metaPackages:
      - pro.shushi.pamirs.trigger.model

图4-1-1-3 pamirs.meta配置举例

四、pamirs.framework

  1. pamirs.framework.gateway #graphql的可选项配置

apamirs.framework.gateway.show-doc #是否对外提供gql的scheme文档查询能力,在3.2.1【构建第一个Module】一文中“DemoMoudel的启动”的部分之所以可以用Insomnia开查看后端的文档,就是这里要配置为true

bpamirs.framework.gateway.statistics #用于收集DataLoader执行过程中的状态,比如缓存命中多少次,已经load了多少个对象,有多少次error等

  1. pamirs.framework.hook

    1. pamirs.framework.hook.ignoreAll #默认为false,为true忽略掉所有hook函数

    2. pamirs.framework.hook.excludes #排除掉部分hook函数

  2. pamirs.framework.data #这个经常会使用到,大家一定要了解

    1. pamirs.framework.data.default-ds-key #模块的默认数据库key,对应pamirs.datasource配置

    2. pamirs.framework.data.ds-map #为模块指定数据库key,对应pamirs.datasource配置。在demo中我们如果要为demo_core这个模块配置独立数据库就可以在这里配置如 demo_core: demo,并在pamirs.datasource配置key为demo的数据源

  3. pamirs.framework.system

    1. pamirs.framework.system.system-ds-key #元数据系统对应的数据源,对应pamirs.datasource配置

    2. pamirs.framework.system.system-models #视为元数据模型,一起放到system-ds-key库

  4. 配置举例

pamirs:
  framework:
    system:
      system-ds-key: base
      system-models:
        - base.WorkerNode
    data:
      default-ds-key: pamirs
      ds-map:
        base: base
    gateway:
      statistics: true
      show-doc: true
    #hook 如下配置
    #hook:
      #excludes:
        #- pro.shushi.pamirs.core.common.hook.QueryPageHook4TreeAfter
        #- pro.shushi.pamirs.user.api.hook.UserQueryPageHookAfter
        #- pro.shushi.pamirs.user.api.hook.UserQueryOneHookAfter

图4-1-1-4 pamirs.framework 配置举例

五、pamirs.dialect.ds

  1. 描述:pamirs.datasource中数据源的方言信息,以key为对应。

  2. 子参数有:type(默认:MySQL),version(默认:8.0),majorVersion(默认:8)

  3. 配置举例

pamirs: 
    dialect: #MySQL8.0可不配置
    ds: 
        base: # pamirs.datasource中数据源的方言信息,以key为对应
        type: MySQL
        version: 8.0
        majorVersion: 8
      pamirs: # pamirs.datasource中数据源的方言信息,以key为对应
        type: MySQL
        version: 8.0
        majorVersion: 8

图4-1-1-5 pamirs.dialect.ds配置举例

六、pamirs.datasource

  1. 描述:安装模块所需要的数据源配置

  2. 配置举例

pamirs: 
  datasource:
    pamirs:
      driverClassName: com.mysql.cj.jdbc.Driver
      type: com.alibaba.druid.pool.DruidDataSource
      url: jdbc:mysql://127.0.0.1:3306/demo?useSSL=false&allowPublicKeyRetrieval=true&useServerPrepStmts=true&cachePrepStmts=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&autoReconnect=true&allowMultiQueries=true
      username: root
      password: oinone
      initialSize: 5
      maxActive: 200
      minIdle: 5
      maxWait: 60000
      timeBetweenEvictionRunsMillis: 60000
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      poolPreparedStatements: true
      asyncInit: true
    base:
      driverClassName: com.mysql.cj.jdbc.Driver
      type: com.alibaba.druid.pool.DruidDataSource
      url: jdbc:mysql://127.0.0.1:3306/demo_base?useSSL=false&allowPublicKeyRetrieval=true&useServerPrepStmts=true&cachePrepStmts=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&autoReconnect=true&allowMultiQueries=true
      username: root
      password: oinone
      initialSize: 5
      maxActive: 200
      minIdle: 5
      maxWait: 60000
      timeBetweenEvictionRunsMillis: 60000
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      poolPreparedStatements: true
      asyncInit: true

图4-1-1-6 pamirs.datasource配置举例

七、pamirs.sharding

  1. 描述oinone的分库分表配置,当使用pamirs-trigger-bridge-tbschedule工程开启内置schedule功能时必须配置。

  2. 配置举例 - 参考4.1.24【框架之分库分表】一文。

pamirs: 
  sharding:
    define:
      data-sources:
        ds: pamirs
        pamirsSharding: pamirs #申明pamirsSharding库对应的pamirs数据源
        testShardingDs:        #申明testShardingDs库对应的testShardingDs_0\1数据源
          - testShardingDs_0
          - testShardingDs_1
      models:
        "[trigger.PamirsSchedule]":
          tables: 0..13
        "[demo.ShardingModel]":
          tables: 0..7
          table-separator: _
        "[demo.ShardingModel2]":
          ds-nodes: 0..1       #申明testShardingDs库对应的建库规则
          ds-separator: _
          tables: 0..7
          table-separator: _
    rule:
      pamirsSharding: #配置pamirsSharding库的分库分表规则
        actual-ds:
          - pamirs #申明pamirsSharding库对应的pamirs数据源
        sharding-rules:
          # Configure sharding rule,以下配置跟sharding-jdbc配置一致
          - tables:
              demo_core_sharding_model:
                actualDataNodes: pamirs.demo_core_sharding_model_${0..7}
                tableStrategy:
                  standard:
                    shardingColumn: user_id
                    shardingAlgorithmName: table_inline
            shardingAlgorithms:
              table_inline:
                type: INLINE
                props:
                  algorithm-expression: demo_core_sharding_model_${(Long.valueOf(user_id) % 8)}
        props:
          sql.show: true
      testShardingDs: #配置testShardingDs库的分库分表规则
        actual-ds: #申明testShardingDs库对应的pamirs数据源
          - testShardingDs_0
          - testShardingDs_1
        sharding-rules:
          # Configure sharding rule,以下配置跟sharding-jdbc配置一致
          - tables:
              demo_core_sharding_model2:
                actualDataNodes: testShardingDs_${0..1}.demo_core_sharding_model2_${0..7}
                databaseStrategy:
                  standard:
                    shardingColumn: user_id
                    shardingAlgorithmName: ds_inline
                tableStrategy:
                  standard:
                    shardingColumn: user_id
                    shardingAlgorithmName: table_inline
            shardingAlgorithms:
              table_inline:
                type: INLINE
                props:
                  algorithm-expression: demo_core_sharding_model2_${(Long.valueOf(user_id) % 8)}
              ds_inline:
                type: INLINE
                props:
                  algorithm-expression: testShardingDs_${(Long.valueOf(user_id) % 2)}
        props:
          sql.show: true

图4-1-1-7 pamirs.sharding配置举例

八、pamirs.mapper

  1. 库配置:可以通过YAML的“pamirs.mapper.<global或者ds>”配置项进行库配置。如果未配置,系统会采用默认值
配置项 默认值 描述
databaseFormat %s 库名格式化
tableFormat %s 表名格式化
tablePattern %s 动态表名表达式

表4-1-1-2 库配置

  1. 表配置:可以通过YAML的“pamirs.mapper.<global或者ds>.table-info”配置项或者@Model.Persistence注解进行表配置。注解优先级大于YAML配置文件配置。如果未配置,系统会采用默认值
配置项 默认值 描述
databaseFormat %s 库名格式化
tableFormat %s 表名格式化
tablePattern %s 动态表名表达式

表4-1-1-3 表配置

  1. 配置举例
pamirs: 
    mapper:
    static-model-config-locations:
      - pro.shushi.pamirs
    batch: collectionCommit #batch方法的批量提交模式
    batch-config:
      "[base.Field]":
        write: 2000
      "[base.Function]":
        read: 500
        write: 2000
    global: 
      table-info:
        logic-delete: true
        logic-delete-column: is_deleted
        logic-delete-value: REPLACE(unix_timestamp(NOW(6)),'.','')
        logic-not-delete-value: 0
        optimistic-locker: false
        optimistic-locker-column: opt_version
        key-generator: DISTRIBUTION
      table-pattern: '${module}_%s'
    #可以为指定数据配置
    #ds: 
    #   pamirs:
    #   table-info:
    #      logic-delete: true
    #      logic-delete-column: is_deleted
    #      logic-delete-value: REPLACE(unix_timestamp(NOW(6)),'.','')
    #      logic-not-delete-value: 0
    #      optimistic-locker: false
    #      optimistic-locker-column: opt_version
    #      key-generator: DISTRIBUTION
    #   table-pattern: '${module}_%s'

图4-1-1-8 pamirs.mapper配置举例

九、pamirs.persistence

  1. 描述:自动建库,建表

  2. 配置举例

pamirs: 
  persistence:
    global:
      auto-create-database: true
      auto-create-table: true

图4-1-1-9 pamirs.persistence配置举例

十、pamirs.plus

a. 描述mybatisplus的代理配置

b. 配置举例

pamirs: 
    plus:
    configuration:
      map-underscore-to-camel-case: false
      cache-enabled: false

图4-1-1-10 pamirs.plus配置举例

十一、pamirs.event

a. pamirs.event.enabled:启用RocketMQ功能,不启用的情况下无法使用任何功能,使用详见4.1.21【框架之分布式消息】一文。

b. pamirs.event.rocket-mq.namesrv-addr:RocketMQ连接地址字符串

c. pamirs.event.rocket-mq.aliyun : 阿里云版本适配

d. pamirs.event.schedule.enabled:启动异步任务工,不启用的情况下无法使用任何功能

e. 配置举例

pamirs: 
    event:
    enabled: false
    schedule:
      enabled: false
      ownSign: base
      auto-init: true
      auto-create-config-file: true
    rocket-mq:
      namesrv-addr: 127.0.0.1:9876
      # 标识发送消息和消费消息的机器的IP地址,默认为RemotingUtil.getLocalAddress()
      client-ip:
      # 标识发送消息和消费消息的机器的实例名称地址,默认为DEFAULT
      instance-name:
      # 标识发送消息和消费消息的机器的实例ID,无默认值
      namespace:
      # 为每一个topic添加一个固定前缀
      topic-prefix:
      # 是否启用vip netty通道以发送消息
      vip-channel-enabled: false
      # 是否启用消息轨迹追踪(该属性对于阿里云MQ无效)
      enable-trace: false
      # 消息轨迹追踪的topic名称
      trace-topic-name:
      # Pamirs Event工厂
      event-factory: pro.shushi.pamirs.framework.connectors.event.rocketmq.DefaultRocketMQEventFactory
      # acl配置
      accounts:
        - accessKey: RocketMQ
          secretKey: 12345678
      # 阿里云MQ 相关配置
      aliyun:
        # 使用阿里云MQ
        enabled: false
        # 阿里云MQ AccessKey
        access-key:
        # 阿里云MQ SecretKey
        secret-key:
        # 阿里云MQ InstanceId
        instance-id:
        # 阿里云MQ GroupId
        group-id:

图4-1-1-11 pamirs.event配置举例

十二、pamirs.auth

  1. pamirs.auth.modelFilter:配置模型所有的query方法不需要过权限控制 #下个版本作废,不建议使用

  2. pamirs.auth.funFilter:配置模型的特定query方法不需要过权限控制

  3. 配置举例

pamirs: 
    auth:
    model-filter:
      - user.PamirsUserTransient
      - auth.ResourcePermission
      - auth.AuthGroup
      - auth.AuthRole
      - base.View
      - resource.ResourceCountry
      - pamirs.web.WebMenu
      - pamirs.web.WebRenderTransient
      - pamirs.message.MessageCenter
      - resource.major.ResourceMajorConfig
    fun-filter:
      - namespace: user.PamirsUserTransient
        fun: login #登录
      - namespace: user.PamirsUserTransient
        fun: loginByVerificationCode #手机号验证码登录
      - namespace: user.PamirsUserTransient
        fun: loginVerificationCode #手机号登录验证码
      - namespace: user.PamirsUserTransient
        fun: signUpVerificationCode #手机号注册验证码

图4-1-1-12 pamirs.auth配置举例

十三、pamirs.file

  1. 描述:导入导出相关配置,使用详见6.1【文件导入导出】一文

  2. 配置举例

pamirs:
    file:
    auto-upload-logo: false
    import-property:
      default-each-import: false # 默认逐行导入
      max-error-length: 100 # 默认最大收集错误行数
    export-property:
      default-clear-export-style: false # 默认使用csv导出
      csv-max-support-length: 1000000 # csv导出最大支持1000000行

#文件导入导出还依赖CDN相关配置
cdn:
  oss:
    name: 阿里云
    type: OSS
    bucket: pamirs
    uploadUrl: oss-cn-hangzhou.aliyuncs.com
    downloadUrl: oss-cn-hangzhou.aliyuncs.com
    accessKeyId: #自行修改值
    accessKeySecret: #自行修改值
    mainDir: upload/demo/test/ 
    validTime: 3600000
    timeout: 600000
    active: true
    referer:
    localFolderUrl:

图4-1-1-13 pamirs.file配置举例

十四、pamirs.channel

  1. 描述:

  2. 配置举例

pamris: 
    channel:
    zkServers: 127.0.0.1:2181

图4-1-1-14 pamirs.channel配置举例

十五、pamirs.zookeeper

  1. 描述:zk配置的代理

  2. 配置举例

pamris:
    zookeeper:
    zkConnectString: 127.0.0.1:2181
    zkSessionTimeout: 60000
    rootPath: /demo

图4-1-1-15 pamirs.zookeeper配置举例

十六、pamirs.eip

  1. 描述:集成相关配置,使用详见集成平台一节

  2. 配置举例

pamirs: 
    eip:
    open-api:
      enabled: false
      standalone:
        host: 127.0.0.1
        port: 8081
        aes-key:
      routes:
        pamirs:
          host: 127.0.0.1
          port: 8081
          aes-key:

图4-1-1-16 pamirs.eip配置举例

高德地图接口的key配置

pamirs: 
    eip:
    map:
        gd:
        key: xxxxxx

图4-1-1-17高德地图接口的key配置

十七、pamirs.elastic

a. 描述:es搜索引擎地址 ,使用详见4.1.25【框架之搜索引擎】一节

b. 配置举例

pamirs: 
    elastic:
    url: 127.0.0.1:9200

图4-1-1-18 pamirs.elastic配置举例

十八、pamirs.load

oinone的默认模式下元数据都是以DB为准,当A模块依赖B模块,A与B模块不在没有部署在一起同时元数据的Base库也不是一个,那么A的元数据库怎么没有B模型,会导致系统出现模型定义找不到的错误。那么则需要A启动内存元数据模式,因为在A的元数据计算的时,因为A依赖B模块,同时有B的接口包,在内存中会扫描B的模型。所以我们要启动内存模式。应对分布式开发场景设计,更多请详见4.4【oinone的分布式体验进阶

pamirs:
  load:
    sessionMode: true

图4-1-1-19 pamirs.load配置举例

Oinone社区 作者:史, 昂原创文章,如若转载,请注明出处:https://doc.oinone.top/oio4/9276.html

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

Like (0)
史, 昂's avatar史, 昂数式管理员
Previous 2024年5月23日 am9:02
Next 2024年5月23日

相关推荐

  • 5.6 商业支撑之商品域

    一、基础介绍 当业务在线化后,用于内部管理的产品主数据,叠加一堆销售属性变成了商品被推倒了前台,成为导购链路中最最重要的信息载体。看似最基础和最简单的商品模块也有很多门道。主要集中在以下几个方面: 商品的属性如何管理、呈现、参与导购(类目、搜索的过滤条件) 如何解决固定不变的内部管理需求与基于销售特性长期变化的运营需求之间的矛盾 在多渠道情况渠道商品,如何映射到实际sku进行履约 二、模型介绍 图5-6-1 模型介绍 类目属性,解决“商品的属性如何管理、呈现、参与导购(类目、搜索的过滤条件)” 前后台类目设计,解决“如何解决固定不变的内部管理需求与基于销售特性长期变化的运营需求之间的矛盾” 销售Sku和库存Sku设计,解决“在多渠道情况渠道商品,如何映射到实际sku进行履约” 要把这些问题搞清楚,得先把名词统一下: 领域 名称 oinone的定义 说明 举例 平台运营视角 Spu Product –>Spu2.1.9 –> 3.0.0 SPU(Standard Product Unit):标准化产品单元。SPU是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性 iPhone X可以确定一个产品 后台类目 后台类目(Category) 商品分类分级管理,以及规范该类目下公共属性可以分为普通属性、销售属性 比如类目:3c数码/手机销售属性:内存大小、颜色等普通属性:分辨率 前台类目 前台类目(FrontCategory) 平台导购类目 通过前台类目关联后台类目或后台类目属性,用于满足运营需求 大体上SPU处于最上层、Item属于下一级,而SKU属于最低一层。SPU是平台层面,Item是商家层面,SKU是商家的Item确定销售属性SPU非必须,在平台类交易中,平台方为了规范商家发布商品信息,进行统一运营时需要 商家销售视角 Item 渠道商品(Item) 简单来说是:SPU加上归属商家、以及商家自有的价格与描述 商家A的iPhone X Sku 销售Sku(SaleSku) SKU=Stock Keeping Unit(库存保有单位)。是对每一个产品和服务的唯一标示符,该系统的使用SKU的值根于数据管理,使公司能够跟踪系统,如仓库和零售商店或产品的库存情况。 iPhone X 64G 银色 则是一个SKU。 店铺类目 ShopCategory 商家店铺导购类目 在平台类电商,商家都会有自己独立的店铺主页,商家类目跟前台类目作用类似,只是局限影响范围为商家店铺内 销售SKU中会有一个InvSkuCode来关联InventorySku,比如:品牌上在不同渠道(淘宝、京东、自建电商)中会有不同的销售SKU,在从渠道同步销售SKU会根据外部code 商家管理视角 产品或库存Sku InventorySku 跟销售领域的sku的定义类似,但销售领域是为了规范购买行为,这里规范企业内部管理。 iPhone X 64G 银色 组合Sku InventorySkuComposition 空调有内外机组合而成,这就是一个组合sku 产品分类 ProductKind 企业内部管理划分 商品系列 ItemSeries 指互相关联或相似的产品,是按照一定的分类标准对企业生产经营的全部产品进行划分的结果。一个产品系列内往往包括多个产品项目。产品系列的划分标准有产品功能、消费上的连带性、面向的顾客群、分销渠道、价格范围等 存货类别 StorageKind 为了反映存货的组成内容,正确计算产品的生产成本以及销售成本,会计上必须对存货进行科学地分类,按存货的不同类别进行核算 表5-6-1 各领域名称说明

    2024年5月23日
    2.2K00
  • 5.2 CDM之工程模式

    两种工程模式介绍 oinone推荐的两种工程模式都保留互联网特性,如跟业务无关的基础平台还是采用平台化思路建设。二种侧重点差异如下 第一种:比较适合企业采用多供应商联合开发场景,先以业务区分,各个业务线有独立的领域平台,最大限度保持不同业务线的独立性,有利于各个业务线独立发展(目前oinone上层星空系列产品采用这种工程模式,因为我们期望的时候帮助企业构建软件生态,必然要考虑不同供应商联合开发场景) 第二种:比较接近传统互联网架构,先按平台领域区分,如商品领域:商品平台做总工程,但里面按业务区分模块分子工程来保持业务相互独立,相对于第一种把领域的代码放一起,带来好处强化大家思考模型通用性。但不适用于跨公司主体间配合。 图5-2-1 Oinone-CDM的两种工程模式 注意事项: oinone兼容传统互联网架构 不管哪种模式,都需要解决CDM的维护问题 CDM维护的常见问题: Q:CDM层缺少模型怎么办? A:CDM层模型是逐步完善和丰富的。如果是特定业务自己需要的模型,这类模型无通用性。则加到自己的工程中;如果是通用的,则架构组确定是否需要纳入到CDM。 Q:CDM层已有的模型缺少字段怎么办? A:CDM层模型的字段也是逐步完善和丰富的,通用的字段在架构组确定后也会被吸收进来 Q:CDM层不同业务线相互影响怎么办? A:扩展字段最好带上自有前缀标志,如果觉得通用则提交架构组走模型缺少字段加入 Q:CDM层某模型新增加了的字段,但原先业务线已经加了相同含义字段 A:业务线可以把自己的字段related到CDM增加的新字段,并做数据迁移

    2024年5月23日
    2.2K00
  • 6.2 集成平台(改)

    企业在数字化转型过程中内外部集成是一个必然需求、也是趋势 集成的诉求主要来自两个方面:1.企业的数字化改造是由外而内逐步进行的(内部异构集成)、2.企业数字化方向是朝越来越开放的方向发展(外部平台、工具集成)。总的来说企业在数字化转型过程中内外部集成是一个必然需求、也是趋势。所以我们不能简单地去理解做个API对接就结束了,而是要统一规划构建成企业的集成门户对API定义,安全、控制、记录等做全方位管理。oinone在下个版本规则中也纳入了基于集成平台之上做产品化配置的需求 概述 pamirs-eip为平台提供企业集成门户的相关功能,如请求外部接口使用的【集成接口】和对外开放被其他系统请求调用的【开放接口】功能。在请求外部接口时,还支持了多个接口调用(路由定义)、分页控制(paging)、增量控制(incremental)等功能。 准备工作 Step1 POM与模块依赖 pamirs-demo-api 和 pamirs-second-api 的pom文件中引入pamirs-eip2-api包依赖 <dependency> <groupId>pro.shushi.pamirs.core</groupId> <artifactId>pamirs-eip2-api</artifactId> </dependency> DemoModule和SecondModule 增加对EipModule的依赖 @Module(dependencies = {EipModule.MODULE_MODULE}) pamirs-demo-boot和pamirs-second-boot工程的pom文件中引入pamirs-eip2-core包依赖 <dependency> <groupId>pro.shushi.pamirs.core</groupId> <artifactId>pamirs-eip2-core</artifactId> </dependency> Step2 yaml配置文件参考 pamirs-demo-boot和pamirs-second-boot工程的application-dev.yml文件中增加配置pamirs.boot.modules增加eip,即在启动模块中增加eip模块 pamirs: boot: modules: – eip pamirs-demo-boot和pamirs-second-boot工程的application-dev.yml文件中增加eip模块的数据源与路由配置 pamirs: framework: data: ds-map: eip: eip datasource: eip: driverClassName: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource url: jdbc:mysql://127.0.0.1:3306/eip_v3?useSSL=false&allowPublicKeyRetrieval=true&useServerPrepStmts=true&cachePrepStmts=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&autoReconnect=true&allowMultiQueries=true username: root password: oinone initialSize: 5 maxActive: 200 minIdle: 5 maxWait: 60000 timeBetweenEvictionRunsMillis: 60000 testWhileIdle: true testOnBorrow: false testOnReturn: false poolPreparedStatements: true asyncInit: true pamirs-demo-boot工程的application-dev.yml文件中修改eip的配置 pamirs: eip: open-api: enabled: false pamirs-second-boot工程的application-dev.yml文件中修改eip的配置 pamirs: eip: enabled: true open-api: enabled: true route: host: 127.0.0.1 port: 8094 aes-key: Nj5Thnxz4rV8Yy1FLGA2hUym3RepB8MKgafEaYC4GKo= 注: hosts配置在远程调用时不能使用127.0.0.1,可配置为0.0.0.0进行自动识别。若自动识别仍无法访问,请准确配置其他已知的可访问IP地址。 aes-key:用下面代码生成 附录:AES Key生成 pro.shushi.pamirs.core.common.EncryptHelper加解密帮助类,默认支持AES、RSA类型的数据加解密方法,也可自定义其他类型的加解密方法。 System.out.println(EncryptHelper.getKey(EncryptHelper.getAESKey())); Step3 在pamirs-second-api新建一个SessionTenantApi实现类 只要在我们公共的jar包中构建类似DemoSessionTenant类就可以了,之所以要构建SessionTenantApi实现类是因为EIP是以租户信息做路由的。所以这里我们写死返回一个“pamirs”租户就好了。 记得要重新mvn install second工程,再刷新demo工程 package pro.shushi.pamirs.second.api.tenant; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import pro.shushi.pamirs.framework.session.tenant.api.SessionTenantApi; import pro.shushi.pamirs.meta.api.core.session.SessionClearApi; import pro.shushi.pamirs.meta.common.spi.SPI; @Order(99) @Component @SPI.Service public class DemoSessionTenant implements SessionTenantApi, SessionClearApi { public String getTenant() { return "pamirs"; } public void setTenant(String tenant) { } public void clear() { } } 开放接口(举例) Step1 用于演示的模型定义 package pro.shushi.pamirs.second.api.model; import pro.shushi.pamirs.meta.annotation.Field; import pro.shushi.pamirs.meta.annotation.Model; import pro.shushi.pamirs.meta.base.IdModel; @Model.model(TestOpenApiModel.MODEL_MODEL) @Model(displayName = "演示开放接口模型") public class TestOpenApiModel extends IdModel { public static final String MODEL_MODEL = "demo.second.TestOpenApiModel"; @Field.String @Field(displayName = "名称") private…

    2024年5月23日
    1.9K00
  • 1.2 Oinone的致敬

    占在巨人的肩膀上,天地孤影任我行 1.2.1 数字化时代Oinone接棒Odoo 在数字化时代,中国在互联网化的应用、技术的领先毋庸置疑,但在软件的工程化、产品化输出方面仍有许多改进的空间。这时,我了解到了Odoo——一个国外非常优秀的开源ERP厂商,全球ERP用户数量排名第一,百级别员工服务全球客户。Odoo的工程化能力和商业模式深深吸引了我,它是软件行业典型的产品制胜和长期主义者的胜利之一。 在2019年,也就是数式刚成立的时候,我们跟很多投资人聊起公司的对标是谁,我不是要成为数字化时代的SAP,而是要成为Odoo。然而,当时大部分国内投资人并不了解Odoo,尽管它已经是全球最大的ERP厂商之一,因为当时Odoo还没有明确的估值。直到2021年7月份获得Summit Partners的2.15亿美元投资后,Odoo才正式成为IT独角兽企业。 Odoo对我们提供了极大的启示,因此我们致敬Odoo,同样选择开源,每年对产品进行升级发布。如今,Odoo15已经发布,而Oinone也已推出第三版,恰好相隔12年,这是一个时代的接棒,从信息化升迁至数字化。 1.2.2Oinone与Odoo的不同之处 技术方面的不同 在技术上,Oinone和Odoo有相同之处,也有不同之处。它们都基于元数据驱动的软件系统,但是它们在如何让元数据运作的机制上存在巨大差异。Odoo是企业管理场景的单体应用,而Oinone则致力于企业商业场景的云原生应用。因此,它们在技术栈的选择、前后端协议设计、架构设计等方面存在差异。 场景方面的不同 在场景上,Oinone和Odoo呈现许多差异。相对于SAP这些老牌ERP厂商,Odoo算是西方在企业级软件领域的后起之秀,其软件构建方式、开源模式和管理理念在国外取得了非凡的成就。然而,在国内,Odoo并没有那么成功或者并没有那么知名。国内做Odoo的伙伴普遍认为,Odoo与中国用户的交互风格不符,收费模式设计以及外汇管制使商业活动受到限制,本地化服务不到位,国内生态没有形成合力,伙伴们交流合作都非常少。另外,Odoo在场景方面主要围绕内部流程管理,与国内老牌ERP如用友、金蝶重叠,市场竞争激烈。相比之下,Oinone看准了企业视角由内部管理转向业务在线、生态在线(协同)带来的新变化,聚焦新场景,利用云、端等新技术的发展,从企业内外部协同入手,以业务在线驱动企业管理流程升级。它先立足于国内,做好国内生态服务,再着眼未来的国际化。 无代码设计器的定位 在无代码设计器的定位上,Odoo的无代码设计器是一个非常轻量的辅助工具,因为ERP场景下,一个企业实施完以后基本几年不会变,流程稳定度非常高。相反,Oinone为适应"企业业务在线化后,所有的业务变化与创新都需要通过系统来触达上下游,从而敏捷响应快速创新"的时代背景,重点打造出五大设计器。(如下图1-2所示)。 图1-2 Oinone五大设计器 在数字化时代中国软件将接棒世界,而Oinone也要接棒Odoo,把数字化业务与技术的最佳实践赋能给企业,帮助企业数字化转型不走弯路!

    2024年5月23日
    2.4K00
  • 4.2.5 框架之网络请求-Request

    在中后台业务场景中,大部分的请求时候是可以被枚举的,比如创建、删除、更新、查询。在上文中,我们讲了httpClient如何自定义请求,来实现自己的业务诉求。本文中讲到的Request是离业务更近一步的封装,他提供了开箱即用的API,比如insertOne、updateOne,它是基于HttpClient做的二次封装,当你熟悉Request时,在中后台的业务场景中,所有的业务接口自定义将事半功倍。 一、Request详细介绍 元数据-model 获取模型实例 import { getModel } from '@kunlun/dependencies' getModel('modelName'); 图4-2-5-1 获取模型实例 清除所有缓存的模型 import { cleanModelCache } from '@kunlun/dependencies' cleanModelCache(); 图4-2-5-2 清除所有缓存的模型 元数据-module 获取应用实例,包含应用入口和菜单 import { queryModuleByName } from '@kunlun/dependencies' queryModuleByName('moduleName') 图4-2-5-3 获取应用实例 查询当前用户所有的应用 import { loadModules } from '@kunlun/dependencies' loadModules() 图4-2-5-4 查询当前用户所有的应用 query 分页查询 import { queryPage } from '@kunlun/dependencies' queryPage(modelName, { pageSize: 15, // 一次查询几条 currentPage, 1, // 当前页码 condition?: '' // 查询条件 maxDepth?: 1, // 查几层模型出来,如果有2,会把所有查询字段的关系字段都查出来 sort?: []; // 排序规则 }, fields, variables, context) 图4-2-5-5 分页查询 自定义分页查询-可自定义后端接口查询数据 import { customQueryPage } from '@kunlun/dependencies' customQueryPage(modelName, methodName, { pageSize: 15, // 一次查询几条 currentPage, 1, // 当前页码 condition?: '' // 查询条件 maxDepth?: 1, // 查几层模型出来,如果有2,会把所有查询字段的关系字段都查出来 sort?: []; // 排序规则 }, fields, variables, context) 图4-2-5-6 自定义分页查询 查询一条-根据params匹配出一条数据 import { queryOne } from '@kunlun/dependencies' customQueryPage(modelName, params, fields, variables, context) 图4-2-5-7 根据params匹配出一条数据 自定义查询 import { customQuery } from '@kunlun/dependencies' customQuery(methodName, modelName, record, fields, variables, context) 图4-2-5-8 自定义查询 update import { updateOne } from '@kunlun/dependencies' updateOne(modelName, record, fields, variables, context) 图4-2-5-9 update insert import { insertOne } from '@kunlun/dependencies' insertOne(modelName, record, fields, variables, context) 图4-2-5-10 insert delete import { deleteOne } from '@kunlun/dependencies'…

    2024年5月23日
    1.8K00

Leave a Reply

Please Login to Comment