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
流程:每个流程都有一个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 感谢支持!
$ claude mcp add combine-java \
-- python -m otcore.mcp_server <graph>