io.github.ZhongFuCheng3y:hades-nacos-starter

Parent pom providing dependency and plugin management for applications built with Maven


License
Apache-2.0

Documentation

作者 Gitee Starts Gitee Starts issue-open issue-close issue-close issue-close issue-close jdk版本 maven版本 ORM框架 ORM框架 ORM框架

hades 介绍

项目背景:业务开发逻辑变更频繁,一点小的修改都要发布系统,灵活度不够。对于一些非核心流程又频繁改动的部分是否可以用动态脚本替代?

核心功能:Java应用无须发布上下线,动态变更业务逻辑,对象实例均交由Spring管理

不适用场景:脚本依赖运行环境不存在的SDK和对象

hades 使用手册

引入maven依赖

<!--如果你用apollo,则引入该dependency,建议用最新的版本-->
<dependency>
    <groupId>io.github.ZhongFuCheng3y</groupId>
    <artifactId>hades-apollo-starter</artifactId>
    <version>1.0.4</version>
</dependency>

<!--如果你用nacos,则引入该dependency,建议用最新的版本-->
<dependency>
    <groupId>io.github.ZhongFuCheng3y</groupId>
    <artifactId>hades-nacos-starter</artifactId>
    <version>1.0.4</version>
</dependency>

配置信息

在接入hades的项目配置文件中(如:application.properties)填写hades相关的配置信息

nacos分布式配置中心示例:

nacos.config.server-addr=austin-nacos:8848
nacos.config.username=nacos
nacos.config.password=nacos
nacos.config.namespace=hades
nacos.config.enabled=true

# hades param you should write
hades.enabled=true
hades.config-name=hades

apollo分布式配置中心示例:

app.id=hades
apollo.bootstrap.enabled=true
apollo.meta=austin-apollo

# hades param you should write
hades.enabled=true
hades.config-name=hades

(可选)部署后端和前端

目前后端部署仅支持使用nacos的小伙伴,hades有对应配置页面,将hades的前端和后端部署起来会方便使用些。

后端是SpringBoot应用,入口:com.java3y.hades.HadesApplication,前端是amis低代码平台,点击前端Git仓库进行部署。

后端的模块是在hades-web,对应的配置文件在application.properties,按自身情况自行修改:

# hades param you should write
hades.enabled=true
hades.config-name=hades

# nacos
nacos.config.enabled=true
nacos.config.server-addr=austin-nacos:8848
nacos.config.username=nacos
nacos.config.password=nacos
nacos.config.namespace=hades

1、可选择直接添加Java代码,注意不要用lomboklambda,groovy是不认的。

2、如果是轻量级的逻辑,也可以直接在界面上配置逻辑,比如对字符串和数值的判断。当提交了之后,会根据条件自动生成对应Java代码,注册到iOC容器中

3、添加规则完后,能在规则列表中看到对应内容,并将其脚本注册Spring iOC容器中,供客户端使用

不部署后端和前端

完全可以只通过分布式配置中心的后台,手动去创建配置,来实现效果。步骤如下:

1、在对应的分布式配置中心创建hades主配置(配置名是hades.config-name的值),配置内容如下:

{
    "instanceNames": [
        "com.java3y.hades.domain.HadesParam"
    ],
    "updateTime": "2023年3月20日10:26:0131"
}

注:hades所有的配置内容在分布式配置中心默认均为txt格式。hades会监听以上配置的变更,当新增或修改了Groovy脚本时,需要手动更新该配置。

2、新建Groovy脚本,apollo需要跟主配置在同appId下,nacos在同namespace下。Groovy脚本跟Java代码99%相同(不写lambdalambda即可)

使用客户端

客户端使用HadesClient获取对象或执行方法

@RequestMapping("/test")
private void test() {
    // 获取脚本对象,用接口接收
    SendSmsService sendSmsService = hadesClient.getInterfaceByName("com.java3y.hades.example.apollo.demo.TencentSmsService");
    sendSmsService.send();

    // 获取GroovyObject对象
    GroovyObject groovyObject = hadesClient.getGroovyObjectByName("com.java3y.hades.example.apollo.demo.TencentSmsService");
    groovyObject.invokeMethod("send", null);
    log.info("groovy object:{}", groovyObject);

    // 直接执行脚本对应的方法,得到返回值
    Object execute = hadesClient.execute("com.java3y.hades.example.apollo.demo.TencentSmsService", "send", null);
    System.out.println("result" + execute);
}