Mybatis支持GRPC protobuf

本文介绍如何通过开发插件及自定义类型处理器让Mybatis支持Google的Proto数据传输格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近公司项目rpc使用Google grpc 作为rpc框架,数据传输DTO对象统一使用proto来定义,但由于DTO层的model和DAO层的model 在很大程度上是可以复用的,所以在DAO 层也想使用proto来定义,项目中ORM框架使用到了Mybatis框架,想要在Mybatis上支持grpc proto 需要处理那些工作呢?

Mapper Api 定义:

 int save(Promotion promotion);//注意这里定义的是具体Model类,但在Mapper.xml中parameterType则是Model$Builder类,目的用来获取插入数据时将数据库生成的自增ID返回,只所以是keyProperty 等于“id_” 是因为protobuf 生成的model属性进行了修改属性名称。

<insert id="save" parameterType="model.Promotion$Builder"
		keyProperty="id_" useGeneratedKeys="true">
		<![CDATA[
		INSERT INTO promotion 
		(name,xxx)
		VALUES
		(#{name}, ...)
		]]>
	</insert>

查询数据

  Promotion getById(int id);

<resultMap type="model.Promotion$Builder"
		id="PromotionResultMap">
		<id column="id" property="id" />
		<result column="name" property="name" />
        <!-- 省略更多属性... -->
	</resultMap>


<select id="getById" resultMap="PromotionResultMap">
    <![CDATA[
		SELECT * FROM promotion where id=#{id}
	]]>
</select>

由于原生Mybatis 本身不支持proto api的方式,所以为了让Mybatis可以灵活的支持proto,所以我们需要开发proto plugin来实现。

在mybatis-config.xml配置中增加插件配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<settings>
		<!-- <setting name="logImpl" value="STDOUT_LOGGING" /> -->
		<setting name="mapUnderscoreToCamelCase" value="true" />
	</settings>
	<typeHandlers />
	<plugins>
        <!-- Mybatis插件拦截器,用来对Mybatis执行结果进行动态修改处理 -->
		<plugin interceptor="mybatis.plugins.ProtobufInterceptor" />
	</plugins>
</configuration>
import java.sql.Statement;
import java.util.List;
import java.util.Properties;
import org.apache.ibatis.executor.resultset.DefaultResultSetHandler;
import org.apache.ibatis.executor.resultset.ResultSetHandler;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.plugin.Intercepts;
import org.apache.ibatis.plugin.Invocation;
import org.apache.ibatis.plugin.Plugin;
import org.apache.ibatis.plugin.Signature;
import com.google.common.collect.Lists;
import com.google.protobuf.GeneratedMessageV3;

// Mybatis支持对Executor、StatementHandler、PameterHandler和ResultSetHandler 接口进行拦截
@Intercepts({@Signature(type = ResultSetHandler.class, method = "handleResultSets",
    args = {Statement.class}),})
public class ProtobufInterceptor implements Interceptor {

  public Object intercept(Invocation invocation) throws Throwable {
    DefaultResultSetHandler value = (DefaultResultSetHandler) invocation.getTarget();
    Object result = invocation.getMethod().invoke(value, invocation.getArgs());
    if (result != null) {
      if (List.class.isAssignableFrom(result.getClass())) {
        List<?> list = (List<?>) result;
        return this.process(list);
      }
    }
    return result;
  }

  private List<?> process(List<?> list) {
    if (list.size() > 0) {
      if (GeneratedMessageV3.Builder.class.isAssignableFrom(list.get(0).getClass())) {
        List<Object> resultList = Lists.newArrayList();
        for (Object val : list) {
          @SuppressWarnings("rawtypes")
          Object rtnVal = ((GeneratedMessageV3.Builder) val).build();
          resultList.add(rtnVal);
        }
        return resultList;
      }
    }
    return list;
  }

  @Override
  public Object plugin(Object target) {
    return Plugin.wrap(target, this);
  }

  @Override
  public void setProperties(Properties properties) {}

}

有时候我们数据库的数据类型和proto中定义的数据类型不一致的,我们需要转换处理,例如:枚举类型

当数据插入数据到DB时,需要将Enum类型转换成数字类型存储到DB中,在查询时又需要将数字转到到枚举类型

这时候就需要自定义Mybatis提供的BaseTypeHandler 来实现自定义类型解析处理了。

例如: 自定义枚举类型

package hander;

import java.lang.reflect.Method;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.protobuf.ProtocolMessageEnum;

/**
 * 通用枚举转换处理
 * 
 * @author KEVIN LUAN
 *
 */
@MappedJdbcTypes(value = {JdbcType.TINYINT})
@MappedTypes({ProtocolMessageEnum.class})
public class EnumHander extends BaseTypeHandler<ProtocolMessageEnum> {
  public Class<?> type;
  private Method method;
  private static final Logger LOGGER = LoggerFactory.getLogger(EnumHander.class);

  public EnumHander(Class<?> type) throws NoSuchMethodException, SecurityException {
    this.type = type;
    try {
      this.method = type.getMethod("forNumber", int.class);
    } catch (Exception e) {
      LOGGER.error("type:`" + type + "` getMethod:`forNumber` ERROR", e);
    }
  }

  public EnumHander() {}

  @Override
  public void setNonNullParameter(PreparedStatement ps, int i, ProtocolMessageEnum parameter,
      JdbcType jdbcType) throws SQLException {
    ps.setInt(i, parameter.getNumber());
  }

  private ProtocolMessageEnum forNumber(int value) {
    try {
      return (ProtocolMessageEnum) method.invoke(null, value);
    } catch (Exception e) {
      LOGGER.error("type:`" + type + "`.forNumber() ERROR", e);
      throw new RuntimeException("type:`" + type + "`.forNumber() ERROR", e);
    }
  }

  @Override
  public ProtocolMessageEnum getNullableResult(ResultSet rs, String columnName)
      throws SQLException {
    int value = rs.getInt(columnName);
    return forNumber(value);
  }

  @Override
  public ProtocolMessageEnum getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
    int value = rs.getInt(columnIndex);
    return forNumber(value);
  }

  @Override
  public ProtocolMessageEnum getNullableResult(CallableStatement cs, int columnIndex)
      throws SQLException {
    int value = cs.getInt(columnIndex);
    return forNumber(value);
  }

}

自定义DateTime类型处理

package hander;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;

/**
 * 数据类型转换从:代码中Long类型转到到Mysql中的datetime类型 pojo.Long->mysql.DateTime
 * 
 * @author KEVIN LUAN
 *
 */
@MappedJdbcTypes(value = {JdbcType.TIMESTAMP})
@MappedTypes({Long.class, long.class})
public class DateTimeHander extends BaseTypeHandler<Long> {
  @Override
  public void setNonNullParameter(PreparedStatement ps, int i, Long parameter, JdbcType jdbcType)
      throws SQLException {
    ps.setTimestamp(i, new Timestamp(parameter));
  }

  @Override
  public Long getNullableResult(ResultSet rs, String columnName) throws SQLException {
    Timestamp timestamp = rs.getTimestamp(columnName);
    if (timestamp != null) {
      return timestamp.getTime();
    } else {
      return 0L;
    }
  }

  @Override
  public Long getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
    Timestamp timestamp = rs.getTimestamp(columnIndex);
    if (timestamp != null) {
      return timestamp.getTime();
    } else {
      return 0L;
    }
  }

  @Override
  public Long getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
    Timestamp timestamp = cs.getTimestamp(columnIndex);
    if (timestamp != null) {
      return timestamp.getTime();
    } else {
      return 0L;
    }
  }

}

对象JSON 序列化类型

package hander;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
import com.google.protobuf.GeneratedMessageV3;

/**
 * 通用Proto Message转换处理
 * 
 * @author KEVIN LUAN
 *
 */
@MappedJdbcTypes(value = {JdbcType.TINYINT})
@MappedTypes({GeneratedMessageV3.class})
public class JsonHander extends BaseTypeHandler<GeneratedMessageV3> {
  public Class<?> type;

  public JsonHander(Class<?> type) throws NoSuchMethodException, SecurityException {
    this.type = type;
  }

  public JsonHander() {}

  @Override
  public void setNonNullParameter(PreparedStatement ps, int i, GeneratedMessageV3 parameter,
      JdbcType jdbcType) throws SQLException {
    if (parameter != null) {
      String json = JacksonSerialize.INSTANCE.encode(parameter);
      ps.setString(i, json);
    } else {
      ps.setString(i, null);
    }
  }

  private GeneratedMessageV3 jsonAsBean(String value) {
    if (StringUtils.isNotBlank(value)) {
      return (GeneratedMessageV3) JacksonSerialize.INSTANCE.decode(value, type);
    }
    return null;
  }

  @Override
  public GeneratedMessageV3 getNullableResult(ResultSet rs, String columnName) throws SQLException {
    String value = rs.getString(columnName);
    return jsonAsBean(value);
  }

  @Override
  public GeneratedMessageV3 getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
    String value = rs.getString(columnIndex);
    return jsonAsBean(value);
  }

  @Override
  public GeneratedMessageV3 getNullableResult(CallableStatement cs, int columnIndex)
      throws SQLException {
    String value = cs.getString(columnIndex);
    return jsonAsBean(value);
  }

}

在查询数据时使用ResultMap对属性指定对应的Hander即可例如

 <resultMap type="model.XXXUser$Builder"
               id="UserResultMap">
        <id column="id" property="id"/>
        <!-- 查询数据时会根据数据库中的DateTime类型自动转到long类型中 -->
        <result column="create_time" property="createTime" typeHandler="hander.DateTimeHander"/>
        <!-- 省略更多属性... -->
    </resultMap>


  <insert id="saveBatch" parameterType="model.User$Builder" keyProperty="id_"
            useGeneratedKeys="true">
        <![CDATA[
	INSERT INTO user 
		(xx)
		VALUES
	]]>
        <!-- 插入数据是将long类型转到DateTime类型 -->
       (#{item.createTime,typeHandler=hander.DateTimeHander})
    </insert>

<select id="get" resultMap="UserResultMap">
	<![CDATA[
		SELECT * FROM user limit 1;
    ]]>
</select>

到此 mybatis 支持proto就完成了。

C:\Users\13085\.jdks\ms-17.0.15\bin\java.exe -XX:TieredStopAtLevel=1 -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-Dmanagement.endpoints.jmx.exposure.include=*" "-javaagent:D:\JAVA\IntelliJ IDEA 2024.3.5\lib\idea_rt.jar=56973" -Dfile.encoding=UTF-8 -classpath D:\JAVA\java_project\RuoYi-Vue-Plus-5.X\RuoYi-Vue-Plus-5.X\ruoyi-admin\target\classes;D:\JAVA\maven\com\mysql\mysql-connector-j\9.1.0\mysql-connector-j-9.1.0.jar;D:\JAVA\java_project\RuoYi-Vue-Plus-5.X\RuoYi-Vue-Plus-5.X\ruoyi-common\ruoyi-common-doc\target\classes;D:\JAVA\java_project\RuoYi-Vue-Plus-5.X\RuoYi-Vue-Plus-5.X\ruoyi-common\ruoyi-common-core\target\classes;D:\JAVA\maven\org\springframework\spring-context-support\6.2.8\spring-context-support-6.2.8.jar;D:\JAVA\maven\org\springframework\spring-beans\6.2.8\spring-beans-6.2.8.jar;D:\JAVA\maven\org\springframework\spring-context\6.2.8\spring-context-6.2.8.jar;D:\JAVA\maven\org\springframework\spring-web\6.2.8\spring-web-6.2.8.jar;D:\JAVA\maven\io\micrometer\micrometer-observation\1.14.8\micrometer-observation-1.14.8.jar;D:\JAVA\maven\io\micrometer\micrometer-commons\1.14.8\micrometer-commons-1.14.8.jar;D:\JAVA\maven\org\springframework\boot\spring-boot-starter-validation\3.4.7\spring-boot-starter-validation-3.4.7.jar;D:\JAVA\maven\org\apache\tomcat\embed\tomcat-embed-el\10.1.42\tomcat-embed-el-10.1.42.jar;D:\JAVA\maven\org\hibernate\validator\hibernate-validator\8.0.2.Final\hibernate-validator-8.0.2.Final.jar;D:\JAVA\maven\org\jboss\logging\jboss-logging\3.6.1.Final\jboss-logging-3.6.1.Final.jar;D:\JAVA\maven\com\fasterxml\classmate\1.7.0\classmate-1.7.0.jar;D:\JAVA\maven\org\springframework\boot\spring-boot-starter-aop\3.4.7\spring-boot-starter-aop-3.4.7.jar;D:\JAVA\maven\org\springframework\spring-aop\6.2.8\spring-aop-6.2.8.jar;D:\JAVA\maven\org\aspectj\aspectjweaver\1.9.24\aspectjweaver-1.9.24.jar;D:\JAVA\maven\org\apache\commons\commons-lang3\3.17.0\commons-lang3-3.17.0.jar;D:\JAVA\maven\jakarta\servlet\jakarta.servlet-api\6.0.0\jakarta.servlet-api-6.0.0.jar;D:\JAVA\maven\cn\hutool\hutool-core\5.8.38\hutool-core-5.8.38.jar;D:\JAVA\maven\cn\hutool\hutool-http\5.8.38\hutool-http-5.8.38.jar;D:\JAVA\maven\cn\hutool\hutool-extra\5.8.38\hutool-extra-5.8.38.jar;D:\JAVA\maven\cn\hutool\hutool-setting\5.8.38\hutool-setting-5.8.38.jar;D:\JAVA\maven\cn\hutool\hutool-log\5.8.38\hutool-log-5.8.38.jar;D:\JAVA\maven\org\projectlombok\lombok\1.18.36\lombok-1.18.36.jar;D:\JAVA\maven\org\springframework\boot\spring-boot-configuration-processor\3.4.7\spring-boot-configuration-processor-3.4.7.jar;D:\JAVA\maven\org\springframework\boot\spring-boot-properties-migrator\3.4.7\spring-boot-properties-migrator-3.4.7.jar;D:\JAVA\maven\org\springframework\boot\spring-boot-configuration-metadata\3.4.7\spring-boot-configuration-metadata-3.4.7.jar;D:\JAVA\maven\io\github\linpeilie\mapstruct-plus-spring-boot-starter\1.4.8\mapstruct-plus-spring-boot-starter-1.4.8.jar;D:\JAVA\maven\io\github\linpeilie\mapstruct-plus\1.4.8\mapstruct-plus-1.4.8.jar;D:\JAVA\maven\org\mapstruct\mapstruct\1.5.5.Final\mapstruct-1.5.5.Final.jar;D:\JAVA\maven\io\github\linpeilie\mapstruct-plus-object-convert\1.4.8\mapstruct-plus-object-convert-1.4.8.jar;D:\JAVA\maven\org\lionsoul\ip2region\2.7.0\ip2region-2.7.0.jar;D:\JAVA\maven\org\springdoc\springdoc-openapi-starter-webmvc-api\2.8.8\springdoc-openapi-starter-webmvc-api-2.8.8.jar;D:\JAVA\maven\org\springdoc\springdoc-openapi-starter-common\2.8.8\springdoc-openapi-starter-common-2.8.8.jar;D:\JAVA\maven\io\swagger\core\v3\swagger-core-jakarta\2.2.30\swagger-core-jakarta-2.2.30.jar;D:\JAVA\maven\io\swagger\core\v3\swagger-annotations-jakarta\2.2.30\swagger-annotations-jakarta-2.2.30.jar;D:\JAVA\maven\io\swagger\core\v3\swagger-models-jakarta\2.2.30\swagger-models-jakarta-2.2.30.jar;D:\JAVA\maven\com\fasterxml\jackson\dataformat\jackson-dataformat-yaml\2.18.4\jackson-dataformat-yaml-2.18.4.jar;D:\JAVA\maven\org\springframework\spring-webmvc\6.2.8\spring-webmvc-6.2.8.jar;D:\JAVA\maven\org\springframework\spring-expression\6.2.8\spring-expression-6.2.8.jar;D:\JAVA\maven\com\github\therapi\therapi-runtime-javadoc\0.15.0\therapi-runtime-javadoc-0.15.0.jar;D:\JAVA\maven\com\fasterxml\jackson\module\jackson-module-kotlin\2.18.4\jackson-module-kotlin-2.18.4.jar;D:\JAVA\maven\com\fasterxml\jackson\core\jackson-databind\2.18.4\jackson-databind-2.18.4.jar;D:\JAVA\maven\com\fasterxml\jackson\core\jackson-core\2.18.4.1\jackson-core-2.18.4.1.jar;D:\JAVA\maven\com\fasterxml\jackson\core\jackson-annotations\2.18.4\jackson-annotations-2.18.4.jar;D:\JAVA\maven\org\jetbrains\kotlin\kotlin-reflect\1.9.25\kotlin-reflect-1.9.25.jar;D:\JAVA\maven\org\jetbrains\kotlin\kotlin-stdlib\1.9.25\kotlin-stdlib-1.9.25.jar;D:\JAVA\maven\org\jetbrains\annotations\13.0\annotations-13.0.jar;D:\JAVA\java_project\RuoYi-Vue-Plus-5.X\RuoYi-Vue-Plus-5.X\ruoyi-common\ruoyi-common-social\target\classes;D:\JAVA\maven\me\zhyd\oauth\JustAuth\1.16.7\JustAuth-1.16.7.jar;D:\JAVA\maven\com\xkcoding\http\simple-http\1.0.5\simple-http-1.0.5.jar;D:\JAVA\maven\com\alibaba\fastjson\1.2.83\fastjson-1.2.83.jar;D:\JAVA\java_project\RuoYi-Vue-Plus-5.X\RuoYi-Vue-Plus-5.X\ruoyi-common\ruoyi-common-json\target\classes;D:\JAVA\maven\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.18.4\jackson-datatype-jsr310-2.18.4.jar;D:\JAVA\java_project\RuoYi-Vue-Plus-5.X\RuoYi-Vue-Plus-5.X\ruoyi-common\ruoyi-common-redis\target\classes;D:\JAVA\maven\org\redisson\redisson-spring-boot-starter\3.50.0\redisson-spring-boot-starter-3.50.0.jar;D:\JAVA\maven\org\springframework\boot\spring-boot-starter-data-redis\3.4.7\spring-boot-starter-data-redis-3.4.7.jar;D:\JAVA\maven\org\springframework\data\spring-data-redis\3.4.7\spring-data-redis-3.4.7.jar;D:\JAVA\maven\org\springframework\data\spring-data-keyvalue\3.4.7\spring-data-keyvalue-3.4.7.jar;D:\JAVA\maven\org\springframework\data\spring-data-commons\3.4.7\spring-data-commons-3.4.7.jar;D:\JAVA\maven\org\springframework\spring-oxm\6.2.8\spring-oxm-6.2.8.jar;D:\JAVA\maven\org\redisson\redisson\3.50.0\redisson-3.50.0.jar;D:\JAVA\maven\io\netty\netty-resolver-dns\4.1.122.Final\netty-resolver-dns-4.1.122.Final.jar;D:\JAVA\maven\io\netty\netty-codec-dns\4.1.122.Final\netty-codec-dns-4.1.122.Final.jar;D:\JAVA\maven\javax\cache\cache-api\1.1.1\cache-api-1.1.1.jar;D:\JAVA\maven\io\projectreactor\reactor-core\3.7.7\reactor-core-3.7.7.jar;D:\JAVA\maven\io\reactivex\rxjava3\rxjava\3.1.10\rxjava-3.1.10.jar;D:\JAVA\maven\com\esotericsoftware\kryo\5.6.2\kryo-5.6.2.jar;D:\JAVA\maven\com\esotericsoftware\reflectasm\1.11.9\reflectasm-1.11.9.jar;D:\JAVA\maven\com\esotericsoftware\minlog\1.3.1\minlog-1.3.1.jar;D:\JAVA\maven\org\jodd\jodd-util\6.3.0\jodd-util-6.3.0.jar;D:\JAVA\maven\org\redisson\redisson-spring-data-35\3.50.0\redisson-spring-data-35-3.50.0.jar;D:\JAVA\maven\com\baomidou\lock4j-redisson-spring-boot-starter\2.2.7\lock4j-redisson-spring-boot-starter-2.2.7.jar;D:\JAVA\maven\com\baomidou\lock4j-core\2.2.7\lock4j-core-2.2.7.jar;D:\JAVA\maven\com\github\ben-manes\caffeine\caffeine\3.1.8\caffeine-3.1.8.jar;D:\JAVA\maven\org\checkerframework\checker-qual\3.37.0\checker-qual-3.37.0.jar;D:\JAVA\maven\com\google\errorprone\error_prone_annotations\2.21.1\error_prone_annotations-2.21.1.jar;D:\JAVA\java_project\RuoYi-Vue-Plus-5.X\RuoYi-Vue-Plus-5.X\ruoyi-common\ruoyi-common-ratelimiter\target\classes;D:\JAVA\java_project\RuoYi-Vue-Plus-5.X\RuoYi-Vue-Plus-5.X\ruoyi-common\ruoyi-common-mail\target\classes;D:\JAVA\maven\jakarta\mail\jakarta.mail-api\2.1.3\jakarta.mail-api-2.1.3.jar;D:\JAVA\maven\jakarta\activation\jakarta.activation-api\2.1.3\jakarta.activation-api-2.1.3.jar;D:\JAVA\maven\org\eclipse\angus\jakarta.mail\2.0.3\jakarta.mail-2.0.3.jar;D:\JAVA\maven\org\eclipse\angus\angus-activation\2.0.2\angus-activation-2.0.2.jar;D:\JAVA\java_project\RuoYi-Vue-Plus-5.X\RuoYi-Vue-Plus-5.X\ruoyi-modules\ruoyi-system\target\classes;D:\JAVA\java_project\RuoYi-Vue-Plus-5.X\RuoYi-Vue-Plus-5.X\ruoyi-common\ruoyi-common-mybatis\target\classes;D:\JAVA\java_project\RuoYi-Vue-Plus-5.X\RuoYi-Vue-Plus-5.X\ruoyi-common\ruoyi-common-satoken\target\classes;D:\JAVA\maven\cn\dev33\sa-token-spring-boot3-starter\1.44.0\sa-token-spring-boot3-starter-1.44.0.jar;D:\JAVA\maven\cn\dev33\sa-token-jakarta-servlet\1.44.0\sa-token-jakarta-servlet-1.44.0.jar;D:\JAVA\maven\cn\dev33\sa-token-spring-boot-autoconfig\1.44.0\sa-token-spring-boot-autoconfig-1.44.0.jar;D:\JAVA\maven\cn\dev33\sa-token-jackson\1.44.0\sa-token-jackson-1.44.0.jar;D:\JAVA\maven\cn\dev33\sa-token-jwt\1.44.0\sa-token-jwt-1.44.0.jar;D:\JAVA\maven\cn\hutool\hutool-jwt\5.8.38\hutool-jwt-5.8.38.jar;D:\JAVA\maven\cn\hutool\hutool-json\5.8.38\hutool-json-5.8.38.jar;D:\JAVA\maven\com\baomidou\dynamic-datasource-spring-boot3-starter\4.3.1\dynamic-datasource-spring-boot3-starter-4.3.1.jar;D:\JAVA\maven\com\baomidou\dynamic-datasource-spring-boot-common\4.3.1\dynamic-datasource-spring-boot-common-4.3.1.jar;D:\JAVA\maven\com\baomidou\dynamic-datasource-spring\4.3.1\dynamic-datasource-spring-4.3.1.jar;D:\JAVA\maven\com\baomidou\dynamic-datasource-creator\4.3.1\dynamic-datasource-creator-4.3.1.jar;D:\JAVA\maven\com\baomidou\mybatis-plus-spring-boot3-starter\3.5.12\mybatis-plus-spring-boot3-starter-3.5.12.jar;D:\JAVA\maven\com\baomidou\mybatis-plus\3.5.12\mybatis-plus-3.5.12.jar;D:\JAVA\maven\com\baomidou\mybatis-plus-core\3.5.12\mybatis-plus-core-3.5.12.jar;D:\JAVA\maven\com\baomidou\mybatis-plus-annotation\3.5.12\mybatis-plus-annotation-3.5.12.jar;D:\JAVA\maven\com\baomidou\mybatis-plus-spring\3.5.12\mybatis-plus-spring-3.5.12.jar;D:\JAVA\maven\org\mybatis\mybatis\3.5.16\mybatis-3.5.16.jar;D:\JAVA\maven\org\mybatis\mybatis-spring\3.0.4\mybatis-spring-3.0.4.jar;D:\JAVA\maven\com\baomidou\mybatis-plus-spring-boot-autoconfigure\3.5.12\mybatis-plus-spring-boot-autoconfigure-3.5.12.jar;D:\JAVA\maven\org\springframework\boot\spring-boot-starter-jdbc\3.4.7\spring-boot-starter-jdbc-3.4.7.jar;D:\JAVA\maven\com\zaxxer\HikariCP\5.1.0\HikariCP-5.1.0.jar;D:\JAVA\maven\org\springframework\spring-jdbc\6.2.8\spring-jdbc-6.2.8.jar;D:\JAVA\maven\com\baomidou\mybatis-plus-jsqlparser\3.5.12\mybatis-plus-jsqlparser-3.5.12.jar;D:\JAVA\maven\com\github\jsqlparser\jsqlparser\5.1\jsqlparser-5.1.jar;D:\JAVA\maven\com\baomidou\mybatis-plus-jsqlparser-common\3.5.12\mybatis-plus-jsqlparser-common-3.5.12.jar;D:\JAVA\maven\com\baomidou\mybatis-plus-extension\3.5.12\mybatis-plus-extension-3.5.12.jar;D:\JAVA\maven\p6spy\p6spy\3.9.1\p6spy-3.9.1.jar;D:\JAVA\java_project\RuoYi-Vue-Plus-5.X\RuoYi-Vue-Plus-5.X\ruoyi-common\ruoyi-common-translation\target\classes;D:\JAVA\java_project\RuoYi-Vue-Plus-5.X\RuoYi-Vue-Plus-5.X\ruoyi-common\ruoyi-common-oss\target\classes;D:\JAVA\maven\software\amazon\awssdk\s3\2.28.22\s3-2.28.22.jar;D:\JAVA\maven\software\amazon\awssdk\aws-xml-protocol\2.28.22\aws-xml-protocol-2.28.22.jar;D:\JAVA\maven\software\amazon\awssdk\aws-query-protocol\2.28.22\aws-query-protocol-2.28.22.jar;D:\JAVA\maven\software\amazon\awssdk\protocol-core\2.28.22\protocol-core-2.28.22.jar;D:\JAVA\maven\software\amazon\awssdk\arns\2.28.22\arns-2.28.22.jar;D:\JAVA\maven\software\amazon\awssdk\profiles\2.28.22\profiles-2.28.22.jar;D:\JAVA\maven\software\amazon\awssdk\crt-core\2.28.22\crt-core-2.28.22.jar;D:\JAVA\maven\software\amazon\awssdk\http-auth\2.28.22\http-auth-2.28.22.jar;D:\JAVA\maven\software\amazon\awssdk\identity-spi\2.28.22\identity-spi-2.28.22.jar;D:\JAVA\maven\software\amazon\awssdk\http-auth-spi\2.28.22\http-auth-spi-2.28.22.jar;D:\JAVA\maven\software\amazon\awssdk\http-auth-aws\2.28.22\http-auth-aws-2.28.22.jar;D:\JAVA\maven\software\amazon\awssdk\checksums\2.28.22\checksums-2.28.22.jar;D:\JAVA\maven\software\amazon\awssdk\checksums-spi\2.28.22\checksums-spi-2.28.22.jar;D:\JAVA\maven\software\amazon\awssdk\retries-spi\2.28.22\retries-spi-2.28.22.jar;D:\JAVA\maven\software\amazon\awssdk\sdk-core\2.28.22\sdk-core-2.28.22.jar;D:\JAVA\maven\software\amazon\awssdk\retries\2.28.22\retries-2.28.22.jar;D:\JAVA\maven\software\amazon\awssdk\auth\2.28.22\auth-2.28.22.jar;D:\JAVA\maven\software\amazon\awssdk\http-auth-aws-eventstream\2.28.22\http-auth-aws-eventstream-2.28.22.jar;D:\JAVA\maven\software\amazon\eventstream\eventstream\1.0.1\eventstream-1.0.1.jar;D:\JAVA\maven\software\amazon\awssdk\http-client-spi\2.28.22\http-client-spi-2.28.22.jar;D:\JAVA\maven\software\amazon\awssdk\regions\2.28.22\regions-2.28.22.jar;D:\JAVA\maven\software\amazon\awssdk\annotations\2.28.22\annotations-2.28.22.jar;D:\JAVA\maven\software\amazon\awssdk\utils\2.28.22\utils-2.28.22.jar;D:\JAVA\maven\software\amazon\awssdk\aws-core\2.28.22\aws-core-2.28.22.jar;D:\JAVA\maven\software\amazon\awssdk\metrics-spi\2.28.22\metrics-spi-2.28.22.jar;D:\JAVA\maven\software\amazon\awssdk\json-utils\2.28.22\json-utils-2.28.22.jar;D:\JAVA\maven\software\amazon\awssdk\third-party-jackson-core\2.28.22\third-party-jackson-core-2.28.22.jar;D:\JAVA\maven\software\amazon\awssdk\endpoints-spi\2.28.22\endpoints-spi-2.28.22.jar;D:\JAVA\maven\software\amazon\awssdk\netty-nio-client\2.28.22\netty-nio-client-2.28.22.jar;D:\JAVA\maven\io\netty\netty-codec-http\4.1.122.Final\netty-codec-http-4.1.122.Final.jar;D:\JAVA\maven\io\netty\netty-codec-http2\4.1.122.Final\netty-codec-http2-4.1.122.Final.jar;D:\JAVA\maven\io\netty\netty-codec\4.1.122.Final\netty-codec-4.1.122.Final.jar;D:\JAVA\maven\io\netty\netty-transport\4.1.122.Final\netty-transport-4.1.122.Final.jar;D:\JAVA\maven\io\netty\netty-common\4.1.122.Final\netty-common-4.1.122.Final.jar;D:\JAVA\maven\io\netty\netty-buffer\4.1.122.Final\netty-buffer-4.1.122.Final.jar;D:\JAVA\maven\io\netty\netty-handler\4.1.122.Final\netty-handler-4.1.122.Final.jar;D:\JAVA\maven\io\netty\netty-transport-native-unix-common\4.1.122.Final\netty-transport-native-unix-common-4.1.122.Final.jar;D:\JAVA\maven\io\netty\netty-transport-classes-epoll\4.1.122.Final\netty-transport-classes-epoll-4.1.122.Final.jar;D:\JAVA\maven\io\netty\netty-resolver\4.1.122.Final\netty-resolver-4.1.122.Final.jar;D:\JAVA\maven\org\reactivestreams\reactive-streams\1.0.4\reactive-streams-1.0.4.jar;D:\JAVA\maven\software\amazon\awssdk\s3-transfer-manager\2.28.22\s3-transfer-manager-2.28.22.jar;D:\JAVA\java_project\RuoYi-Vue-Plus-5.X\RuoYi-Vue-Plus-5.X\ruoyi-common\ruoyi-common-log\target\classes;D:\JAVA\java_project\RuoYi-Vue-Plus-5.X\RuoYi-Vue-Plus-5.X\ruoyi-common\ruoyi-common-excel\target\classes;D:\JAVA\maven\cn\idev\excel\fastexcel\1.2.0\fastexcel-1.2.0.jar;D:\JAVA\maven\cn\idev\excel\fastexcel-core\1.2.0\fastexcel-core-1.2.0.jar;D:\JAVA\maven\org\apache\commons\commons-csv\1.11.0\commons-csv-1.11.0.jar;D:\JAVA\maven\commons-codec\commons-codec\1.17.2\commons-codec-1.17.2.jar;D:\JAVA\maven\org\apache\poi\poi\5.3.0\poi-5.3.0.jar;D:\JAVA\maven\org\apache\commons\commons-collections4\4.4\commons-collections4-4.4.jar;D:\JAVA\maven\org\apache\commons\commons-math3\3.6.1\commons-math3-3.6.1.jar;D:\JAVA\maven\com\zaxxer\SparseBitSet\1.3\SparseBitSet-1.3.jar;D:\JAVA\maven\org\apache\poi\poi-ooxml\5.3.0\poi-ooxml-5.3.0.jar;D:\JAVA\maven\org\apache\poi\poi-ooxml-lite\5.3.0\poi-ooxml-lite-5.3.0.jar;D:\JAVA\maven\org\apache\xmlbeans\xmlbeans\5.2.1\xmlbeans-5.2.1.jar;D:\JAVA\maven\org\apache\commons\commons-compress\1.26.2\commons-compress-1.26.2.jar;D:\JAVA\maven\com\github\virtuald\curvesapi\1.08\curvesapi-1.08.jar;D:\JAVA\maven\org\ehcache\ehcache\3.10.8\ehcache-3.10.8.jar;D:\JAVA\maven\org\glassfish\jaxb\jaxb-runtime\4.0.5\jaxb-runtime-4.0.5.jar;D:\JAVA\maven\org\glassfish\jaxb\jaxb-core\4.0.5\jaxb-core-4.0.5.jar;D:\JAVA\maven\org\glassfish\jaxb\txw2\4.0.5\txw2-4.0.5.jar;D:\JAVA\maven\com\sun\istack\istack-commons-runtime\4.1.2\istack-commons-runtime-4.1.2.jar;D:\JAVA\maven\commons-io\commons-io\2.16.1\commons-io-2.16.1.jar;D:\JAVA\maven\cn\idev\excel\fastexcel-support\0.0.1\fastexcel-support-0.0.1.jar;D:\JAVA\java_project\RuoYi-Vue-Plus-5.X\RuoYi-Vue-Plus-5.X\ruoyi-common\ruoyi-common-sms\target\classes;D:\JAVA\maven\org\dromara\sms4j\sms4j-spring-boot-starter\3.3.4\sms4j-spring-boot-starter-3.3.4.jar;D:\JAVA\maven\org\dromara\sms4j\sms4j-core\3.3.4\sms4j-core-3.3.4.jar;D:\JAVA\maven\org\dromara\sms4j\sms4j-provider\3.3.4\sms4j-provider-3.3.4.jar;D:\JAVA\maven\org\dromara\sms4j\sms4j-api\3.3.4\sms4j-api-3.3.4.jar;D:\JAVA\maven\org\dromara\sms4j\sms4j-comm\3.3.4\sms4j-comm-3.3.4.jar;D:\JAVA\maven\javax\xml\bind\jaxb-api\2.3.0\jaxb-api-2.3.0.jar;D:\JAVA\maven\com\sun\xml\bind\jaxb-impl\4.0.5\jaxb-impl-4.0.5.jar;D:\JAVA\maven\com\sun\xml\bind\jaxb-core\4.0.5\jaxb-core-4.0.5.jar;D:\JAVA\maven\javax\activation\activation\1.1.1\activation-1.1.1.jar;D:\JAVA\java_project\RuoYi-Vue-Plus-5.X\RuoYi-Vue-Plus-5.X\ruoyi-common\ruoyi-common-tenant\target\classes;D:\JAVA\java_project\RuoYi-Vue-Plus-5.X\RuoYi-Vue-Plus-5.X\ruoyi-common\ruoyi-common-security\target\classes;D:\JAVA\java_project\RuoYi-Vue-Plus-5.X\RuoYi-Vue-Plus-5.X\ruoyi-common\ruoyi-common-web\target\classes;D:\JAVA\maven\org\springframework\boot\spring-boot-starter-web\3.4.7\spring-boot-starter-web-3.4.7.jar;D:\JAVA\maven\org\springframework\boot\spring-boot-starter-json\3.4.7\spring-boot-starter-json-3.4.7.jar;D:\JAVA\maven\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.18.4\jackson-datatype-jdk8-2.18.4.jar;D:\JAVA\maven\com\fasterxml\jackson\module\jackson-module-parameter-names\2.18.4\jackson-module-parameter-names-2.18.4.jar;D:\JAVA\maven\org\springframework\boot\spring-boot-starter-undertow\3.4.7\spring-boot-starter-undertow-3.4.7.jar;D:\JAVA\maven\io\undertow\undertow-core\2.3.18.Final\undertow-core-2.3.18.Final.jar;D:\JAVA\maven\org\jboss\xnio\xnio-api\3.8.16.Final\xnio-api-3.8.16.Final.jar;D:\JAVA\maven\org\wildfly\common\wildfly-common\1.5.4.Final\wildfly-common-1.5.4.Final.jar;D:\JAVA\maven\org\wildfly\client\wildfly-client-config\1.0.1.Final\wildfly-client-config-1.0.1.Final.jar;D:\JAVA\maven\org\jboss\xnio\xnio-nio\3.8.16.Final\xnio-nio-3.8.16.Final.jar;D:\JAVA\maven\org\jboss\threads\jboss-threads\3.5.0.Final\jboss-threads-3.5.0.Final.jar;D:\JAVA\maven\io\undertow\undertow-servlet\2.3.18.Final\undertow-servlet-2.3.18.Final.jar;D:\JAVA\maven\io\undertow\undertow-websockets-jsr\2.3.18.Final\undertow-websockets-jsr-2.3.18.Final.jar;D:\JAVA\maven\jakarta\websocket\jakarta.websocket-api\2.1.1\jakarta.websocket-api-2.1.1.jar;D:\JAVA\maven\jakarta\websocket\jakarta.websocket-client-api\2.1.1\jakarta.websocket-client-api-2.1.1.jar;D:\JAVA\maven\org\springframework\boot\spring-boot-starter-actuator\3.4.7\spring-boot-starter-actuator-3.4.7.jar;D:\JAVA\maven\org\springframework\boot\spring-boot-actuator-autoconfigure\3.4.7\spring-boot-actuator-autoconfigure-3.4.7.jar;D:\JAVA\maven\org\springframework\boot\spring-boot-actuator\3.4.7\spring-boot-actuator-3.4.7.jar;D:\JAVA\maven\io\micrometer\micrometer-jakarta9\1.14.8\micrometer-jakarta9-1.14.8.jar;D:\JAVA\maven\io\micrometer\micrometer-core\1.14.8\micrometer-core-1.14.8.jar;D:\JAVA\maven\org\hdrhistogram\HdrHistogram\2.2.2\HdrHistogram-2.2.2.jar;D:\JAVA\maven\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar;D:\JAVA\maven\cn\hutool\hutool-captcha\5.8.38\hutool-captcha-5.8.38.jar;D:\JAVA\maven\cn\hutool\hutool-crypto\5.8.38\hutool-crypto-5.8.38.jar;D:\JAVA\java_project\RuoYi-Vue-Plus-5.X\RuoYi-Vue-Plus-5.X\ruoyi-common\ruoyi-common-idempotent\target\classes;D:\JAVA\maven\cn\dev33\sa-token-core\1.44.0\sa-token-core-1.44.0.jar;D:\JAVA\java_project\RuoYi-Vue-Plus-5.X\RuoYi-Vue-Plus-5.X\ruoyi-common\ruoyi-common-sensitive\target\classes;D:\JAVA\java_project\RuoYi-Vue-Plus-5.X\RuoYi-Vue-Plus-5.X\ruoyi-common\ruoyi-common-encrypt\target\classes;D:\JAVA\maven\org\bouncycastle\bcprov-jdk15to18\1.80\bcprov-jdk15to18-1.80.jar;D:\JAVA\java_project\RuoYi-Vue-Plus-5.X\RuoYi-Vue-Plus-5.X\ruoyi-common\ruoyi-common-websocket\target\classes;D:\JAVA\maven\org\springframework\boot\spring-boot-starter-websocket\3.4.7\spring-boot-starter-websocket-3.4.7.jar;D:\JAVA\maven\org\springframework\spring-messaging\6.2.8\spring-messaging-6.2.8.jar;D:\JAVA\maven\org\springframework\spring-websocket\6.2.8\spring-websocket-6.2.8.jar;D:\JAVA\java_project\RuoYi-Vue-Plus-5.X\RuoYi-Vue-Plus-5.X\ruoyi-common\ruoyi-common-sse\target\classes;D:\JAVA\java_project\RuoYi-Vue-Plus-5.X\RuoYi-Vue-Plus-5.X\ruoyi-modules\ruoyi-job\target\classes;D:\JAVA\java_project\RuoYi-Vue-Plus-5.X\RuoYi-Vue-Plus-5.X\ruoyi-common\ruoyi-common-job\target\classes;D:\JAVA\maven\org\springframework\boot\spring-boot-autoconfigure\3.4.7\spring-boot-autoconfigure-3.4.7.jar;D:\JAVA\maven\com\aizuda\snail-job-client-starter\1.5.0\snail-job-client-starter-1.5.0.jar;D:\JAVA\maven\com\aizuda\snail-job-client-job-core\1.5.0\snail-job-client-job-core-1.5.0.jar;D:\JAVA\maven\com\google\guava\guava\33.3.0-jre\guava-33.3.0-jre.jar;D:\JAVA\maven\com\google\guava\failureaccess\1.0.2\failureaccess-1.0.2.jar;D:\JAVA\maven\com\google\guava\listenablefuture\9999.0-empty-to-avoid-conflict-with-guava\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar;D:\JAVA\maven\com\google\code\findbugs\jsr305\3.0.2\jsr305-3.0.2.jar;D:\JAVA\maven\com\google\j2objc\j2objc-annotations\3.0.0\j2objc-annotations-3.0.0.jar;D:\JAVA\maven\jakarta\validation\jakarta.validation-api\3.0.2\jakarta.validation-api-3.0.2.jar;D:\JAVA\maven\com\aizuda\snail-job-common-server-api\1.5.0\snail-job-common-server-api-1.5.0.jar;D:\JAVA\maven\com\aizuda\snail-job-common-core\1.5.0\snail-job-common-core-1.5.0.jar;D:\JAVA\maven\com\google\protobuf\protobuf-java\3.25.6\protobuf-java-3.25.6.jar;D:\JAVA\maven\com\google\api\grpc\proto-google-common-protos\2.54.1\proto-google-common-protos-2.54.1.jar;D:\JAVA\maven\com\aizuda\snail-job-common-client-api\1.5.0\snail-job-common-client-api-1.5.0.jar;D:\JAVA\maven\com\aizuda\snail-job-client-common\1.5.0\snail-job-client-common-1.5.0.jar;D:\JAVA\maven\io\netty\netty-all\4.1.122.Final\netty-all-4.1.122.Final.jar;D:\JAVA\maven\io\netty\netty-codec-haproxy\4.1.122.Final\netty-codec-haproxy-4.1.122.Final.jar;D:\JAVA\maven\io\netty\netty-codec-memcache\4.1.122.Final\netty-codec-memcache-4.1.122.Final.jar;D:\JAVA\maven\io\netty\netty-codec-mqtt\4.1.122.Final\netty-codec-mqtt-4.1.122.Final.jar;D:\JAVA\maven\io\netty\netty-codec-redis\4.1.122.Final\netty-codec-redis-4.1.122.Final.jar;D:\JAVA\maven\io\netty\netty-codec-smtp\4.1.122.Final\netty-codec-smtp-4.1.122.Final.jar;D:\JAVA\maven\io\netty\netty-codec-socks\4.1.122.Final\netty-codec-socks-4.1.122.Final.jar;D:\JAVA\maven\io\netty\netty-codec-stomp\4.1.122.Final\netty-codec-stomp-4.1.122.Final.jar;D:\JAVA\maven\io\netty\netty-codec-xml\4.1.122.Final\netty-codec-xml-4.1.122.Final.jar;D:\JAVA\maven\io\netty\netty-handler-proxy\4.1.122.Final\netty-handler-proxy-4.1.122.Final.jar;D:\JAVA\maven\io\netty\netty-handler-ssl-ocsp\4.1.122.Final\netty-handler-ssl-ocsp-4.1.122.Final.jar;D:\JAVA\maven\io\netty\netty-transport-rxtx\4.1.122.Final\netty-transport-rxtx-4.1.122.Final.jar;D:\JAVA\maven\io\netty\netty-transport-sctp\4.1.122.Final\netty-transport-sctp-4.1.122.Final.jar;D:\JAVA\maven\io\netty\netty-transport-udt\4.1.122.Final\netty-transport-udt-4.1.122.Final.jar;D:\JAVA\maven\io\netty\netty-transport-classes-kqueue\4.1.122.Final\netty-transport-classes-kqueue-4.1.122.Final.jar;D:\JAVA\maven\io\netty\netty-resolver-dns-classes-macos\4.1.122.Final\netty-resolver-dns-classes-macos-4.1.122.Final.jar;D:\JAVA\maven\io\netty\netty-transport-native-epoll\4.1.122.Final\netty-transport-native-epoll-4.1.122.Final-linux-x86_64.jar;D:\JAVA\maven\io\netty\netty-transport-native-epoll\4.1.122.Final\netty-transport-native-epoll-4.1.122.Final-linux-aarch_64.jar;D:\JAVA\maven\io\netty\netty-transport-native-epoll\4.1.122.Final\netty-transport-native-epoll-4.1.122.Final-linux-riscv64.jar;D:\JAVA\maven\io\netty\netty-transport-native-kqueue\4.1.122.Final\netty-transport-native-kqueue-4.1.122.Final-osx-x86_64.jar;D:\JAVA\maven\io\netty\netty-transport-native-kqueue\4.1.122.Final\netty-transport-native-kqueue-4.1.122.Final-osx-aarch_64.jar;D:\JAVA\maven\io\netty\netty-resolver-dns-native-macos\4.1.122.Final\netty-resolver-dns-native-macos-4.1.122.Final-osx-x86_64.jar;D:\JAVA\maven\io\netty\netty-resolver-dns-native-macos\4.1.122.Final\netty-resolver-dns-native-macos-4.1.122.Final-osx-aarch_64.jar;D:\JAVA\maven\com\github\rholder\guava-retrying\2.0.0\guava-retrying-2.0.0.jar;D:\JAVA\maven\io\grpc\grpc-netty-shaded\1.71.0\grpc-netty-shaded-1.71.0.jar;D:\JAVA\maven\io\grpc\grpc-core\1.71.0\grpc-core-1.71.0.jar;D:\JAVA\maven\com\google\code\gson\gson\2.11.0\gson-2.11.0.jar;D:\JAVA\maven\com\google\android\annotations\4.1.1.4\annotations-4.1.1.4.jar;D:\JAVA\maven\io\grpc\grpc-context\1.71.0\grpc-context-1.71.0.jar;D:\JAVA\maven\io\perfmark\perfmark-api\0.27.0\perfmark-api-0.27.0.jar;D:\JAVA\maven\org\codehaus\mojo\animal-sniffer-annotations\1.24\animal-sniffer-annotations-1.24.jar;D:\JAVA\maven\io\grpc\grpc-protobuf\1.71.0\grpc-protobuf-1.71.0.jar;D:\JAVA\maven\io\grpc\grpc-protobuf-lite\1.71.0\grpc-protobuf-lite-1.71.0.jar;D:\JAVA\maven\io\grpc\grpc-stub\1.71.0\grpc-stub-1.71.0.jar;D:\JAVA\maven\io\grpc\grpc-api\1.71.0\grpc-api-1.71.0.jar;D:\JAVA\maven\io\grpc\grpc-util\1.71.0\grpc-util-1.71.0.jar;D:\JAVA\maven\com\aizuda\snail-job-common-log\1.5.0\snail-job-common-log-1.5.0.jar;D:\JAVA\java_project\RuoYi-Vue-Plus-5.X\RuoYi-Vue-Plus-5.X\ruoyi-modules\ruoyi-generator\target\classes;D:\JAVA\maven\org\apache\velocity\velocity-engine-core\2.3\velocity-engine-core-2.3.jar;D:\JAVA\maven\org\slf4j\slf4j-api\2.0.17\slf4j-api-2.0.17.jar;D:\JAVA\maven\org\anyline\anyline-environment-spring-data-jdbc\8.7.2-20250603\anyline-environment-spring-data-jdbc-8.7.2-20250603.jar;D:\JAVA\maven\org\anyline\anyline-data-jdbc\8.7.2-20250603\anyline-data-jdbc-8.7.2-20250603.jar;D:\JAVA\maven\org\anyline\anyline-data\8.7.2-20250603\anyline-data-8.7.2-20250603.jar;D:\JAVA\maven\org\anyline\anyline-core\8.7.2-20250603\anyline-core-8.7.2-20250603.jar;D:\JAVA\maven\org\dom4j\dom4j\2.1.4\dom4j-2.1.4.jar;D:\JAVA\maven\org\anyline\anyline-oro\8.7.2-20250603\anyline-oro-8.7.2-20250603.jar;D:\JAVA\maven\ognl\ognl\3.2.10\ognl-3.2.10.jar;D:\JAVA\maven\org\javassist\javassist\3.24.1-GA\javassist-3.24.1-GA.jar;D:\JAVA\maven\org\anyline\anyline-log\8.7.2-20250603\anyline-log-8.7.2-20250603.jar;D:\JAVA\maven\org\anyline\anyline-environment-spring-data\8.7.2-20250603\anyline-environment-spring-data-8.7.2-20250603.jar;D:\JAVA\maven\org\anyline\anyline-environment-spring\8.7.2-20250603\anyline-environment-spring-8.7.2-20250603.jar;D:\JAVA\maven\org\anyline\anyline-data-jdbc-mysql\8.7.2-20250603\anyline-data-jdbc-mysql-8.7.2-20250603.jar;D:\JAVA\java_project\RuoYi-Vue-Plus-5.X\RuoYi-Vue-Plus-5.X\ruoyi-modules\ruoyi-demo\target\classes;D:\JAVA\java_project\RuoYi-Vue-Plus-5.X\RuoYi-Vue-Plus-5.X\ruoyi-modules\ruoyi-workflow\target\classes;D:\JAVA\maven\org\dromara\warm\warm-flow-mybatis-plus-sb3-starter\1.7.4\warm-flow-mybatis-plus-sb3-starter-1.7.4.jar;D:\JAVA\maven\org\dromara\warm\warm-flow-mybatis-plus-sb-starter\1.7.4\warm-flow-mybatis-plus-sb-starter-1.7.4.jar;D:\JAVA\maven\org\dromara\warm\warm-flow-mybatis-plus-core\1.7.4\warm-flow-mybatis-plus-core-1.7.4.jar;D:\JAVA\maven\org\dromara\warm\warm-flow-plugin-ui-sb-web\1.7.4\warm-flow-plugin-ui-sb-web-1.7.4.jar;D:\JAVA\maven\org\dromara\warm\warm-flow-plugin-modes-sb\1.7.4\warm-flow-plugin-modes-sb-1.7.4.jar;D:\JAVA\maven\org\dromara\warm\warm-flow-core\1.7.4\warm-flow-core-1.7.4.jar;D:\JAVA\maven\org\dromara\warm\warm-flow-plugin-json\1.7.4\warm-flow-plugin-json-1.7.4.jar;D:\JAVA\maven\org\dromara\warm\warm-flow-plugin-ui-core\1.7.4\warm-flow-plugin-ui-core-1.7.4.jar;D:\JAVA\maven\org\dromara\warm\warm-flow-plugin-vue3-ui\1.7.4\warm-flow-plugin-vue3-ui-1.7.4.jar;D:\JAVA\maven\org\springframework\spring-tx\6.2.8\spring-tx-6.2.8.jar;D:\JAVA\maven\de\codecentric\spring-boot-admin-starter-client\3.4.7\spring-boot-admin-starter-client-3.4.7.jar;D:\JAVA\maven\de\codecentric\spring-boot-admin-client\3.4.7\spring-boot-admin-client-3.4.7.jar;D:\JAVA\maven\org\springframework\boot\spring-boot-starter\3.4.7\spring-boot-starter-3.4.7.jar;D:\JAVA\maven\org\springframework\boot\spring-boot\3.4.7\spring-boot-3.4.7.jar;D:\JAVA\maven\org\springframework\boot\spring-boot-starter-logging\3.4.7\spring-boot-starter-logging-3.4.7.jar;D:\JAVA\maven\ch\qos\logback\logback-classic\1.5.18\logback-classic-1.5.18.jar;D:\JAVA\maven\ch\qos\logback\logback-core\1.5.18\logback-core-1.5.18.jar;D:\JAVA\maven\org\apache\logging\log4j\log4j-to-slf4j\2.24.3\log4j-to-slf4j-2.24.3.jar;D:\JAVA\maven\org\apache\logging\log4j\log4j-api\2.24.3\log4j-api-2.24.3.jar;D:\JAVA\maven\org\slf4j\jul-to-slf4j\2.0.17\jul-to-slf4j-2.0.17.jar;D:\JAVA\maven\jakarta\annotation\jakarta.annotation-api\2.1.1\jakarta.annotation-api-2.1.1.jar;D:\JAVA\maven\org\yaml\snakeyaml\2.3\snakeyaml-2.3.jar;D:\JAVA\maven\jakarta\xml\bind\jakarta.xml.bind-api\4.0.2\jakarta.xml.bind-api-4.0.2.jar;D:\JAVA\maven\net\bytebuddy\byte-buddy\1.15.11\byte-buddy-1.15.11.jar;D:\JAVA\maven\org\objenesis\objenesis\3.3\objenesis-3.3.jar;D:\JAVA\maven\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;D:\JAVA\maven\org\springframework\spring-core\6.2.8\spring-core-6.2.8.jar;D:\JAVA\maven\org\springframework\spring-jcl\6.2.8\spring-jcl-6.2.8.jar org.dromara.DromaraApplication Logging system failed to initialize using configuration from 'classpath:logback-plus.xml' java.lang.IllegalStateException: Logback configuration error detected: ERROR in ch.qos.logback.core.model.processor.AppenderModelHandler - Could not create an Appender of type [com.example.logging.WebSocketAppender]. ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type com.example.logging.WebSocketAppender ERROR in ch.qos.logback.core.model.processor.DefaultProcessor@66eb985d - Failed to traverse model appender ch.qos.logback.core.model.processor.ModelHandlerException: ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type com.example.logging.WebSocketAppender ERROR in ch.qos.logback.core.model.processor.AppenderModelHandler - Could not create an Appender of type [com.example.logging.WebSocketAppender]. ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type com.example.logging.WebSocketAppender ERROR in ch.qos.logback.core.model.processor.DefaultProcessor@66eb985d - Failed to traverse model appender ch.qos.logback.core.model.processor.ModelHandlerException: ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type com.example.logging.WebSocketAppender at org.springframework.boot.logging.logback.LogbackLoggingSystem.reportConfigurationErrorsIfNecessary(LogbackLoggingSystem.java:291) at org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:269) at org.springframework.boot.logging.AbstractLoggingSystem.initializeWithSpecificConfig(AbstractLoggingSystem.java:67)
最新发布
08-07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值