当前位置: 首页 > 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
  • 独家丨申万宏源研究所将迎来新所长:首席策略分析师王胜升任
  • 释新闻|SEVIS是什么?在美留学生遭身份中止意味什么?
  • 大家聊中国式现代化|周冯琦:转角见美,让“绿意”触手可及
  • 伊朗阿巴斯港港口爆炸已致47人受伤
  • 2025年全国贸易摩擦应对工作会议在京召开
  • 胃病、闭经、湿疹、失明:藏在疾病后的情绪问题