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

浙江做网站的公司wordpress编辑我

浙江做网站的公司,wordpress编辑我,网站备案 互联网信息查询,wordpress 技术类模板文章目录 1. 常见的几种实现代码热更新的几种方式对于开发环境我们可以使用部署环境1. 使用 Arthas 的 redefine 命令来加载新的 class 文件2. 利用 URLClassLoader 动态加载3. 通过Java的Instrumentation API 也是可以实现的 2. 实现1. ClassScanner扫描目录和加载类2. 定时任…

文章目录

  • 1. 常见的几种实现代码热更新的几种方式
      • 对于开发环境我们可以使用
      • 部署环境
        • 1. 使用 Arthas 的 redefine 命令来加载新的 class 文件
        • 2. 利用 URLClassLoader 动态加载
        • 3. 通过Java的Instrumentation API 也是可以实现的
  • 2. 实现
    • 1. ClassScanner扫描目录和加载类
    • 2. 定时任务定时加载指定路径下的类,使用上面的ClassScanner:
    • 3. 在Spring配置中启用定时任务并添加ClassScanner:

在这里插入图片描述

1. 常见的几种实现代码热更新的几种方式

对于开发环境我们可以使用

  1. Spring Boot Devtools
  2. JRebel 插件
  3. IDEA的Debug 模式的热更新

部署环境

但是对于生产环境我们想要更新替换某个类 则无法使用上面几种方式,目前我知道的有如下几种

1. 使用 Arthas 的 redefine 命令来加载新的 class 文件
```bash
$ redefine /home/admin/User.class
```
其中,`/home/admin/User.class` 是你上传的新 class 文件的路径。

Arthas 会立即加载新的 class 文件,你的应用会立即使用新的代码逻辑。值得注意的是,
这种方式只适合修改方法内的代码逻辑,不适合增加方法或者修改方法签名,否则可能会引发 NoSuchMethodErrorClassFormatError 等错误。
这种方式只是临时更新 JVM 中的字节码,如果应用重启,修改的内容会丢失。因为这种方式可能带来一些风险,所以在生产环境中使用时需要谨慎。

2. 利用 URLClassLoader 动态加载

今天我们利用URLClassLoader 写一个简单的工具程序,内置到我们的应用中,方便我们在不停服务的情况下快速在发布环境验证我们的功能或者修复bug.

3. 通过Java的Instrumentation API 也是可以实现的

Instrumentation是Java语言中的一个API,它提供了一种在程序运行时监测、管理和修改Java字节码的能力。它允许开发者通过编程方式访问和操作类定义、方法和对象,从而实现各种动态的、非侵入式的操作。

这个不是我们今天的重点,我们今天通过URLClassLoader 和Spring 集成实现一个热加载工具。

2. 实现

1. ClassScanner扫描目录和加载类

import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.context.ApplicationContext;public class ClassScanner {private final String classPath;private final ApplicationContext applicationContext;public ClassScanner(String classPath, ApplicationContext applicationContext) {this.classPath = classPath;this.applicationContext = applicationContext;}public void scanAndLoad() throws Exception {// 获取并遍历目录下的所有文件File dir = new File(classPath);File[] files = dir.listFiles();if (files != null) {for (File file : files) {// 只处理 .class 文件if (file.isFile() && file.getName().endsWith(".class")) {// 加载类String className = file.getName().substring(0, file.getName().length() - 6);URL[] urls = new URL[]{dir.toURI().toURL()};try (URLClassLoader loader = new URLClassLoader(urls)) {Class<?> clazz = loader.loadClass(className);// 将类的实例添加到 Spring 容器AutowireCapableBeanFactory beanFactory = applicationContext.getAutowireCapableBeanFactory();beanFactory.autowireBean(clazz.newInstance());}}}}}
}

2. 定时任务定时加载指定路径下的类,使用上面的ClassScanner:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;@Component
public class ScannerTask {private final ClassScanner classScanner;@Autowiredpublic ScannerTask(ClassScanner classScanner) {this.classScanner = classScanner;}@Scheduled(fixedRate = 5000)public void scan() throws Exception {classScanner.scanAndLoad();}
}

3. 在Spring配置中启用定时任务并添加ClassScanner:

每隔5秒,Spring就会执行一次ScannerTask.scan()方法,扫描目录并加载找到的类。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableScheduling;
import org.springframework.context.ApplicationContext;@Configuration
@EnableScheduling
public class AppConfig {@Autowiredprivate ApplicationContext applicationContext;@Beanpublic ClassScanner classScanner() {return new ClassScanner("/tmp/classes", applicationContext);}
}
http://www.yayakq.cn/news/933186/

相关文章:

  • 厦门企业网站设计公司上海seo优化外包公司
  • 鲜花网站建设的利息分析公众号文章导入wordpress
  • 建设网站需要的编程鲜花网站建设教程
  • 网站管理员在哪里青园网站建设
  • 代做网站公司有哪些北方工业大学网站建设
  • 网站建设4435网站素材下载
  • 云南seo简单整站优化微信小程序开发者文档
  • 电商设计灵感网站互联网营销策划案
  • 聚美优品网站建设wordpress 按分类显示图片
  • 南昌行业网站建设电子商务公司是做什么的
  • 我的网站设计联盟注册网站要语音验证码的有哪些
  • 甘肃白银住房建设局网站设计理论网站
  • 网站开发工作总结论文云南省建设厅网站处长
  • 网站seo新手网站上传照片失败
  • h5 php mysql网站开发专门做私人定制旅游的网站
  • 外链发布网站网页制作图片居中对齐
  • 招聘网站建设保定网站改版中
  • 做网站推广要多少钱世界500强企业名录
  • 口碑好的聊城网站建设河间市做网站价格
  • 自建公司网站免费杂志模板
  • 上海企业网站制作报价关键词分析软件
  • 福建微网站建设价格wordpress设置邮件注册
  • 营销型网站建设设计服务wordpress图片广告代码
  • 陕西网站建设哪家强沈阳网站建设服务器
  • 网站信用建设应该用什么技术网站模板 单页
  • 临夏金属装饰网站建设0791网站建设
  • 郑州网站推广效果怎么把本地wordpress上传
  • 机械做网站百度电话查询
  • 网站静态网架公司是做什么的
  • 珠海网站外包台州营销型网站建设