PHP开发者必看(PHP 8.4 Accessors实战指南):告别手动getter/setter

第一章:PHP 8.4 Accessors特性概述

PHP 8.4 引入了全新的 Accessors 特性,为类属性的读取与赋值提供了更安全、简洁的语法支持。这一特性允许开发者在不编写显式 getter 和 setter 方法的情况下,定义属性的访问逻辑,从而提升代码可读性和封装性。

核心功能说明

Accessors 允许在属性声明时使用 getset 修饰符,自动触发自定义逻辑。该机制替代了部分对魔法方法 __get()__set() 的依赖,使类型提示和执行控制更加直观。 例如,以下代码展示了如何使用 Accessor 确保年龄字段始终为非负整数:
// 定义一个使用 Accessor 的 Person 类
class Person {
    public int $age {
        get => $this->_age ?? 0;
        set => $this->_age = $value < 0 ? 0 : $value;
    }
}
在上述代码中,当尝试设置 $age 为负数时,setter 会自动将其重置为 0,确保数据一致性。

使用优势

  • 减少模板代码,无需手动编写 getter/setter 方法
  • 增强类型安全与数据验证能力
  • 支持延迟初始化和计算属性逻辑

适用场景对比

场景传统方式Accessors 方案
属性验证需手动实现 setter 方法直接在 set 中内联逻辑
默认值处理依赖构造函数或 __get通过 get 表达式实现惰性加载
该特性特别适用于实体类、DTO(数据传输对象)以及需要强数据约束的领域模型设计中,显著提升开发效率与代码可维护性。

第二章:Accessors核心语法与原理剖析

2.1 理解属性访问器的基本结构与声明方式

属性访问器用于控制类中字段的读取和修改行为,主要分为 getter 和 setter 两种形式。它们封装了私有字段的访问逻辑,实现数据的可控暴露。
基本语法结构

type User struct {
    name string
}

func (u *User) GetName() string {
    return u.name
}

func (u *User) SetName(name string) {
    if name != "" {
        u.name = name
    }
}
上述代码定义了 GetName 作为 getter,SetName 作为 setter。通过方法封装,可在赋值前加入校验逻辑(如非空判断),确保数据完整性。
使用场景与优势
  • 实现字段的只读或只写访问控制
  • 在获取或设置值时触发额外逻辑(如日志、通知)
  • 隐藏内部数据结构,提升封装性

2.2 get与set访问器的执行机制深入解析

访问器基础结构
在JavaScript中,get与set访问器用于拦截对象属性的读取和赋值操作。它们定义在对象的属性描述符中,通过Object.defineProperty实现。

const obj = {
  _value: 42,
  get value() {
    console.log('读取value');
    return this._value;
  },
  set value(val) {
    console.log('设置value为', val);
    this._value = val;
  }
};
上述代码中,访问obj.value时触发get方法,赋值时调用set方法,实现对属性操作的精确控制。
执行流程分析
当属性被访问时,JavaScript引擎首先检查是否存在对应的get函数;若存在,则调用该函数并返回其返回值。赋值时则查找set函数,并将传入值作为参数执行。
  • get无参数,必须返回一个值
  • set接收唯一参数,表示要赋的值
  • 两者不可同时为数据属性

2.3 初始化器(initializer)与延迟加载的应用场景

在复杂系统中,对象的初始化开销可能较高。使用初始化器结合延迟加载(Lazy Initialization)可有效提升启动性能。
延迟加载的核心逻辑
通过同步机制确保资源仅在首次访问时创建:
var once sync.Once
var instance *Service

func GetInstance() *Service {
    once.Do(func() {
        instance = &Service{Config: loadHeavyConfig()}
    })
    return instance
}
上述代码利用 sync.Once 保证服务实例仅初始化一次。loadHeavyConfig() 可能涉及网络请求或文件读取,延迟至实际需要时执行,减少启动时间。
典型应用场景
  • 单例模式中的资源懒加载
  • 大型配置或缓存数据的按需构建
  • 插件系统的模块初始化

2.4 访问器中的类型约束与返回值处理

在设计访问器时,类型约束确保了数据的一致性和安全性。通过泛型与接口结合,可实现灵活且类型安全的访问逻辑。
泛型访问器的类型约束
使用 Go 泛型可对访问器施加类型限制:
func GetValue[T any](v T) T {
    return v
}
该函数接受任意类型 T,并在返回时保持类型不变,编译期即可验证类型正确性。
返回值的统一处理
为避免空值或类型断言错误,推荐封装返回结构:
字段类型说明
Datainterface{}实际数据
Validbool是否有效
此模式提升调用方处理健壮性。

2.5 性能影响分析:Accessors背后的运行开销

访问器方法的调用代价
在现代编程语言中,属性访问常通过getter和setter实现。虽然语法简洁,但频繁调用会引入额外的方法调用开销,尤其在高频读写场景下显著影响性能。

func (p *Person) GetName() string {
    return p.name // 额外的函数调用与栈帧开销
}
上述代码每次调用 GetName() 都需压栈、跳转、返回,相比直接字段访问,CPU指令数增加约3-5倍。
内联优化的边界
JIT或编译器可能对简单accessor进行内联优化,但一旦包含逻辑判断或同步操作,则难以优化。
场景是否可内联相对开销
纯字段读取~1.1x
带锁的访问器~5x

第三章:从传统模式到Accessors的迁移实践

3.1 手动getter/setter的痛点与重构动机

在早期面向对象开发中,字段封装常依赖手动编写的getter/setter方法。这种方式虽保障了访问控制,却带来了显著的代码冗余。
重复代码泛滥
每个属性都需要成对编写读写方法,例如:

public class User {
    private String name;
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
}
上述模式在多个类中反复出现,增加了维护成本。
可维护性下降
  • 字段变更需同步修改多处方法
  • 逻辑分散,难以统一处理校验或日志
  • 违反DRY原则(Don't Repeat Yourself)
重构动机
现代开发框架支持注解或代理机制自动生成访问器,减少样板代码,提升开发效率与系统一致性。

3.2 逐步替换现有类属性的迁移策略

在系统演进过程中,直接修改核心类属性可能导致兼容性问题。采用逐步迁移策略可有效降低风险。
双写机制保障数据一致性
在旧属性保留的同时引入新属性,通过双写确保数据同步:
class User:
    def __init__(self, name):
        self._name = name        # 旧属性
        self.full_name = name    # 新属性

    def update_name(self, new_name):
        self._name = new_name    # 双写旧属性
        self.full_name = new_name  # 双写新属性
该模式允许新旧逻辑并行运行,便于灰度验证。
迁移阶段划分
  • 第一阶段:新增属性并双写
  • 第二阶段:批量同步历史数据
  • 第三阶段:切换读取路径至新属性
  • 第四阶段:下线旧属性

3.3 兼容性考量与版本升级注意事项

在系统演进过程中,版本升级常伴随接口变更与数据格式调整,需重点关注向后兼容性。建议采用语义化版本控制(SemVer),明确标识重大变更、新增功能与修复补丁。
版本兼容策略
  • 保留旧接口至少两个发布周期,并添加 Deprecated 标记
  • 使用中间件或适配层转换新旧数据结构
  • 通过特征开关(Feature Toggle)实现灰度发布
数据库迁移示例
-- 新增字段并设置默认值,避免破坏现有读写
ALTER TABLE users 
ADD COLUMN status INT DEFAULT 1 COMMENT '0:inactive, 1:active';
该语句通过添加默认值确保历史数据兼容,同时不影响新业务逻辑对状态字段的依赖。
客户端升级风险表
风险项影响范围应对措施
API参数移除旧版APP崩溃服务端兼容处理
响应结构变更解析失败引入版本路由

第四章:典型应用场景与高级技巧

4.1 数据验证与自动格式化在Accessors中的实现

在现代数据访问层设计中,Accessors 不仅负责字段的读写操作,还承担数据验证与自动格式化的职责。通过封装业务规则,确保数据一致性与完整性。
验证逻辑嵌入Accessor
在 getter 和 setter 中加入条件判断,可有效拦截非法值。例如,在 Go 结构体中实现用户年龄的合法范围校验:

func (u *User) SetAge(age int) error {
    if age < 0 || age > 150 {
        return fmt.Errorf("age out of valid range")
    }
    u.age = age
    return nil
}
该方法在赋值前进行边界检查,防止异常数据写入。
自动格式化输出
Getter 可对原始数据进行标准化处理。如手机号自动添加国家区号:
  • 输入:13812345678
  • 输出:+86-13812345678
此机制提升数据展示一致性,降低前端处理负担。

4.2 结合Attribute实现日志记录与监控

在现代应用程序中,通过自定义Attribute结合AOP(面向切面编程)可实现方法级别的日志记录与运行时监控。开发者可定义`LogAttribute`特性,标记需要监控的方法,在运行时通过拦截机制自动记录执行时间、参数和异常信息。
自定义日志Attribute示例
[AttributeUsage(AttributeTargets.Method)]
public class LogAttribute : Attribute
{
    public string Action { get; set; }
    public LogAttribute(string action)
    {
        Action = action;
    }
}
该代码定义了一个用于标记方法的特性,Action属性描述操作类型,如“用户登录”或“订单创建”,便于后续分类处理日志。
监控数据采集流程
1. 方法调用 → 2. 检查是否存在LogAttribute → 3. 记录入参与时间戳 → 4. 执行原方法 → 5. 捕获结果或异常 → 6. 上报监控系统
通过此机制,业务代码无需嵌入日志语句,保持整洁的同时实现统一监控。

4.3 只读属性与计算属性的优雅封装

在现代前端开发中,合理封装只读属性与计算属性能显著提升数据模型的可维护性。通过代理或响应式系统,可将内部状态与对外暴露的计算结果解耦。
响应式计算属性示例
class User {
  constructor(firstName, lastName) {
    this._firstName = firstName;
    this._lastName = lastName;
  }

  get fullName() {
    return `${this._firstName} ${this._lastName}`;
  }
}
上述代码中,fullName 是一个只读计算属性,依赖于私有字段 _firstName_lastName,避免了冗余状态存储。
访问控制优势
  • 防止外部直接修改计算结果
  • 统一数据来源,确保一致性
  • 支持缓存机制,优化性能

4.4 防止循环调用与常见陷阱规避

在微服务架构中,服务间通过API频繁交互,若设计不当易引发循环调用,导致请求堆积甚至系统雪崩。
典型循环调用场景
例如服务A调用服务B,而B的处理逻辑又触发对A的反向调用。此类问题常因事件驱动设计或回调机制不严谨造成。
规避策略与代码实践
使用请求上下文标记(如trace ID)识别调用链深度,超出阈值则中断:
func CheckCallDepth(ctx context.Context) error {
    depth := ctx.Value("call_depth").(int)
    if depth > 5 {
        return fmt.Errorf("circular call detected: depth %d", depth)
    }
    return nil
}
该函数在中间件中前置执行,限制调用层级。参数说明:`ctx`携带调用上下文,`call_depth`由上游递增传递。
  • 引入异步解耦,避免同步阻塞式回调
  • 定义清晰的服务边界与职责划分
  • 利用分布式追踪工具监控调用链路

第五章:未来展望与生态演进

随着云原生技术的持续演进,服务网格(Service Mesh)正逐步从基础设施层向平台化能力延伸。越来越多企业开始将安全、可观测性与策略控制下沉至数据平面,实现跨运行时的一致性治理。
多运行时协同架构
现代微服务架构已不再局限于单一语言或框架,多运行时环境成为常态。通过统一的 Sidecar 代理,不同语言编写的服务可共享相同的通信协议与安全策略。例如,在混合部署 Go 和 Java 服务时,可使用 Istio 的 mTLS 自动加密通信:
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: default
spec:
  mtls:
    mode: STRICT
边缘计算与服务网格融合
在边缘场景中,网络不稳定和设备异构性带来挑战。OpenYurt 和 KubeEdge 结合服务网格能力,实现了边缘节点的流量自治与局部熔断。某智能制造客户通过在边缘集群部署轻量级代理,将关键控制链路延迟降低 40%。
策略即代码的实践路径
企业正在采用 GitOps 模式管理服务治理策略。以下为典型 CI/CD 流程中的策略检查环节:
  • 开发者提交 VirtualService 配置到 Git 仓库
  • CI 系统调用 OPA(Open Policy Agent)验证路由规则合规性
  • 通过 Argo CD 自动同步至目标集群
  • 监控系统实时捕获配置生效状态
指标Mesh 前Mesh 后
平均故障恢复时间28 分钟3 分钟
跨服务认证复杂度
应用 A Sidecar
hdfs namenode -format WARNING: /opt/soft/hadoop/logs does not exist. Creating. 2025-10-10 20:41:30,169 INFO namenode.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode STARTUP_MSG: host = master/192.168.56.130 STARTUP_MSG: args = [-format] STARTUP_MSG: version = 3.1.3 STARTUP_MSG: classpath = /opt/soft/hadoop/etc/hadoop:/opt/soft/hadoop/share/hadoop/common/lib/accessors-smart-1.2.jar:/opt/soft/hadoop/share/hadoop/common/lib/animal-sniffer-annotations-1.17.jar:/opt/soft/hadoop/share/hadoop/common/lib/asm-5.0.4.jar:/opt/soft/hadoop/share/hadoop/common/lib/audience-annotations-0.5.0.jar:/opt/soft/hadoop/share/hadoop/common/lib/avro-1.7.7.jar:/opt/soft/hadoop/share/hadoop/common/lib/checker-qual-2.5.2.jar:/opt/soft/hadoop/share/hadoop/common/lib/commons-beanutils-1.9.3.jar:/opt/soft/hadoop/share/hadoop/common/lib/commons-cli-1.2.jar:/opt/soft/hadoop/share/hadoop/common/lib/commons-codec-1.11.jar:/opt/soft/hadoop/share/hadoop/common/lib/commons-collections-3.2.2.jar:/opt/soft/hadoop/share/hadoop/common/lib/commons-compress-1.18.jar:/opt/soft/hadoop/share/hadoop/common/lib/commons-configuration2-2.1.1.jar:/opt/soft/hadoop/share/hadoop/common/lib/commons-io-2.5.jar:/opt/soft/hadoop/share/hadoop/common/lib/commons-lang-2.6.jar:/opt/soft/hadoop/share/hadoop/common/lib/commons-lang3-3.4.jar:/opt/soft/hadoop/share/hadoop/common/lib/commons-logging-1.1.3.jar:/opt/soft/hadoop/share/hadoop/common/lib/commons-math3-3.1.1.jar:/opt/soft/hadoop/share/hadoop/common/lib/commons-net-3.6.jar:/opt/soft/hadoop/share/hadoop/common/lib/curator-client-2.13.0.jar:/opt/soft/hadoop/share/hadoop/common/lib/curator-framework-2.13.0.jar:/opt/soft/hadoop/share/hadoop/common/lib/curator-recipes-2.13.0.jar:/opt/soft/hadoop/share/hadoop/common/lib/error_prone_annotations-2.2.0.jar:/opt/soft/hadoop/share/hadoop/common/lib/failureaccess-1.0.jar:/opt/soft/hadoop/share/hadoop/common/lib/gson-2.2.4.jar:/opt/soft/hadoop/share/hadoop/common/lib/guava-27.0-jre.jar:/opt/soft/hadoop/share/hadoop/common/lib/hadoop-annotations-3.1.3.jar:/opt/soft/hadoop/share/hadoop/common/lib/hadoop-auth-3.1.3.jar:/opt/soft/hadoop/share/hadoop/common/lib/htrace-core4-4.1.0-incubating.jar:/opt/soft/hadoop/share/hadoop/common/lib/httpclient-4.5.2.jar:/opt/soft/hadoop/share/hadoop/common/lib/httpcore-4.4.4.jar:/opt/soft/hadoop/share/hadoop/common/lib/j2objc-annotations-1.1.jar:/opt/soft/hadoop/share/hadoop/common/lib/jackson-annotations-2.7.8.jar:/opt/soft/hadoop/share/hadoop/common/lib/jackson-core-2.7.8.jar:/opt/soft/hadoop/share/hadoop/common/lib/jackson-core-asl-1.9.13.jar:/opt/soft/hadoop/share/hadoop/common/lib/jackson-databind-2.7.8.jar:/opt/soft/hadoop/share/hadoop/common/lib/jackson-jaxrs-1.9.13.jar:/opt/soft/hadoop/share/hadoop/common/lib/jackson-mapper-asl-1.9.13.jar:/opt/soft/hadoop/share/hadoop/common/lib/jackson-xc-1.9.13.jar:/opt/soft/hadoop/share/hadoop/common/lib/javax.servlet-api-3.1.0.jar:/opt/soft/hadoop/share/hadoop/common/lib/jaxb-api-2.2.11.jar:/opt/soft/hadoop/share/hadoop/common/lib/jaxb-impl-2.2.3-1.jar:/opt/soft/hadoop/share/hadoop/common/lib/jcip-annotations-1.0-1.jar:/opt/soft/hadoop/share/hadoop/common/lib/jersey-core-1.19.jar:/opt/soft/hadoop/share/hadoop/common/lib/jersey-json-1.19.jar:/opt/soft/hadoop/share/hadoop/common/lib/jersey-server-1.19.jar:/opt/soft/hadoop/share/hadoop/common/lib/jersey-servlet-1.19.jar:/opt/soft/hadoop/share/hadoop/common/lib/jettison-1.1.jar:/opt/soft/hadoop/share/hadoop/common/lib/jetty-http-9.3.24.v20180605.jar:/opt/soft/hadoop/share/hadoop/common/lib/jetty-io-9.3.24.v20180605.jar:/opt/soft/hadoop/share/hadoop/common/lib/jetty-security-9.3.24.v20180605.jar:/opt/soft/hadoop/share/hadoop/common/lib/jetty-server-9.3.24.v20180605.jar:/opt/soft/hadoop/share/hadoop/common/lib/jetty-servlet-9.3.24.v20180605.jar:/opt/soft/hadoop/share/hadoop/common/lib/jetty-util-9.3.24.v20180605.jar:/opt/soft/hadoop/share/hadoop/common/lib/jetty-webapp-9.3.24.v20180605.jar:/opt/soft/hadoop/share/hadoop/common/lib/jetty-xml-9.3.24.v20180605.jar:/opt/soft/hadoop/share/hadoop/common/lib/jsch-0.1.54.jar:/opt/soft/hadoop/share/hadoop/common/lib/json-smart-2.3.jar:/opt/soft/hadoop/share/hadoop/common/lib/jsp-api-2.1.jar:/opt/soft/hadoop/share/hadoop/common/lib/jsr305-3.0.0.jar:/opt/soft/hadoop/share/hadoop/common/lib/jsr311-api-1.1.1.jar:/opt/soft/hadoop/share/hadoop/common/lib/kerb-admin-1.0.1.jar:/opt/soft/hadoop/share/hadoop/common/lib/kerb-client-1.0.1.jar:/opt/soft/hadoop/share/hadoop/common/lib/kerb-common-1.0.1.jar:/opt/soft/hadoop/share/hadoop/common/lib/kerb-core-1.0.1.jar:/opt/soft/hadoop/share/hadoop/common/lib/kerb-crypto-1.0.1.jar:/opt/soft/hadoop/share/hadoop/common/lib/kerb-identity-1.0.1.jar:/opt/soft/hadoop/share/hadoop/common/lib/kerb-server-1.0.1.jar:/opt/soft/hadoop/share/hadoop/common/lib/kerb-simplekdc-1.0.1.jar:/opt/soft/hadoop/share/hadoop/common/lib/kerb-util-1.0.1.jar:/opt/soft/hadoop/share/hadoop/common/lib/kerby-asn1-1.0.1.jar:/opt/soft/hadoop/share/hadoop/common/lib/kerby-config-1.0.1.jar:/opt/soft/hadoop/share/hadoop/common/lib/kerby-pkix-1.0.1.jar:/opt/soft/hadoop/share/hadoop/common/lib/kerby-util-1.0.1.jar:/opt/soft/hadoop/share/hadoop/common/lib/kerby-xdr-1.0.1.jar:/opt/soft/hadoop/share/hadoop/common/lib/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar:/opt/soft/hadoop/share/hadoop/common/lib/log4j-1.2.17.jar:/opt/soft/hadoop/share/hadoop/common/lib/netty-3.10.5.Final.jar:/opt/soft/hadoop/share/hadoop/common/lib/nimbus-jose-jwt-4.41.1.jar:/opt/soft/hadoop/share/hadoop/common/lib/paranamer-2.3.jar:/opt/soft/hadoop/share/hadoop/common/lib/protobuf-java-2.5.0.jar:/opt/soft/hadoop/share/hadoop/common/lib/re2j-1.1.jar:/opt/soft/hadoop/share/hadoop/common/lib/slf4j-api-1.7.25.jar:/opt/soft/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar:/opt/soft/hadoop/share/hadoop/common/lib/snappy-java-1.0.5.jar:/opt/soft/hadoop/share/hadoop/common/lib/stax2-api-3.1.4.jar:/opt/soft/hadoop/share/hadoop/common/lib/token-provider-1.0.1.jar:/opt/soft/hadoop/share/hadoop/common/lib/woodstox-core-5.0.3.jar:/opt/soft/hadoop/share/hadoop/common/lib/zookeeper-3.4.13.jar:/opt/soft/hadoop/share/hadoop/common/lib/jul-to-slf4j-1.7.25.jar:/opt/soft/hadoop/share/hadoop/common/lib/metrics-core-3.2.4.jar:/opt/soft/hadoop/share/hadoop/common/hadoop-common-3.1.3-tests.jar:/opt/soft/hadoop/share/hadoop/common/hadoop-common-3.1.3.jar:/opt/soft/hadoop/share/hadoop/common/hadoop-nfs-3.1.3.jar:/opt/soft/hadoop/share/hadoop/common/hadoop-kms-3.1.3.jar:/opt/soft/hadoop/share/hadoop/hdfs:/opt/soft/hadoop/share/hadoop/hdfs/lib/commons-daemon-1.0.13.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/jetty-util-ajax-9.3.24.v20180605.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/leveldbjni-all-1.8.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/netty-all-4.0.52.Final.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/okhttp-2.7.5.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/okio-1.6.0.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/jersey-servlet-1.19.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/jersey-json-1.19.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/hadoop-auth-3.1.3.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/commons-codec-1.11.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/log4j-1.2.17.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/httpclient-4.5.2.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/httpcore-4.4.4.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/commons-logging-1.1.3.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/nimbus-jose-jwt-4.41.1.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/jcip-annotations-1.0-1.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/json-smart-2.3.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/accessors-smart-1.2.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/asm-5.0.4.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/zookeeper-3.4.13.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/audience-annotations-0.5.0.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/netty-3.10.5.Final.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/curator-framework-2.13.0.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/curator-client-2.13.0.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/guava-27.0-jre.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/failureaccess-1.0.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/jsr305-3.0.0.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/checker-qual-2.5.2.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/error_prone_annotations-2.2.0.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/j2objc-annotations-1.1.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/animal-sniffer-annotations-1.17.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/kerb-simplekdc-1.0.1.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/kerb-client-1.0.1.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/kerby-config-1.0.1.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/kerb-core-1.0.1.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/kerby-pkix-1.0.1.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/kerby-asn1-1.0.1.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/kerby-util-1.0.1.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/kerb-common-1.0.1.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/kerb-crypto-1.0.1.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/commons-io-2.5.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/kerb-util-1.0.1.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/token-provider-1.0.1.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/kerb-admin-1.0.1.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/kerb-server-1.0.1.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/kerb-identity-1.0.1.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/kerby-xdr-1.0.1.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/jersey-core-1.19.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/jsr311-api-1.1.1.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/jersey-server-1.19.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/javax.servlet-api-3.1.0.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/json-simple-1.1.1.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/jetty-server-9.3.24.v20180605.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/jetty-http-9.3.24.v20180605.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/jetty-util-9.3.24.v20180605.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/jetty-io-9.3.24.v20180605.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/jetty-webapp-9.3.24.v20180605.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/jetty-xml-9.3.24.v20180605.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/jetty-servlet-9.3.24.v20180605.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/jetty-security-9.3.24.v20180605.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/hadoop-annotations-3.1.3.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/commons-cli-1.2.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/commons-math3-3.1.1.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/commons-net-3.6.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/commons-collections-3.2.2.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/jettison-1.1.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/jaxb-impl-2.2.3-1.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/jaxb-api-2.2.11.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/jackson-core-asl-1.9.13.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/jackson-mapper-asl-1.9.13.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/jackson-jaxrs-1.9.13.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/jackson-xc-1.9.13.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/commons-lang-2.6.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/commons-beanutils-1.9.3.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/commons-configuration2-2.1.1.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/commons-lang3-3.4.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/avro-1.7.7.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/paranamer-2.3.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/snappy-java-1.0.5.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/commons-compress-1.18.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/re2j-1.1.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/protobuf-java-2.5.0.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/gson-2.2.4.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/jsch-0.1.54.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/curator-recipes-2.13.0.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/htrace-core4-4.1.0-incubating.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/jackson-databind-2.7.8.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/jackson-annotations-2.7.8.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/jackson-core-2.7.8.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/stax2-api-3.1.4.jar:/opt/soft/hadoop/share/hadoop/hdfs/lib/woodstox-core-5.0.3.jar:/opt/soft/hadoop/share/hadoop/hdfs/hadoop-hdfs-3.1.3-tests.jar:/opt/soft/hadoop/share/hadoop/hdfs/hadoop-hdfs-3.1.3.jar:/opt/soft/hadoop/share/hadoop/hdfs/hadoop-hdfs-nfs-3.1.3.jar:/opt/soft/hadoop/share/hadoop/hdfs/hadoop-hdfs-client-3.1.3-tests.jar:/opt/soft/hadoop/share/hadoop/hdfs/hadoop-hdfs-client-3.1.3.jar:/opt/soft/hadoop/share/hadoop/hdfs/hadoop-hdfs-native-client-3.1.3-tests.jar:/opt/soft/hadoop/share/hadoop/hdfs/hadoop-hdfs-native-client-3.1.3.jar:/opt/soft/hadoop/share/hadoop/hdfs/hadoop-hdfs-rbf-3.1.3-tests.jar:/opt/soft/hadoop/share/hadoop/hdfs/hadoop-hdfs-rbf-3.1.3.jar:/opt/soft/hadoop/share/hadoop/hdfs/hadoop-hdfs-httpfs-3.1.3.jar:/opt/soft/hadoop/share/hadoop/mapreduce/lib/hamcrest-core-1.3.jar:/opt/soft/hadoop/share/hadoop/mapreduce/lib/junit-4.11.jar:/opt/soft/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-app-3.1.3.jar:/opt/soft/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-common-3.1.3.jar:/opt/soft/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-core-3.1.3.jar:/opt/soft/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-hs-3.1.3.jar:/opt/soft/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-hs-plugins-3.1.3.jar:/opt/soft/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar:/opt/soft/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3.jar:/opt/soft/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-nativetask-3.1.3.jar:/opt/soft/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-shuffle-3.1.3.jar:/opt/soft/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-uploader-3.1.3.jar:/opt/soft/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar:/opt/soft/hadoop/share/hadoop/yarn:/opt/soft/hadoop/share/hadoop/yarn/lib/HikariCP-java7-2.4.12.jar:/opt/soft/hadoop/share/hadoop/yarn/lib/aopalliance-1.0.jar:/opt/soft/hadoop/share/hadoop/yarn/lib/dnsjava-2.1.7.jar:/opt/soft/hadoop/share/hadoop/yarn/lib/ehcache-3.3.1.jar:/opt/soft/hadoop/share/hadoop/yarn/lib/fst-2.50.jar:/opt/soft/hadoop/share/hadoop/yarn/lib/geronimo-jcache_1.0_spec-1.0-alpha-1.jar:/opt/soft/hadoop/share/hadoop/yarn/lib/guice-4.0.jar:/opt/soft/hadoop/share/hadoop/yarn/lib/guice-servlet-4.0.jar:/opt/soft/hadoop/share/hadoop/yarn/lib/jackson-jaxrs-base-2.7.8.jar:/opt/soft/hadoop/share/hadoop/yarn/lib/jackson-jaxrs-json-provider-2.7.8.jar:/opt/soft/hadoop/share/hadoop/yarn/lib/jackson-module-jaxb-annotations-2.7.8.jar:/opt/soft/hadoop/share/hadoop/yarn/lib/java-util-1.9.0.jar:/opt/soft/hadoop/share/hadoop/yarn/lib/javax.inject-1.jar:/opt/soft/hadoop/share/hadoop/yarn/lib/jersey-client-1.19.jar:/opt/soft/hadoop/share/hadoop/yarn/lib/jersey-guice-1.19.jar:/opt/soft/hadoop/share/hadoop/yarn/lib/json-io-2.5.1.jar:/opt/soft/hadoop/share/hadoop/yarn/lib/metrics-core-3.2.4.jar:/opt/soft/hadoop/share/hadoop/yarn/lib/mssql-jdbc-6.2.1.jre7.jar:/opt/soft/hadoop/share/hadoop/yarn/lib/objenesis-1.0.jar:/opt/soft/hadoop/share/hadoop/yarn/lib/snakeyaml-1.16.jar:/opt/soft/hadoop/share/hadoop/yarn/lib/swagger-annotations-1.5.4.jar:/opt/soft/hadoop/share/hadoop/yarn/hadoop-yarn-api-3.1.3.jar:/opt/soft/hadoop/share/hadoop/yarn/hadoop-yarn-applications-distributedshell-3.1.3.jar:/opt/soft/hadoop/share/hadoop/yarn/hadoop-yarn-applications-unmanaged-am-launcher-3.1.3.jar:/opt/soft/hadoop/share/hadoop/yarn/hadoop-yarn-client-3.1.3.jar:/opt/soft/hadoop/share/hadoop/yarn/hadoop-yarn-common-3.1.3.jar:/opt/soft/hadoop/share/hadoop/yarn/hadoop-yarn-registry-3.1.3.jar:/opt/soft/hadoop/share/hadoop/yarn/hadoop-yarn-server-applicationhistoryservice-3.1.3.jar:/opt/soft/hadoop/share/hadoop/yarn/hadoop-yarn-server-common-3.1.3.jar:/opt/soft/hadoop/share/hadoop/yarn/hadoop-yarn-server-nodemanager-3.1.3.jar:/opt/soft/hadoop/share/hadoop/yarn/hadoop-yarn-server-resourcemanager-3.1.3.jar:/opt/soft/hadoop/share/hadoop/yarn/hadoop-yarn-server-router-3.1.3.jar:/opt/soft/hadoop/share/hadoop/yarn/hadoop-yarn-server-sharedcachemanager-3.1.3.jar:/opt/soft/hadoop/share/hadoop/yarn/hadoop-yarn-server-tests-3.1.3.jar:/opt/soft/hadoop/share/hadoop/yarn/hadoop-yarn-server-timeline-pluginstorage-3.1.3.jar:/opt/soft/hadoop/share/hadoop/yarn/hadoop-yarn-server-web-proxy-3.1.3.jar:/opt/soft/hadoop/share/hadoop/yarn/hadoop-yarn-services-api-3.1.3.jar:/opt/soft/hadoop/share/hadoop/yarn/hadoop-yarn-services-core-3.1.3.jar STARTUP_MSG: build = https://gitbox.apache.org/repos/asf/hadoop.git -r ba631c436b806728f8ec2f54ab1e289526c90579; compiled by 'ztang' on 2019-09-12T02:47Z STARTUP_MSG: java = 1.8.0_451 ************************************************************/ 2025-10-10 20:41:30,187 INFO namenode.NameNode: registered UNIX signal handlers for [TERM, HUP, INT] 2025-10-10 20:41:30,399 ERROR conf.Configuration: error parsing conf hdfs-site.xml com.ctc.wstx.exc.WstxParsingException: Unexpected close tag </property>; expected </proeprty>. at [row,col,system-id]: [31,11,"file:/opt/soft/hadoop/etc/hadoop/hdfs-site.xml"] at com.ctc.wstx.sr.StreamScanner.constructWfcException(StreamScanner.java:621) at com.ctc.wstx.sr.StreamScanner.throwParseError(StreamScanner.java:491) at com.ctc.wstx.sr.StreamScanner.throwParseError(StreamScanner.java:475) at com.ctc.wstx.sr.BasicStreamReader.reportWrongEndElem(BasicStreamReader.java:3365) at com.ctc.wstx.sr.BasicStreamReader.readEndElem(BasicStreamReader.java:3292) at com.ctc.wstx.sr.BasicStreamReader.nextFromTree(BasicStreamReader.java:2911) at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1123) at org.apache.hadoop.conf.Configuration$Parser.parseNext(Configuration.java:3320) at org.apache.hadoop.conf.Configuration$Parser.parse(Configuration.java:3114) at org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:3007) at org.apache.hadoop.conf.Configuration.loadResources(Configuration.java:2968) at org.apache.hadoop.conf.Configuration.getProps(Configuration.java:2848) at org.apache.hadoop.conf.Configuration.get(Configuration.java:1200) at org.apache.hadoop.conf.Configuration.getTimeDuration(Configuration.java:1812) at org.apache.hadoop.conf.Configuration.getTimeDuration(Configuration.java:1789) at org.apache.hadoop.util.ShutdownHookManager.getShutdownTimeout(ShutdownHookManager.java:183) at org.apache.hadoop.util.ShutdownHookManager$HookEntry.<init>(ShutdownHookManager.java:207) at org.apache.hadoop.util.ShutdownHookManager.addShutdownHook(ShutdownHookManager.java:304) at org.apache.hadoop.util.StringUtils.startupShutdownMessage(StringUtils.java:723) at org.apache.hadoop.util.StringUtils.startupShutdownMessage(StringUtils.java:707) at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1754) 2025-10-10 20:41:30,413 ERROR namenode.NameNode: Failed to start namenode. java.lang.RuntimeException: com.ctc.wstx.exc.WstxParsingException: Unexpected close tag </property>; expected </proeprty>. at [row,col,system-id]: [31,11,"file:/opt/soft/hadoop/etc/hadoop/hdfs-site.xml"] at org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:3024) at org.apache.hadoop.conf.Configuration.loadResources(Configuration.java:2968) at org.apache.hadoop.conf.Configuration.getProps(Configuration.java:2848) at org.apache.hadoop.conf.Configuration.get(Configuration.java:1200) at org.apache.hadoop.conf.Configuration.getTimeDuration(Configuration.java:1812) at org.apache.hadoop.conf.Configuration.getTimeDuration(Configuration.java:1789) at org.apache.hadoop.util.ShutdownHookManager.getShutdownTimeout(ShutdownHookManager.java:183) at org.apache.hadoop.util.ShutdownHookManager$HookEntry.<init>(ShutdownHookManager.java:207) at org.apache.hadoop.util.ShutdownHookManager.addShutdownHook(ShutdownHookManager.java:304) at org.apache.hadoop.util.StringUtils.startupShutdownMessage(StringUtils.java:723) at org.apache.hadoop.util.StringUtils.startupShutdownMessage(StringUtils.java:707) at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1754) Caused by: com.ctc.wstx.exc.WstxParsingException: Unexpected close tag </property>; expected </proeprty>. at [row,col,system-id]: [31,11,"file:/opt/soft/hadoop/etc/hadoop/hdfs-site.xml"] at com.ctc.wstx.sr.StreamScanner.constructWfcException(StreamScanner.java:621) at com.ctc.wstx.sr.StreamScanner.throwParseError(StreamScanner.java:491) at com.ctc.wstx.sr.StreamScanner.throwParseError(StreamScanner.java:475) at com.ctc.wstx.sr.BasicStreamReader.reportWrongEndElem(BasicStreamReader.java:3365) at com.ctc.wstx.sr.BasicStreamReader.readEndElem(BasicStreamReader.java:3292) at com.ctc.wstx.sr.BasicStreamReader.nextFromTree(BasicStreamReader.java:2911) at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1123) at org.apache.hadoop.conf.Configuration$Parser.parseNext(Configuration.java:3320) at org.apache.hadoop.conf.Configuration$Parser.parse(Configuration.java:3114) at org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:3007) ... 11 more 2025-10-10 20:41:30,430 INFO util.ExitUtil: Exiting with status 1: java.lang.RuntimeException: com.ctc.wstx.exc.WstxParsingException: Unexpected close tag </property>; expected </proeprty>. at [row,col,system-id]: [31,11,"file:/opt/soft/hadoop/etc/hadoop/hdfs-site.xml"] 2025-10-10 20:41:30,492 ERROR conf.Configuration: error parsing conf hdfs-site.xml com.ctc.wstx.exc.WstxParsingException: Unexpected close tag </property>; expected </proeprty>. at [row,col,system-id]: [31,11,"file:/opt/soft/hadoop/etc/hadoop/hdfs-site.xml"] at com.ctc.wstx.sr.StreamScanner.constructWfcException(StreamScanner.java:621) at com.ctc.wstx.sr.StreamScanner.throwParseError(StreamScanner.java:491) at com.ctc.wstx.sr.StreamScanner.throwParseError(StreamScanner.java:475) at com.ctc.wstx.sr.BasicStreamReader.reportWrongEndElem(BasicStreamReader.java:3365) at com.ctc.wstx.sr.BasicStreamReader.readEndElem(BasicStreamReader.java:3292) at com.ctc.wstx.sr.BasicStreamReader.nextFromTree(BasicStreamReader.java:2911) at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1123) at org.apache.hadoop.conf.Configuration$Parser.parseNext(Configuration.java:3320) at org.apache.hadoop.conf.Configuration$Parser.parse(Configuration.java:3114) at org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:3007) at org.apache.hadoop.conf.Configuration.loadResources(Configuration.java:2968) at org.apache.hadoop.conf.Configuration.getProps(Configuration.java:2848) at org.apache.hadoop.conf.Configuration.get(Configuration.java:1200) at org.apache.hadoop.conf.Configuration.getTimeDuration(Configuration.java:1812) at org.apache.hadoop.conf.Configuration.getTimeDuration(Configuration.java:1789) at org.apache.hadoop.util.ShutdownHookManager.getShutdownTimeout(ShutdownHookManager.java:183) at org.apache.hadoop.util.ShutdownHookManager.shutdownExecutor(ShutdownHookManager.java:145) at org.apache.hadoop.util.ShutdownHookManager.access$300(ShutdownHookManager.java:65) at org.apache.hadoop.util.ShutdownHookManager$1.run(ShutdownHookManager.java:102) Exception in thread "Thread-1" java.lang.RuntimeException: com.ctc.wstx.exc.WstxParsingException: Unexpected close tag </property>; expected </proeprty>. at [row,col,system-id]: [31,11,"file:/opt/soft/hadoop/etc/hadoop/hdfs-site.xml"] at org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:3024) at org.apache.hadoop.conf.Configuration.loadResources(Configuration.java:2968) at org.apache.hadoop.conf.Configuration.getProps(Configuration.java:2848) at org.apache.hadoop.conf.Configuration.get(Configuration.java:1200) at org.apache.hadoop.conf.Configuration.getTimeDuration(Configuration.java:1812) at org.apache.hadoop.conf.Configuration.getTimeDuration(Configuration.java:1789) at org.apache.hadoop.util.ShutdownHookManager.getShutdownTimeout(ShutdownHookManager.java:183) at org.apache.hadoop.util.ShutdownHookManager.shutdownExecutor(ShutdownHookManager.java:145) at org.apache.hadoop.util.ShutdownHookManager.access$300(ShutdownHookManager.java:65) at org.apache.hadoop.util.ShutdownHookManager$1.run(ShutdownHookManager.java:102) Caused by: com.ctc.wstx.exc.WstxParsingException: Unexpected close tag </property>; expected </proeprty>. at [row,col,system-id]: [31,11,"file:/opt/soft/hadoop/etc/hadoop/hdfs-site.xml"] at com.ctc.wstx.sr.StreamScanner.constructWfcException(StreamScanner.java:621) at com.ctc.wstx.sr.StreamScanner.throwParseError(StreamScanner.java:491) at com.ctc.wstx.sr.StreamScanner.throwParseError(StreamScanner.java:475) at com.ctc.wstx.sr.BasicStreamReader.reportWrongEndElem(BasicStreamReader.java:3365) at com.ctc.wstx.sr.BasicStreamReader.readEndElem(BasicStreamReader.java:3292) at com.ctc.wstx.sr.BasicStreamReader.nextFromTree(BasicStreamReader.java:2911) at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1123) at org.apache.hadoop.conf.Configuration$Parser.parseNext(Configuration.java:3320) at org.apache.hadoop.conf.Configuration$Parser.parse(Configuration.java:3114) at org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:3007) ... 9 more 这个是我格式化namenode的任务日志,算是格式成功了吗
10-11
cd to /kms/component/canal-admin/bin for workaround relative path CLASSPATH :/kms/component/canal-admin/bin/../conf:/kms/component/canal-admin/bin/../lib/zookeeper-3.4.5.jar:/kms/component/canal-admin/bin/../lib/zkclient-0.10.jar:/kms/component/canal-admin/bin/../lib/xmlunit-core-2.5.1.jar:/kms/component/canal-admin/bin/../lib/validation-api-2.0.1.Final.jar:/kms/component/canal-admin/bin/../lib/tomcat-embed-websocket-8.5.29.jar:/kms/component/canal-admin/bin/../lib/tomcat-embed-el-8.5.29.jar:/kms/component/canal-admin/bin/../lib/tomcat-embed-core-8.5.29.jar:/kms/component/canal-admin/bin/../lib/spring-webmvc-5.0.5.RELEASE.jar:/kms/component/canal-admin/bin/../lib/spring-web-5.0.5.RELEASE.jar:/kms/component/canal-admin/bin/../lib/spring-tx-5.0.5.RELEASE.jar:/kms/component/canal-admin/bin/../lib/spring-orm-5.0.5.RELEASE.jar:/kms/component/canal-admin/bin/../lib/spring-jdbc-5.0.5.RELEASE.jar:/kms/component/canal-admin/bin/../lib/spring-jcl-5.0.5.RELEASE.jar:/kms/component/canal-admin/bin/../lib/spring-expression-5.0.5.RELEASE.jar:/kms/component/canal-admin/bin/../lib/spring-core-5.0.5.RELEASE.jar:/kms/component/canal-admin/bin/../lib/spring-context-5.0.5.RELEASE.jar:/kms/component/canal-admin/bin/../lib/spring-boot-test-autoconfigure-2.0.1.RELEASE.jar:/kms/component/canal-admin/bin/../lib/spring-boot-test-2.0.1.RELEASE.jar:/kms/component/canal-admin/bin/../lib/spring-boot-starter-web-2.0.1.RELEASE.jar:/kms/component/canal-admin/bin/../lib/spring-boot-starter-tomcat-2.0.1.RELEASE.jar:/kms/component/canal-admin/bin/../lib/spring-boot-starter-test-2.0.1.RELEASE.jar:/kms/component/canal-admin/bin/../lib/spring-boot-starter-logging-2.0.1.RELEASE.jar:/kms/component/canal-admin/bin/../lib/spring-boot-starter-json-2.0.1.RELEASE.jar:/kms/component/canal-admin/bin/../lib/spring-boot-starter-jdbc-2.0.1.RELEASE.jar:/kms/component/canal-admin/bin/../lib/spring-boot-starter-2.0.1.RELEASE.jar:/kms/component/canal-admin/bin/../lib/spring-boot-autoconfigure-2.0.1.RELEASE.jar:/kms/component/canal-admin/bin/../lib/spring-boot-2.0.1.RELEASE.jar:/kms/component/canal-admin/bin/../lib/spring-beans-5.0.5.RELEASE.jar:/kms/component/canal-admin/bin/../lib/spring-aop-5.0.5.RELEASE.jar:/kms/component/canal-admin/bin/../lib/snakeyaml-1.19.jar:/kms/component/canal-admin/bin/../lib/slf4j-api-1.7.25.jar:/kms/component/canal-admin/bin/../lib/protobuf-java-3.6.1.jar:/kms/component/canal-admin/bin/../lib/persistence-api-2.2.2.jar:/kms/component/canal-admin/bin/../lib/objenesis-2.6.jar:/kms/component/canal-admin/bin/../lib/netty-all-4.1.23.Final.jar:/kms/component/canal-admin/bin/../lib/netty-3.2.2.Final.jar:/kms/component/canal-admin/bin/../lib/mysql-connector-java-5.1.48.jar:/kms/component/canal-admin/bin/../lib/mockito-core-2.15.0.jar:/kms/component/canal-admin/bin/../lib/logback-core-1.2.3.jar:/kms/component/canal-admin/bin/../lib/logback-classic-1.2.3.jar:/kms/component/canal-admin/bin/../lib/log4j-to-slf4j-2.10.0.jar:/kms/component/canal-admin/bin/../lib/log4j-api-2.10.0.jar:/kms/component/canal-admin/bin/../lib/jul-to-slf4j-1.7.25.jar:/kms/component/canal-admin/bin/../lib/jsr305-3.0.2.jar:/kms/component/canal-admin/bin/../lib/json-smart-2.3.jar:/kms/component/canal-admin/bin/../lib/json-path-2.4.0.jar:/kms/component/canal-admin/bin/../lib/jsonassert-1.5.0.jar:/kms/component/canal-admin/bin/../lib/jcl-over-slf4j-1.7.25.jar:/kms/component/canal-admin/bin/../lib/jboss-logging-3.3.2.Final.jar:/kms/component/canal-admin/bin/../lib/javax.annotation-api-1.3.2.jar:/kms/component/canal-admin/bin/../lib/jackson-module-parameter-names-2.9.5.jar:/kms/component/canal-admin/bin/../lib/jackson-datatype-jsr310-2.9.5.jar:/kms/component/canal-admin/bin/../lib/jackson-datatype-jdk8-2.9.5.jar:/kms/component/canal-admin/bin/../lib/jackson-databind-2.9.5.jar:/kms/component/canal-admin/bin/../lib/jackson-core-2.9.5.jar:/kms/component/canal-admin/bin/../lib/jackson-annotations-2.9.0.jar:/kms/component/canal-admin/bin/../lib/j2objc-annotations-1.1.jar:/kms/component/canal-admin/bin/../lib/HikariCP-2.7.8.jar:/kms/component/canal-admin/bin/../lib/hibernate-validator-6.0.9.Final.jar:/kms/component/canal-admin/bin/../lib/hamcrest-library-1.3.jar:/kms/component/canal-admin/bin/../lib/hamcrest-core-1.3.jar:/kms/component/canal-admin/bin/../lib/guava-22.0.jar:/kms/component/canal-admin/bin/../lib/fastjson-1.2.58.sec06.jar:/kms/component/canal-admin/bin/../lib/error_prone_annotations-2.0.18.jar:/kms/component/canal-admin/bin/../lib/ebean-types-1.3.jar:/kms/component/canal-admin/bin/../lib/ebean-migration-11.16.2.jar:/kms/component/canal-admin/bin/../lib/ebean-datasource-api-4.5.jar:/kms/component/canal-admin/bin/../lib/ebean-datasource-4.5.2.jar:/kms/component/canal-admin/bin/../lib/ebean-annotation-4.11.jar:/kms/component/canal-admin/bin/../lib/ebean-11.41.1.jar:/kms/component/canal-admin/bin/../lib/commons-logging-1.1.1.jar:/kms/component/canal-admin/bin/../lib/commons-lang-2.6.jar:/kms/component/canal-admin/bin/../lib/commons-io-2.4.jar:/kms/component/canal-admin/bin/../lib/commons-codec-1.11.jar:/kms/component/canal-admin/bin/../lib/commons-beanutils-1.8.2.jar:/kms/component/canal-admin/bin/../lib/classmate-1.3.4.jar:/kms/component/canal-admin/bin/../lib/canal.protocol-1.1.6-SNAPSHOT.jar:/kms/component/canal-admin/bin/../lib/canal.common-1.1.6-SNAPSHOT.jar:/kms/component/canal-admin/bin/../lib/canal.admin-web-1.1.6-SNAPSHOT.jar:/kms/component/canal-admin/bin/../lib/caffeine-2.6.2.jar:/kms/component/canal-admin/bin/../lib/byte-buddy-agent-1.7.11.jar:/kms/component/canal-admin/bin/../lib/byte-buddy-1.7.11.jar:/kms/component/canal-admin/bin/../lib/avaje-classpath-scanner-api-2.2.jar:/kms/component/canal-admin/bin/../lib/avaje-classpath-scanner-3.1.1.jar:/kms/component/canal-admin/bin/../lib/assertj-core-3.9.1.jar:/kms/component/canal-admin/bin/../lib/asm-5.0.4.jar:/kms/component/canal-admin/bin/../lib/antlr4-runtime-4.7.2.jar:/kms/component/canal-admin/bin/../lib/animal-sniffer-annotations-1.14.jar:/kms/component/canal-admin/bin/../lib/android-json-0.0.20131108.vaadin1.jar:/kms/component/canal-admin/bin/../lib/accessors-smart-1.2.jar:/usr/java/jdk-17/lib:.:/usr/java/jdk-17/lib:.:/usr/java/jdk-17/lib:.:/usr/java/jdk-17/lib:.:/usr/java/jdk-17/lib:.:/usr/local/jdk1.8.0_211/lib/dt.jar:/usr/local/jdk1.8.0_211/lib/tools.jar cd to /kms/component/canal-admin/bin for continue
06-27
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值