MCPcopy Index your code
hub / github.com/Parcheng/combine-java

github.com/Parcheng/combine-java @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
3,973 symbols 8,910 edges 880 files 608 documented · 15%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

介绍

combine-java 是一个轻量级低代码框架,在框架中一切的功能皆为组件,您可以自由将各种组件组合在一起进行编排,实现自己的业务功能。

推荐JDK版本:11+

工程结构:

combine-java-core:核心模块,所有的核心功能都在这里

combine-java-components:系统内置组件模块(POM工程)

combine-java-spring-web:内置了 SpringBoot 的快速使用模块,可以直接启动,提供了 API 相关的页面和接口

系统内置组模块(combine-java-components)包含:

combine-java-components-base: 系统内置组件 - 基础组件包

combine-java-components-gui: 系统内置组件 - SWING视图组件包

combine-java-components-html: 系统内置组件 - HTML组件包

combine-java-components-email: 系统内置组件 - Email组件包

combine-java-components-mysql: 系统内置组件 - MySql数据库组件包

combine-java-components-redis: 系统内置组件 - Redis组件包

combine-java-components-rocketmq: 系统内置组件 - RocketMQ组件包

combine-java-components-rabbitmq: 系统内置组件 - RabbitMQ组件包

combine-java-components-gitlab: Gitlab组件 - Gitlab组件包

本地启动并访问 API:

启动 combine-java-spring-web 工程

本地访问 API 地址:http://127.0.0.1:8888/combine/page/api.html

流程(FLOW)

流程:每个流程都有一个KEY(可以理解为请求接口的地址),并由多个组件组成(通过编排组件的执行过程来实现接口的业务逻辑,并返回结果)

组件:业务功能的最小配置单元,基于输入数据来实现某个功能并将结果输出,它由初始化配置类、逻辑配置类、组件实现类组成

通过引入 combine-java-components 包,可以使用很多系统内置的公共组件

也可以通过 combine-java-core 核心包提供 SPI 机制自定义实现自己的组件

组件(component)包含三部分:

初始化配置:相当于同类型组件的全局配置,如:MySql 执行组件的数据库连接配置就是初始化配置

逻辑配置:相当于组件独立配置,会直接影响组件的执行结果,如:MySql 执行组件要执行的具体SQL和增删改查就是逻辑配置

组件执行结果:是组件直接完成后输出的结果

如何使用?

通过 POM 引用 combine-java-spring-web

```$xml combine-java-spring-web com.parch.combine 1.0.0




编写一个组件Service,继承核心提供的 AbstractCombineWebService:


```$java
@Service
public class CombineJavaService extends AbstractCombineJavaHandler {
    public CombineWebService() {
        // 这里传入传入全局配置的JSON文件(配置项可参考API)
        super("config.json");
    }

    // ... 可以写一些自定义方法 ...
}

编写一个 Controller

其中 call 方法是常规接口,uploadAndCall 方法是包含文件上传的接口,page 方法是访问页面

```$java @RestController @RequestMapping("/") public class CombineTestController {

@Autowired
private CombineJavaService combineWebService;

@PostMapping("flow/{domain}/{function}")
public FlowResult call(@RequestBody Map<String, Object> params, @PathVariable(name = "domain") String domain, @PathVariable(name = "function") String function, HttpServletRequest request, HttpServletResponse response) {
    return combineWebService.call(params, domain, function, request, response);
}

@PostMapping("file-flow/{domain}/{function}")
public FlowResult uploadAndCall(@RequestParam("params") String paramJson, @RequestParam("file") MultipartFile file, @PathVariable(name = "domain") String domain, @PathVariable(name = "function") String function, HttpServletRequest request, HttpServletResponse response) throws IOException {
    return combineWebService.uploadAndCall(paramJson, file, domain, function, request, response);
}

}




编写配置文件 config.json 放在 resource 根目录下:


```$json
{
  "initConfigs": [
    "configs/api_flow.json",    -- 系统内置的流程配置API(可以不引入)
    "configs/ui_api_flow.json"  -- 系统内置的UI配置API(可以不引入)
    "configs/my_business.json"  -- 自己的业务流程配置(可以根据功能模块搞成多个文件)
  ],
  "initFlows": [
    "$init"   -- 自己的业务功能需要项目启动时执行的流程(如:建MySql表,初始化缓存等)
  ],
  "openRegisterConfig": false,  -- 是否开放注册,true 表示可以在项目运行期间动态注册流程
  "requestIdKey": "requestID",  -- 全局 requestId 的 key,方便在日志中进行功能的全链路追踪
  "printComponentResult": true  -- 是否打印组件的执行结果
  -- 其他配置详见API
}

编写流程配置文件 configs/my_business.json 放在 resource 根目录下:

通过在该文件编写组件配置,来实现自己的业务功能,详见API

自定义组件

通过 SPI 加载

在 resource/META_INFO/services 下创建文件 com.parch.combine.core.component.spi.AbstractGetComponents

com.test.components.GetMyComponents

创建 GetMyComponents 类:

提示:这里创建的是组件包,一个组件包里会包含多个组件,系统会在加载时会自动扫描 GetMyComponents 类的所在包,获取该包下的所有组件

注意:这个类必须要继承 AbsGetComponents

public class GetMyComponents extends AbsGetComponents {
    public GetMyComponents() {
        super("my", "我的组件包", GetMyComponents.class);
    }
}

创建自定义的组件1: My1Component 类

提示:系统是根据 Component 直接来识别组件,该注解定义了组件的类型KEY、组件名称、组件的初始化配置和逻辑配置类

@Component(key = "test1", name = "我的组件1", logicConfigClass = My1LogicConfig.class, initConfigClass = My1InitConfig.class)
@ComponentResult(name = "我的组件1执行结果")
public class My1Component extends AbsComponent<My1InitConfig, My1LogicConfig> {

    public DataEnumGetComponent() {
        super(My1InitConfig.class, My1LogicConfig.class);
    }

    @Override
    public FlowResult execute() {
        My1LogicConfig logicConfig = getLogicConfig();
        My1InitConfig initConfig = getInitConfig();

        try {
            ... ...
            return FlowResult.success(result);
        } catch (Exception e) {
            ComponentErrorHandler.print(My1ErrorEnum.FAIL, e);
            return FlowResult.fail(My1ErrorEnum.FAIL);
        }
    }
}

创建 My1Component 的初始化配置类和逻辑配置类

```$xslt public interface My1LogicConfig extends ILogicConfig {

// 使用 Field 相关注解,可以在访问 API 页面时生成自定义组件的描述信息
@Field(key = "key", name = "XXXX", type = FieldTypeEnum.TEXT, isRequired = true)
@FieldDesc("XXXXXXXXXXXXXXXXXX")
String key();

}

public interface My1InitConfig extends IInitConfig { ... 自定义配置项 ... } ```

建议和反馈

您有任何问题请反馈到我的邮箱:p568866418@163.com 感谢支持!

Extension points exported contracts — how you extend this code

GetDataFunction (Interface)
获取数据函数 @param 新值 [17 implementers]
combine-java-core/src/main/java/com/parch/combine/core/component/tools/variable/DataFindHandler.java
ICustomFormat (Interface)
自定义格式化函数 [18 implementers]
combine-java-components/combine-java-components-base/src/main/java/com/parch/combine/data/base/general/format/func/ICustomFormat.java
IGUIElementCallFunction (Interface)
(no doc) [7 implementers]
combine-java-components/combine-java-components-gui/src/main/java/com/parch/combine/gui/core/call/IGUIElementCallFunction.java
IConfigGet (Interface)
(no doc) [17 implementers]
combine-java-components/combine-java-components-html/src/main/java/com/parch/combine/html/common/cache/base/IConfigGet.java
RocketMQInitConfig (Interface)
(no doc)
combine-java-components/combine-java-components-rocketmq/src/main/java/com/parch/combine/rocketmq/base/RocketMQInitConfig.java
RedisInitConfig (Interface)
(no doc)
combine-java-components/combine-java-components-redis/src/main/java/com/parch/combine/redis/base/RedisInitConfig.java
MailInitConfig (Interface)
(no doc)
combine-java-components/combine-java-components-email/src/main/java/com/parch/combine/mail/base/MailInitConfig.java
RabbitMQLogicConfig (Interface)
(no doc)
combine-java-components/combine-java-components-rabbitmq/src/main/java/com/parch/combine/rabbitmq/base/RabbitMQLogicConfig.java

Core symbols most depended-on inside this repo

push
called by 187
combine-java-components/combine-java-components-base/src/main/java/com/parch/combine/tool/base/event/EventSubjectHandler.java
success
called by 185
combine-java-core/src/main/java/com/parch/combine/core/component/vo/ComponentDataResult.java
getLogicConfig
called by 184
combine-java-core/src/main/java/com/parch/combine/core/component/base/AbstractComponent.java
put
called by 174
combine-java-core/src/main/java/com/parch/combine/core/common/util/json/JsonUtil.java
build
called by 164
combine-java-components/combine-java-components-gui/src/main/java/com/parch/combine/gui/core/element/IGUIElement.java
isEmpty
called by 148
combine-java-core/src/main/java/com/parch/combine/core/common/util/CheckEmptyUtil.java
print
called by 138
combine-java-core/src/main/java/com/parch/combine/core/component/tools/PrintErrorHelper.java
get
called by 118
combine-java-components/combine-java-components-html/src/main/java/com/parch/combine/html/common/cache/base/IConfigGet.java

Shape

Method 2,894
Class 425
Interface 414
Enum 124
Function 116

Languages

Java97%
TypeScript3%

Modules by API surface

combine-java-core/src/main/java/com/parch/combine/core/component/context/ScopeContext.java45 symbols
combine-java-components/combine-java-components-gui/src/main/java/com/parch/combine/gui/core/style/config/ElementBorderConfig.java30 symbols
combine-java-core/src/main/java/com/parch/combine/core/component/settings/config/PropertySetting.java29 symbols
combine-java-core/src/main/java/com/parch/combine/core/component/context/ComponentContext.java26 symbols
combine-java-core/src/main/java/com/parch/combine/core/component/vo/ComponentDataResult.java25 symbols
combine-java-core/src/main/java/com/parch/combine/core/component/context/ComponentContextHandler.java24 symbols
combine-java-core/src/main/java/com/parch/combine/core/BaseCombineJavaFunction.java22 symbols
combine-java-core/src/main/java/com/parch/combine/core/component/settings/config/ComponentSetting.java21 symbols
combine-java-components/combine-java-components-base/src/main/java/com/parch/combine/system/base/test/SystemTestLogicConfig.java20 symbols
combine-java-core/src/main/java/com/parch/combine/core/component/base/AbstractComponent.java19 symbols
combine-java-components/combine-java-components-html/src/main/java/com/parch/combine/html/base/element/NavBarElementLogicConfig.java19 symbols
combine-java-core/src/main/java/com/parch/combine/core/component/vo/FlowResult.java18 symbols

Datastores touched

(mysql)Database · 1 repos
mydatabaseDatabase · 1 repos

For agents

$ claude mcp add combine-java \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact