当前位置: 首页 > news >正文

【通过Groovy去热修复线上逻辑】1.执行线上数据修复 2.写工具

1.执行groovy // 实际执行的话, 我们是通过vue提交的

http://localhost:8080/groovy/execute?script=import com.example.groovytest.controller.LoginController;  LoginController.num=251222

还有个技巧: 而执行执行的,则是: 写的工具什么的,想直接使用, 无需打jar包。

2.查询 // 可以看到,每次执行完groovy脚本,逻辑就修改了

http://localhost:8080/login/getNum

3.GroovyService

package com.example.groovytest.service;

import groovy.lang.GroovyClassLoader;
import groovy.lang.GroovyObject;
import org.springframework.stereotype.Service;

@Service
public class GroovyService {

    public void executeGroovyScript(String script) {
        try{
            GroovyClassLoader loader = new GroovyClassLoader();

            Class<?> groovyClass = loader.parseClass(script);
            GroovyObject groovyObject = (GroovyObject) groovyClass.getDeclaredConstructor().newInstance();
            groovyObject.invokeMethod("run", null);
        }catch (Exception e){
            throw new RuntimeException(e);
        }
    }
}

4.LoginController

package com.example.groovytest.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/login")
public class LoginController {

    public static volatile int num = 111;

    @RequestMapping("/getNum")
    public String getNum() {
        return String.valueOf(num);
    }
}

5.GroovyController.java

package com.example.groovytest.controller;

import com.example.groovytest.service.GroovyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/groovy")
public class GroovyController {

    @Autowired
    private GroovyService groovyService;

    @RequestMapping("/execute")
    public String execute(String script) {
        try {
            groovyService.executeGroovyScript(script);
        } catch (Exception e) {
            return "fail:" + e.getMessage();
        }
        return "success";
    }
}

总结:

线上的话,我们可以选择都有哪些服务器执行这些逻辑修复,从而快速执行Groovy脚本进行修复即可!!!

相关文章:

  • 仿函数 VS 函数指针实现回调
  • RAG现有技术方案
  • 【Golang】defer与recover的组合使用
  • PyCharm中使用pip安装PyTorch(从0开始仅需两步)
  • 设计和布局硬件电路是嵌入式系统开发的重要环节
  • 3.22日西南竞篮,NBA勇士VS老鹰,赛前数据前瞻
  • LeetCode 2643.一最多的行:模拟(更新答案)
  • Wispr Flow,AI语言转文字工具
  • 鸿蒙NEXT开发案例:程序员计算器
  • 使用若依AI生成springBoot的前后端分离版本
  • 为WordPress自定义一个留言板
  • 【QA】QT编译过程和C++编译过程的区别?
  • Flutter Dart 异步支持全面解析
  • Rocky9.5基于sealos快速部署k8s集群
  • C++Primer学习(13.2 拷贝控制和资源管理)
  • 搜广推校招面经五十六
  • 基于linux平台的C语言入门教程(4)输入输出
  • MySQL表的增加、查询的基础操作
  • 解决用户同时登录轮询获取用户信息错乱,使用WebSocket和Server-Sent Events (SSE)
  • Vue 3 项目实现国际化指南 i18n
  • 国内锂矿“双雄”开局业绩PK:从巨亏中崛起,或深陷泥淖谋求多元转型
  • 看纪录片抵学分,贺桂梅:纪录片是对抗低质碎片信息的好媒介
  • 特朗普称加总理将很快访美,白宫:不影响将加拿大打造成“第51个州”计划
  • “译通天下·言立寰宇”:华东师大翻译家的精神传承
  • 《探秘海昏侯国》数字沉浸特展亮相首届江西文化旅游产业博览交易会
  • 美国务院宣布新一轮与伊朗相关的制裁