样例说明

通过本样例,您可以了解:

  1. 本地业务配置的存放以及格式
  2. 业务配置SPI机制,可基于SPI自定义业务配置加载方式

环境准备

您需要:

  1. 用于运行程序的IDE(集成开发环境),比如IntelliJ IDEA 或其类似工具;
  2. Java™ Development Kit (JDK),需要JDK 8及以上版本
  3. 已经完成 Lattice – 注册业务配置 样例

版本依赖

<dependency>
      <groupId>org.hiforce.lattice</groupId>
      <artifactId>lattice-model</artifactId>
      <version>1.0.13</version>
</dependency>
<dependency>
      <groupId>org.hiforce.lattice</groupId>
      <artifactId>lattice-runtime</artifactId>
      <version>1.0.13</version>
</dependency>
<dependency>
      <groupId>org.hiforce.lattice</groupId>
      <artifactId>lattice-load-config-res</artifactId>
      <version>1.0.5</version>
</dependency>

Step 1:定义业务配置JSON文件

Lattice – 注册业务配置 章节中,我们用程序方式定义了业务配置过程。不用程序,我们也可以用JSON文件定义业务配置,比如上个例子中的业务配置,用JSON定义如下:

{
  "bizCode": "business.b",
  "priority": 1000,
  "products": [
    {
      "code": "lattice.productGroupBuyProduct"
    }
  ],
  "extensions": [
    {
      "extCode": "OrderLinePriceExt.EXT_ORDER_LINE_CUSTOM_UNIT_PRICE",
      "priorities": [
        {
          "code": "lattice.productGroupBuyProduct",
          "type": "PRODUCT"
        },
        {
          "code": "business.b",
          "type": "BUSINESS"
        }
      ]
    }
  ]
}

这个JSON文本就是简单的将BusinessConfig对象序列化成JSON文本格式。

这个内容拷贝到文件里,并放到 resource/lattice 目录下,文件名以 lattice-{业务身份}.json 格式进行命名。

Step 2:样例演示

这次样例很简单,直接启动Lattice,不需要用代码方式进行业务配置申明,直接模拟一次业务调用过程。代码如下:

public class AutoLoadBusinessConfigSample {

    public static void main(String[] args) {
        Lattice.getInstance().start();

        System.out.println("---------------------------------------");
        LatticeOverlayProductSample.doBusiness("groupBy");
        System.out.println("---------------------------------------");
    }
}

运行结果如下:

---------------------------------------
GroupBuyProduct effect status:true
[Business B] overlay product unit price: 700
---------------------------------------

业务配置加载扩展SPI

本样例中,我们引入了 lattice-load-config-res 这个工具包。这个工具包中的本地业务配置加载器,实现了BusinessConfigLoadSpi接口,如下:

@AutoService(BusinessConfigLoadSpi.class)
public class BizConfigResourceLoader implements BusinessConfigLoadSpi {
    ......
}

同理,我们也可以写一个配置读取器实现 BusinessConfigLoadSpi 接口,进而可以做到业务配置在容器启动时从远程配置库中读取并加载,比如使用阿里云OSS、ACM等等。 这个可以作为小作业留给大家。

样例代码

样例代码可以通过访问:https://github.com/hiforce/lattice-sample/tree/main/lattice-load-business-config 获取