java:jackson 五:Custom Jackson Annotation

java:jackson 五:Custom Jackson Annotation

1 前言

参考文档地址:

https://www.baeldung.com/jackson

https://www.baeldung.com/jackson-annotations

SpringBoot自带的jackson版本如下:

<parent>
    <artifactId>spring-boot-starter-parent</artifactId>
    <groupId>org.springframework.boot</groupId>
    <version>2.5.4</version>
</parent>

在这里插入图片描述

或者不使用SpringBoot情况下,单独配置jackson-databind版本:

<properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
    <jackson-databind.version>2.14.1</jackson-databind.version>
</properties>
    
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>${jackson-databind.version}</version>
</dependency>

同时使用SpringBoot和自定义的jackson版本时,注意避免依赖冲突。

2 使用


@JacksonAnnotationsInside

Next let’s see how to create a custom Jackson annotation. We can make use of the @JacksonAnnotationsInside annotation

自定义jackson的注解时,如果使用了@JsonSerialize,相应的,@JsonPropertyOrder、@JsonInclude将失效,依赖自定义的序列化器等实现即可:

package com.xiaoxu.test.jackson;

import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.deser.ContextualDeserializer;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.ContextualSerializer;
import lombok.Data;
import lombok.ToString;

import java.io.IOException;
import java.lang.annotation.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.Optional;

/**
 * @author xiaoxu
 * @date 2022-12-30
 * java_demo:com.xiaoxu.test.jackson.CustomJackSonAnnotationTest
 */
public class CustomJackSonAnnotationTest {
    private static final ObjectMapper objectMapper;
    static {
        objectMapper = new ObjectMapper();
        objectMapper.configure(SerializationFeature.INDENT_OUTPUT,true);

        /* 单独使用了@JsonSerialize(using = CusAnnoSerializer.class),可省略全局的配置 */
        SimpleModule simpleModule = new SimpleModule();
        simpleModule.addSerializer(CusAnno.class, new CusAnnoSerializer());
        simpleModule.addDeserializer(CusAnno.class, new CusAnnoDeSerializer());
        objectMapper.registerModule(simpleModule);
    }

    public static void demo() throws Exception{
        CusAnno cusAnno = new CusAnno();
        cusAnno.setToday(new Date());
        cusAnno.setTodayNew(LocalDateTime.now());

        Optional.ofNullable(CusAnno.class.getAnnotation(CusJack.class)).ifPresent(annotation -> {
            if(annotation.isEffect()){
                System.out.println("CusJack注解生效:");
                try {
                    System.out.println(objectMapper.writeValueAsString(cusAnno));
                } catch (JsonProcessingException e) {
                    throw new RuntimeException(e);
                }
            }else{
                System.out.println("CusJack注解未生效.");
            }
        });
        System.out.print("\n\n");
        WrapCusAnno wrapCusAnno = new WrapCusAnno();
        wrapCusAnno.setMid(999);
        wrapCusAnno.setCusAnno(cusAnno);
        System.out.println(objectMapper.writeValueAsString(wrapCusAnno));

        System.out.print("\n\n");
        System.out.println(objectMapper.readValue(objectMapper.writeValueAsString(cusAnno), CusAnno.class));
        System.out.print("\n\n");
        System.out.println(objectMapper.readValue(objectMapper.writeValueAsString(wrapCusAnno), WrapCusAnno.class));
    }

    public static void main(String[] args) throws Exception{
        demo();
    }
}

class CusAnnoSerializer extends JsonSerializer<CusAnno> implements ContextualSerializer{

    @Override
    public void serialize(CusAnno cusAnno, JsonGenerator jsonGenerator, 
                          SerializerProvider serializerProvider) throws IOException {
        /* 注意:若使用writeObject()方法,不要直接把参数 cusAnno 再次写入,会造成StackOverflowError 错误*/
        jsonGenerator.writeStartObject();
        /* 改变自定义的顺序即可实现类似 @JsonPropertyOrder(value = {"today","todayNew","name","id"}) 的效果 */
        jsonGenerator.writeStringField("name",cusAnno.getName());
        jsonGenerator.writeNumberField("id",cusAnno.id+1);

        Optional.ofNullable(cusAnno.getToday()).ifPresent(date -> {
            try {
                jsonGenerator.writeStringField("nowDay",cusAnno.getToday().toString());
            } catch (IOException e) {
                throw new RuntimeException("today转换异常:"+e.getMessage(),e.getCause());
            }
        });
        Optional.ofNullable(cusAnno.getTodayNew()).ifPresent(localDate -> {
            try {
                jsonGenerator.writeStringField("localDate",
                        cusAnno.getTodayNew().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")));
            } catch (IOException e) {
                throw new RuntimeException("todayNew转换异常:"+e.getMessage(),e.getCause());
            }
        });
        jsonGenerator.writeEndObject();
    }

    @Override
    public JsonSerializer<CusAnno> createContextual(SerializerProvider serializerProvider, 
                                                    BeanProperty beanProperty) throws JsonMappingException {
        System.out.println("序列化BeanProperty:"+beanProperty);
        Optional.ofNullable(beanProperty).ifPresent(beanProperty1 -> {
            System.out.println("序列化BeanProperty不为null:"+beanProperty1.getAnnotation(CusJack.class));
        });
        return this;
    }

}

class CusAnnoDeSerializer extends JsonDeserializer<CusAnno> implements ContextualDeserializer{

    @Override
    public CusAnno deserialize(JsonParser jsonParser, 
                               DeserializationContext deserializationContext) 
            throws IOException, JsonProcessingException {
        JsonNode node = jsonParser.getCodec().readTree(jsonParser);
        int id = node.get("id").intValue();
        String name = node.get("name").asText();
        /* 注意:node.get("name"),若name不存在,则该值为null,可能导致NPE */
        if(node.get("name").isNull()){
            name = "defualt-xiaoxu";
        }

        String localDate = node.get("localDate").asText();
        LocalDateTime dtime = LocalDateTime.parse(localDate, 
                DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));

        CusAnno cusAnnoDe = new CusAnno();
        cusAnnoDe.setId(id);
        cusAnnoDe.setName(name);
        cusAnnoDe.setToday(new Date());
        cusAnnoDe.setTodayNew(dtime);
        return cusAnnoDe;
    }

    @Override
    public JsonDeserializer<?> createContextual(DeserializationContext deserializationContext, 
                                                BeanProperty beanProperty) throws JsonMappingException {
        System.out.println("反序列化BeanProperty:"+beanProperty);
        Optional.ofNullable(beanProperty).ifPresent(beanProperty1 -> {
            System.out.println("反序列化BeanProperty不为null:"+beanProperty1.getAnnotation(CusJack.class));
        });
        return this;
    }
}

//@CusJack  类上一定不能有该注解
@ToString
@Data
class WrapCusAnno{
    int mid;
    //字段上可有可无该@CusJack注解,但是类上不能有,直接带上即可
    @CusJack
    CusAnno cusAnno;
}

@CusJack(isEffect = true)
@Data
class CusAnno{
    int id;
    String name;
    Date today;
    LocalDateTime todayNew;
}

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.FIELD})
@JacksonAnnotationsInside
/* 使用 JsonSerialize自定义的序列化器时,序列化注解@JsonPropertyOrder、
@JsonInclude将不会生效,需要自定义展示效果 */
@JsonPropertyOrder(value = {"today","todayNew","name","id"})
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonSerialize(using = CusAnnoSerializer.class)
@JsonDeserialize(using = CusAnnoDeSerializer.class)
@interface CusJack{
    boolean isEffect() default false;
}

执行结果如下:

CusJack注解生效:
序列化BeanProperty:null
{
  "name" : null,
  "id" : 1,
  "nowDay" : "Fri Dec 30 16:33:18 CST 2022",
  "localDate" : "2022-12-30 16:33"
}


序列化BeanProperty:com.fasterxml.jackson.databind.BeanProperty$Std@67205a84
序列化BeanProperty不为null:@com.xiaoxu.test.jackson.CusJack(isEffect=false)
{
  "mid" : 999,
  "cusAnno" : {
    "name" : null,
    "id" : 1,
    "nowDay" : "Fri Dec 30 16:33:18 CST 2022",
    "localDate" : "2022-12-30 16:33"
  }
}


反序列化BeanProperty:null
CusAnno(id=1, name=defualt-xiaoxu, today=Fri Dec 30 16:33:18 CST 2022, todayNew=2022-12-30T16:33)


反序列化BeanProperty:[property 'cusAnno']
反序列化BeanProperty不为null:@com.xiaoxu.test.jackson.CusJack(isEffect=false)
反序列化BeanProperty:[property 'cusAnno']
反序列化BeanProperty不为null:@com.xiaoxu.test.jackson.CusJack(isEffect=false)
WrapCusAnno(mid=999, cusAnno=CusAnno(id=1, name=defualt-xiaoxu, today=Fri Dec 30 16:33:18 CST 2022, todayNew=2022-12-30T16:33))

可见,自定义jackson注解,可以整合多个注解,使用自定义的1个注解,可达到相同效果。


"C:\Program Files\Java\jdk-21\bin\java.exe" -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:12072,suspend=y,server=n -javaagent:C:\work\IDEA20250205\plugins\java\lib\rt\debugger-agent.jar=file:///C:/Users/Administrator/AppData/Local/Temp/capture6370330291311201913.props -agentpath:C:\work\IDEA20250205\lib\async-profiler\amd64\libasyncProfiler.dll=version,jfr,event=wall,interval=10ms,cstack=no,file=C:\Users\Administrator\IdeaSnapshots\Run_2025_12_01_102829.jfr,dbghelppath=C:\work\IDEA20250205\lib\async-profiler\amd64\dbghelp.dll,log=C:\Users\Administrator\AppData\Local\Temp\Run_2025_12_01_102829.jfr.log.txt,logLevel=DEBUG -Dkotlinx.coroutines.debug.enable.creation.stack.trace=false -Ddebugger.agent.enable.coroutines=true -Dkotlinx.coroutines.debug.enable.flows.stack.trace=true -Dkotlinx.coroutines.debug.enable.mutable.state.flows.stack.trace=true -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath C:\work\ideaWorkSpace\Parent\target\classes;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter\3.2.5\spring-boot-starter-3.2.5.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot\3.2.5\spring-boot-3.2.5.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-context\6.1.6\spring-context-6.1.6.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\3.2.5\spring-boot-autoconfigure-3.2.5.jar;C:\Users\Administrator\.m2\repository\jakarta\annotation\jakarta.annotation-api\2.1.1\jakarta.annotation-api-2.1.1.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-core\6.1.6\spring-core-6.1.6.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-jcl\6.1.6\spring-jcl-6.1.6.jar;C:\Users\Administrator\.m2\repository\org\yaml\snakeyaml\2.2\snakeyaml-2.2.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-web\3.2.5\spring-boot-starter-web-3.2.5.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-json\3.2.5\spring-boot-starter-json-3.2.5.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.15.4\jackson-datatype-jdk8-2.15.4.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.15.4\jackson-datatype-jsr310-2.15.4.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.15.4\jackson-module-parameter-names-2.15.4.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\3.2.5\spring-boot-starter-tomcat-3.2.5.jar;C:\Users\Administrator\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\10.1.20\tomcat-embed-core-10.1.20.jar;C:\Users\Administrator\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\10.1.20\tomcat-embed-el-10.1.20.jar;C:\Users\Administrator\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\10.1.20\tomcat-embed-websocket-10.1.20.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-web\6.1.6\spring-web-6.1.6.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-beans\6.1.6\spring-beans-6.1.6.jar;C:\Users\Administrator\.m2\repository\io\micrometer\micrometer-observation\1.12.5\micrometer-observation-1.12.5.jar;C:\Users\Administrator\.m2\repository\io\micrometer\micrometer-commons\1.12.5\micrometer-commons-1.12.5.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-webmvc\6.1.6\spring-webmvc-6.1.6.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-aop\6.1.6\spring-aop-6.1.6.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-expression\6.1.6\spring-expression-6.1.6.jar;C:\Users\Administrator\.m2\repository\com\baomidou\mybatis-plus-boot-starter\3.5.7\mybatis-plus-boot-starter-3.5.7.jar;C:\Users\Administrator\.m2\repository\com\baomidou\mybatis-plus\3.5.7\mybatis-plus-3.5.7.jar;C:\Users\Administrator\.m2\repository\com\baomidou\mybatis-plus-core\3.5.7\mybatis-plus-core-3.5.7.jar;C:\Users\Administrator\.m2\repository\com\baomidou\mybatis-plus-extension\3.5.7\mybatis-plus-extension-3.5.7.jar;C:\Users\Administrator\.m2\repository\org\mybatis\mybatis\3.5.16\mybatis-3.5.16.jar;C:\Users\Administrator\.m2\repository\com\github\jsqlparser\jsqlparser\4.9\jsqlparser-4.9.jar;C:\Users\Administrator\.m2\repository\com\baomidou\mybatis-plus-spring-boot-autoconfigure\3.5.7\mybatis-plus-spring-boot-autoconfigure-3.5.7.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\3.2.5\spring-boot-starter-jdbc-3.2.5.jar;C:\Users\Administrator\.m2\repository\com\zaxxer\HikariCP\5.0.1\HikariCP-5.0.1.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-jdbc\6.1.6\spring-jdbc-6.1.6.jar;C:\Users\Administrator\.m2\repository\org\mybatis\mybatis-spring\3.0.3\mybatis-spring-3.0.3.jar;C:\Users\Administrator\.m2\repository\com\alibaba\druid-spring-boot-3-starter\1.2.18\druid-spring-boot-3-starter-1.2.18.jar;C:\Users\Administrator\.m2\repository\com\alibaba\druid\1.2.18\druid-1.2.18.jar;C:\Users\Administrator\.m2\repository\org\slf4j\slf4j-api\2.0.13\slf4j-api-2.0.13.jar;C:\Users\Administrator\.m2\repository\com\mysql\mysql-connector-j\8.0.33\mysql-connector-j-8.0.33.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-data-redis\3.2.5\spring-boot-starter-data-redis-3.2.5.jar;C:\Users\Administrator\.m2\repository\io\lettuce\lettuce-core\6.3.2.RELEASE\lettuce-core-6.3.2.RELEASE.jar;C:\Users\Administrator\.m2\repository\io\netty\netty-common\4.1.109.Final\netty-common-4.1.109.Final.jar;C:\Users\Administrator\.m2\repository\io\netty\netty-handler\4.1.109.Final\netty-handler-4.1.109.Final.jar;C:\Users\Administrator\.m2\repository\io\netty\netty-resolver\4.1.109.Final\netty-resolver-4.1.109.Final.jar;C:\Users\Administrator\.m2\repository\io\netty\netty-buffer\4.1.109.Final\netty-buffer-4.1.109.Final.jar;C:\Users\Administrator\.m2\repository\io\netty\netty-transport-native-unix-common\4.1.109.Final\netty-transport-native-unix-common-4.1.109.Final.jar;C:\Users\Administrator\.m2\repository\io\netty\netty-codec\4.1.109.Final\netty-codec-4.1.109.Final.jar;C:\Users\Administrator\.m2\repository\io\netty\netty-transport\4.1.109.Final\netty-transport-4.1.109.Final.jar;C:\Users\Administrator\.m2\repository\io\projectreactor\reactor-core\3.6.5\reactor-core-3.6.5.jar;C:\Users\Administrator\.m2\repository\org\reactivestreams\reactive-streams\1.0.4\reactive-streams-1.0.4.jar;C:\Users\Administrator\.m2\repository\org\springframework\data\spring-data-redis\3.2.5\spring-data-redis-3.2.5.jar;C:\Users\Administrator\.m2\repository\org\springframework\data\spring-data-keyvalue\3.2.5\spring-data-keyvalue-3.2.5.jar;C:\Users\Administrator\.m2\repository\org\springframework\data\spring-data-commons\3.2.5\spring-data-commons-3.2.5.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-tx\6.1.6\spring-tx-6.1.6.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-oxm\6.1.6\spring-oxm-6.1.6.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-cache\3.2.5\spring-boot-starter-cache-3.2.5.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-context-support\6.1.6\spring-context-support-6.1.6.jar;C:\Users\Administrator\.m2\repository\org\projectlombok\lombok\1.18.30\lombok-1.18.30.jar;C:\Users\Administrator\.m2\repository\cn\hutool\hutool-all\5.8.22\hutool-all-5.8.22.jar;C:\Users\Administrator\.m2\repository\com\alibaba\fastjson\2.0.43\fastjson-2.0.43.jar;C:\Users\Administrator\.m2\repository\com\alibaba\fastjson2\fastjson2-extension\2.0.43\fastjson2-extension-2.0.43.jar;C:\Users\Administrator\.m2\repository\com\alibaba\fastjson2\fastjson2\2.0.43\fastjson2-2.0.43.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.15.4\jackson-databind-2.15.4.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.15.4\jackson-annotations-2.15.4.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.15.4\jackson-core-2.15.4.jar;C:\Users\Administrator\.m2\repository\com\squareup\okhttp3\okhttp\4.12.0\okhttp-4.12.0.jar;C:\Users\Administrator\.m2\repository\com\squareup\okio\okio\3.6.0\okio-3.6.0.jar;C:\Users\Administrator\.m2\repository\com\squareup\okio\okio-jvm\3.6.0\okio-jvm-3.6.0.jar;C:\Users\Administrator\.m2\repository\org\jetbrains\kotlin\kotlin-stdlib-common\1.9.23\kotlin-stdlib-common-1.9.23.jar;C:\Users\Administrator\.m2\repository\org\jetbrains\kotlin\kotlin-stdlib-jdk8\1.9.23\kotlin-stdlib-jdk8-1.9.23.jar;C:\Users\Administrator\.m2\repository\org\jetbrains\kotlin\kotlin-stdlib\1.9.23\kotlin-stdlib-1.9.23.jar;C:\Users\Administrator\.m2\repository\org\jetbrains\annotations\13.0\annotations-13.0.jar;C:\Users\Administrator\.m2\repository\org\jetbrains\kotlin\kotlin-stdlib-jdk7\1.9.23\kotlin-stdlib-jdk7-1.9.23.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-log4j2\3.2.5\spring-boot-starter-log4j2-3.2.5.jar;C:\Users\Administrator\.m2\repository\org\apache\logging\log4j\log4j-slf4j2-impl\2.21.1\log4j-slf4j2-impl-2.21.1.jar;C:\Users\Administrator\.m2\repository\org\apache\logging\log4j\log4j-api\2.21.1\log4j-api-2.21.1.jar;C:\Users\Administrator\.m2\repository\org\apache\logging\log4j\log4j-core\2.21.1\log4j-core-2.21.1.jar;C:\Users\Administrator\.m2\repository\org\apache\logging\log4j\log4j-jul\2.21.1\log4j-jul-2.21.1.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-aspects\6.1.6\spring-aspects-6.1.6.jar;C:\Users\Administrator\.m2\repository\org\aspectj\aspectjweaver\1.9.22\aspectjweaver-1.9.22.jar;C:\Users\Administrator\.m2\repository\com\github\ulisesbocchio\jasypt-spring-boot-starter\3.0.5\jasypt-spring-boot-starter-3.0.5.jar;C:\Users\Administrator\.m2\repository\com\github\ulisesbocchio\jasypt-spring-boot\3.0.5\jasypt-spring-boot-3.0.5.jar;C:\Users\Administrator\.m2\repository\org\jasypt\jasypt\1.9.3\jasypt-1.9.3.jar;C:\Users\Administrator\.m2\repository\com\gitee\sunchenbin\mybatis\actable\mybatis-enhance-actable\1.5.0.RELEASE\mybatis-enhance-actable-1.5.0.RELEASE.jar;C:\Users\Administrator\.m2\repository\com\google\guava\guava\25.0-jre\guava-25.0-jre.jar;C:\Users\Administrator\.m2\repository\com\google\code\findbugs\jsr305\1.3.9\jsr305-1.3.9.jar;C:\Users\Administrator\.m2\repository\org\checkerframework\checker-compat-qual\2.0.0\checker-compat-qual-2.0.0.jar;C:\Users\Administrator\.m2\repository\com\google\errorprone\error_prone_annotations\2.1.3\error_prone_annotations-2.1.3.jar;C:\Users\Administrator\.m2\repository\com\google\j2objc\j2objc-annotations\1.1\j2objc-annotations-1.1.jar;C:\Users\Administrator\.m2\repository\org\codehaus\mojo\animal-sniffer-annotations\1.14\animal-sniffer-annotations-1.14.jar;C:\Users\Administrator\.m2\repository\javax\persistence\persistence-api\1.0\persistence-api-1.0.jar;C:\Users\Administrator\.m2\repository\com\baomidou\mybatis-plus-annotation\3.4.1\mybatis-plus-annotation-3.4.1.jar;C:\work\IDEA20250205\lib\idea_rt.jar com.example.parent.Run Connected to the target VM, address: '127.0.0.1:12072', transport: 'socket' . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.2.5) 2025-12-01 10:28:30.536 | INFO | main | org.springframework.boot.StartupInfoLogger.logStarting(StartupInfoLogger.java:50) >>>>> Starting Run using Java 21.0.9 with PID 20972 (C:\work\ideaWorkSpace\Parent\target\classes started by Administrator in C:\work\ideaWorkSpace\Parent) 2025-12-01 10:28:30.545 | INFO | main | org.springframework.boot.SpringApplication.logStartupProfileInfo(SpringApplication.java:660) >>>>> The following 1 profile is active: "dev" 2025-12-01 10:28:31.179 | INFO | main | org.springframework.data.repository.config.RepositoryConfigurationDelegate.multipleStoresDetected(RepositoryConfigurationDelegate.java:295) >>>>> Multiple Spring Data modules found, entering strict repository configuration mode 2025-12-01 10:28:31.182 | INFO | main | org.springframework.data.repository.config.RepositoryConfigurationDelegate.registerRepositoriesIn(RepositoryConfigurationDelegate.java:143) >>>>> Bootstrapping Spring Data Redis repositories in DEFAULT mode. 2025-12-01 10:28:31.215 | INFO | main | org.springframework.data.repository.config.RepositoryConfigurationDelegate.registerRepositoriesIn(RepositoryConfigurationDelegate.java:211) >>>>> Finished Spring Data repository scanning in 20 ms. Found 0 Redis repository interfaces. 2025-12-01 10:28:31.461 | INFO | main | com.ulisesbocchio.jasyptspringboot.configuration.EnableEncryptablePropertiesBeanFactoryPostProcessor.postProcessBeanFactory(EnableEncryptablePropertiesBeanFactoryPostProcessor.java:44) >>>>> Post-processing PropertySource instances 2025-12-01 10:28:31.463 | INFO | main | com.ulisesbocchio.jasyptspringboot.EncryptablePropertySourceConverter.makeEncryptable(EncryptablePropertySourceConverter.java:105) >>>>> Skipping PropertySource configurationProperties [class org.springframework.boot.context.properties.source.ConfigurationPropertySourcesPropertySource 2025-12-01 10:28:31.464 | INFO | main | com.ulisesbocchio.jasyptspringboot.EncryptablePropertySourceConverter.makeEncryptable(EncryptablePropertySourceConverter.java:105) >>>>> Skipping PropertySource servletConfigInitParams [class org.springframework.core.env.PropertySource$StubPropertySource 2025-12-01 10:28:31.464 | INFO | main | com.ulisesbocchio.jasyptspringboot.EncryptablePropertySourceConverter.makeEncryptable(EncryptablePropertySourceConverter.java:105) >>>>> Skipping PropertySource servletContextInitParams [class org.springframework.core.env.PropertySource$StubPropertySource 2025-12-01 10:28:31.465 | INFO | main | com.ulisesbocchio.jasyptspringboot.EncryptablePropertySourceConverter.makeEncryptable(EncryptablePropertySourceConverter.java:110) >>>>> Converting PropertySource systemProperties [org.springframework.core.env.PropertiesPropertySource] to EncryptableMapPropertySourceWrapper 2025-12-01 10:28:31.465 | INFO | main | com.ulisesbocchio.jasyptspringboot.EncryptablePropertySourceConverter.makeEncryptable(EncryptablePropertySourceConverter.java:110) >>>>> Converting PropertySource systemEnvironment [org.springframework.boot.env.SystemEnvironmentPropertySourceEnvironmentPostProcessor$OriginAwareSystemEnvironmentPropertySource] to EncryptableSystemEnvironmentPropertySourceWrapper 2025-12-01 10:28:31.466 | INFO | main | com.ulisesbocchio.jasyptspringboot.EncryptablePropertySourceConverter.makeEncryptable(EncryptablePropertySourceConverter.java:110) >>>>> Converting PropertySource random [org.springframework.boot.env.RandomValuePropertySource] to EncryptablePropertySourceWrapper 2025-12-01 10:28:31.466 | INFO | main | com.ulisesbocchio.jasyptspringboot.EncryptablePropertySourceConverter.makeEncryptable(EncryptablePropertySourceConverter.java:110) >>>>> Converting PropertySource Config resource 'class path resource [application-dev.yml]' via location 'optional:classpath:/' [org.springframework.boot.env.OriginTrackedMapPropertySource] to EncryptableMapPropertySourceWrapper 2025-12-01 10:28:31.466 | INFO | main | com.ulisesbocchio.jasyptspringboot.EncryptablePropertySourceConverter.makeEncryptable(EncryptablePropertySourceConverter.java:110) >>>>> Converting PropertySource Config resource 'class path resource [application.properties]' via location 'optional:classpath:/' [org.springframework.boot.env.OriginTrackedMapPropertySource] to EncryptableMapPropertySourceWrapper 2025-12-01 10:28:31.467 | INFO | main | com.ulisesbocchio.jasyptspringboot.EncryptablePropertySourceConverter.makeEncryptable(EncryptablePropertySourceConverter.java:110) >>>>> Converting PropertySource Config resource 'class path resource [application.yml]' via location 'optional:classpath:/' [org.springframework.boot.env.OriginTrackedMapPropertySource] to EncryptableMapPropertySourceWrapper 2025-12-01 10:28:31.592 | WARN | main | org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker.postProcessAfterInitialization(PostProcessorRegistrationDelegate.java:437) >>>>> Bean 'transactionConfig' of type [com.example.parent.config.TransactionConfig$$SpringCGLIB$$0] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected into a currently created BeanPostProcessor [projectingArgumentResolverBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies. 2025-12-01 10:28:31.596 | WARN | main | org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker.postProcessAfterInitialization(PostProcessorRegistrationDelegate.java:437) >>>>> Bean 'org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration$JdbcTransactionManagerConfiguration' of type [org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration$JdbcTransactionManagerConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected into a currently created BeanPostProcessor [projectingArgumentResolverBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies. 2025-12-01 10:28:31.597 | WARN | main | org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker.postProcessAfterInitialization(PostProcessorRegistrationDelegate.java:437) >>>>> Bean 'org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration$Generic' of type [org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration$Generic] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected into a currently created BeanPostProcessor [projectingArgumentResolverBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies. 2025-12-01 10:28:31.616 | INFO | main | com.ulisesbocchio.jasyptspringboot.filter.DefaultLazyPropertyFilter.lambda$new$2(DefaultLazyPropertyFilter.java:45) >>>>> Property Filter custom Bean not found with name 'encryptablePropertyFilter'. Initializing Default Property Filter 2025-12-01 10:28:31.633 | INFO | main | com.ulisesbocchio.jasyptspringboot.resolver.DefaultLazyPropertyResolver.lambda$new$2(DefaultLazyPropertyResolver.java:46) >>>>> Property Resolver custom Bean not found with name 'encryptablePropertyResolver'. Initializing Default Property Resolver 2025-12-01 10:28:31.635 | INFO | main | com.ulisesbocchio.jasyptspringboot.detector.DefaultLazyPropertyDetector.lambda$new$2(DefaultLazyPropertyDetector.java:44) >>>>> Property Detector custom Bean not found with name 'encryptablePropertyDetector'. Initializing Default Property Detector 2025-12-01 10:28:31.645 | WARN | main | org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker.postProcessAfterInitialization(PostProcessorRegistrationDelegate.java:437) >>>>> Bean 'jasyptConfig' of type [com.example.parent.safe.JasyptConfig$$SpringCGLIB$$0] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected into a currently created BeanPostProcessor [projectingArgumentResolverBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies. 2025-12-01 10:28:31.791 | WARN | main | org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker.postProcessAfterInitialization(PostProcessorRegistrationDelegate.java:437) >>>>> Bean 'environmentStringPBEConfig' of type [org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected into a currently created BeanPostProcessor [projectingArgumentResolverBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies. 2025-12-01 10:28:31.795 | WARN | main | org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker.postProcessAfterInitialization(PostProcessorRegistrationDelegate.java:437) >>>>> Bean 'jasyptStringEncryptor' of type [org.jasypt.encryption.pbe.StandardPBEStringEncryptor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected into a currently created BeanPostProcessor [projectingArgumentResolverBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies. 2025-12-01 10:28:31.796 | INFO | main | com.ulisesbocchio.jasyptspringboot.encryptor.DefaultLazyEncryptor.lambda$new$1(DefaultLazyEncryptor.java:41) >>>>> Found Custom Encryptor Bean org.jasypt.encryption.pbe.StandardPBEStringEncryptor@7c71c889 with name: jasyptStringEncryptor 2025-12-01 10:28:31.827 | WARN | main | org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker.postProcessAfterInitialization(PostProcessorRegistrationDelegate.java:437) >>>>> Bean 'spring.datasource-org.springframework.boot.autoconfigure.jdbc.DataSourceProperties' of type [org.springframework.boot.autoconfigure.jdbc.DataSourceProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected into a currently created BeanPostProcessor [projectingArgumentResolverBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies. 2025-12-01 10:28:31.828 | WARN | main | org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker.postProcessAfterInitialization(PostProcessorRegistrationDelegate.java:437) >>>>> Bean 'org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$PooledDataSourceConfiguration' of type [org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$PooledDataSourceConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected into a currently created BeanPostProcessor [projectingArgumentResolverBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies. 2025-12-01 10:28:31.829 | WARN | main | org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker.postProcessAfterInitialization(PostProcessorRegistrationDelegate.java:437) >>>>> Bean 'jdbcConnectionDetails' of type [org.springframework.boot.autoconfigure.jdbc.PropertiesJdbcConnectionDetails] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected into a currently created BeanPostProcessor [projectingArgumentResolverBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies. 2025-12-01 10:28:31.855 | WARN | main | org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker.postProcessAfterInitialization(PostProcessorRegistrationDelegate.java:437) >>>>> Bean 'dataSource' of type [com.alibaba.druid.pool.DruidDataSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected into a currently created BeanPostProcessor [projectingArgumentResolverBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies. 2025-12-01 10:28:31.869 | WARN | main | org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker.postProcessAfterInitialization(PostProcessorRegistrationDelegate.java:437) >>>>> Bean 'org.springframework.boot.autoconfigure.transaction.TransactionManagerCustomizationAutoConfiguration' of type [org.springframework.boot.autoconfigure.transaction.TransactionManagerCustomizationAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected into a currently created BeanPostProcessor [projectingArgumentResolverBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies. 2025-12-01 10:28:31.873 | WARN | main | org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker.postProcessAfterInitialization(PostProcessorRegistrationDelegate.java:437) >>>>> Bean 'transactionExecutionListeners' of type [org.springframework.boot.autoconfigure.transaction.ExecutionListenersTransactionManagerCustomizer] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected into a currently created BeanPostProcessor [projectingArgumentResolverBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies. 2025-12-01 10:28:31.877 | WARN | main | org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker.postProcessAfterInitialization(PostProcessorRegistrationDelegate.java:437) >>>>> Bean 'spring.transaction-org.springframework.boot.autoconfigure.transaction.TransactionProperties' of type [org.springframework.boot.autoconfigure.transaction.TransactionProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected into a currently created BeanPostProcessor [projectingArgumentResolverBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies. 2025-12-01 10:28:31.878 | WARN | main | org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker.postProcessAfterInitialization(PostProcessorRegistrationDelegate.java:437) >>>>> Bean 'platformTransactionManagerCustomizers' of type [org.springframework.boot.autoconfigure.transaction.TransactionManagerCustomizers] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected into a currently created BeanPostProcessor [projectingArgumentResolverBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies. 2025-12-01 10:28:31.884 | WARN | main | org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker.postProcessAfterInitialization(PostProcessorRegistrationDelegate.java:437) >>>>> Bean 'transactionManager' of type [org.springframework.jdbc.support.JdbcTransactionManager] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected into a currently created BeanPostProcessor [projectingArgumentResolverBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies. 2025-12-01 10:28:31.887 | DEBUG | main | org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource.addTransactionalMethod(NameMatchTransactionAttributeSource.java:102) >>>>> Adding transactional method [update*] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT] 2025-12-01 10:28:31.887 | DEBUG | main | org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource.addTransactionalMethod(NameMatchTransactionAttributeSource.java:102) >>>>> Adding transactional method [remove*] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT] 2025-12-01 10:28:31.887 | DEBUG | main | org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource.addTransactionalMethod(NameMatchTransactionAttributeSource.java:102) >>>>> Adding transactional method [revise*] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT] 2025-12-01 10:28:31.888 | DEBUG | main | org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource.addTransactionalMethod(NameMatchTransactionAttributeSource.java:102) >>>>> Adding transactional method [sign*] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT] 2025-12-01 10:28:31.888 | DEBUG | main | org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource.addTransactionalMethod(NameMatchTransactionAttributeSource.java:102) >>>>> Adding transactional method [delivery*] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT] 2025-12-01 10:28:31.888 | DEBUG | main | org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource.addTransactionalMethod(NameMatchTransactionAttributeSource.java:102) >>>>> Adding transactional method [agreen*] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT] 2025-12-01 10:28:31.888 | DEBUG | main | org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource.addTransactionalMethod(NameMatchTransactionAttributeSource.java:102) >>>>> Adding transactional method [requre*] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT] 2025-12-01 10:28:31.888 | DEBUG | main | org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource.addTransactionalMethod(NameMatchTransactionAttributeSource.java:102) >>>>> Adding transactional method [cancel*] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT] 2025-12-01 10:28:31.888 | DEBUG | main | org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource.addTransactionalMethod(NameMatchTransactionAttributeSource.java:102) >>>>> Adding transactional method [deploy*] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT] 2025-12-01 10:28:31.889 | DEBUG | main | org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource.addTransactionalMethod(NameMatchTransactionAttributeSource.java:102) >>>>> Adding transactional method [submit*] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT] 2025-12-01 10:28:31.889 | DEBUG | main | org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource.addTransactionalMethod(NameMatchTransactionAttributeSource.java:102) >>>>> Adding transactional method [sub*] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT] 2025-12-01 10:28:31.889 | DEBUG | main | org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource.addTransactionalMethod(NameMatchTransactionAttributeSource.java:102) >>>>> Adding transactional method [refine*] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT] 2025-12-01 10:28:31.889 | DEBUG | main | org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource.addTransactionalMethod(NameMatchTransactionAttributeSource.java:102) >>>>> Adding transactional method [import*] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT] 2025-12-01 10:28:31.889 | DEBUG | main | org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource.addTransactionalMethod(NameMatchTransactionAttributeSource.java:102) >>>>> Adding transactional method [query*] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly] 2025-12-01 10:28:31.890 | DEBUG | main | org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource.addTransactionalMethod(NameMatchTransactionAttributeSource.java:102) >>>>> Adding transactional method [select*] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly] 2025-12-01 10:28:31.890 | DEBUG | main | org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource.addTransactionalMethod(NameMatchTransactionAttributeSource.java:102) >>>>> Adding transactional method [operate*] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT] 2025-12-01 10:28:31.890 | DEBUG | main | org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource.addTransactionalMethod(NameMatchTransactionAttributeSource.java:102) >>>>> Adding transactional method [check*] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT] 2025-12-01 10:28:31.890 | DEBUG | main | org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource.addTransactionalMethod(NameMatchTransactionAttributeSource.java:102) >>>>> Adding transactional method [syn*] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT] 2025-12-01 10:28:31.890 | DEBUG | main | org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource.addTransactionalMethod(NameMatchTransactionAttributeSource.java:102) >>>>> Adding transactional method [del*] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT] 2025-12-01 10:28:31.890 | DEBUG | main | org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource.addTransactionalMethod(NameMatchTransactionAttributeSource.java:102) >>>>> Adding transactional method [push*] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT] 2025-12-01 10:28:31.890 | DEBUG | main | org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource.addTransactionalMethod(NameMatchTransactionAttributeSource.java:102) >>>>> Adding transactional method [get*] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly] 2025-12-01 10:28:31.891 | DEBUG | main | org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource.addTransactionalMethod(NameMatchTransactionAttributeSource.java:102) >>>>> Adding transactional method [insert*] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT] 2025-12-01 10:28:31.891 | DEBUG | main | org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource.addTransactionalMethod(NameMatchTransactionAttributeSource.java:102) >>>>> Adding transactional method [add*] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT] 2025-12-01 10:28:31.891 | DEBUG | main | org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource.addTransactionalMethod(NameMatchTransactionAttributeSource.java:102) >>>>> Adding transactional method [inspect*] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT] 2025-12-01 10:28:31.891 | WARN | main | org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker.postProcessAfterInitialization(PostProcessorRegistrationDelegate.java:437) >>>>> Bean 'myTransactionInterceptor' of type [org.springframework.transaction.interceptor.TransactionInterceptor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected into a currently created BeanPostProcessor [projectingArgumentResolverBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies. 2025-12-01 10:28:31.895 | WARN | main | org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker.postProcessAfterInitialization(PostProcessorRegistrationDelegate.java:437) >>>>> Bean 'pointcutAdvisor' of type [org.springframework.aop.aspectj.AspectJExpressionPointcutAdvisor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected into a currently created BeanPostProcessor [projectingArgumentResolverBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies. 2025-12-01 10:28:32.301 | INFO | main | org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:109) >>>>> Tomcat initialized with port 8888 (http) 2025-12-01 10:28:32.316 | INFO | main | org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) >>>>> Initializing ProtocolHandler ["http-nio-8888"] 2025-12-01 10:28:32.320 | INFO | main | org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) >>>>> Starting service [Tomcat] 2025-12-01 10:28:32.320 | INFO | main | org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) >>>>> Starting Servlet engine: [Apache Tomcat/10.1.20] 2025-12-01 10:28:32.383 | INFO | main | org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) >>>>> Initializing Spring embedded WebApplicationContext 2025-12-01 10:28:32.386 | INFO | main | org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.prepareWebApplicationContext(ServletWebServerApplicationContext.java:296) >>>>> Root WebApplicationContext: initialization completed in 1793 ms Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter. Get /192.168.1.4 network interface Get network interface info: name:wireless_32768 (Intel(R) Wi-Fi 6 AX101) Initialization Sequence datacenterId:3 workerId:3 _ _ |_ _ _|_. ___ _ | _ | | |\/|_)(_| | |_\ |_)||_|_\ / | 3.5.7 2025-12-01 10:28:33.144 | WARN | main | org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:632) >>>>> Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'testControl': Injection of resource dependencies failed 2025-12-01 10:28:33.163 | INFO | main | com.alibaba.druid.pool.DruidDataSource.close(DruidDataSource.java:2170) >>>>> {dataSource-0} closing ... 2025-12-01 10:28:33.167 | INFO | main | org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) >>>>> Stopping service [Tomcat] 销毁 2025-12-01 10:28:33.203 | INFO | main | org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLogger.logMessage(ConditionEvaluationReportLogger.java:82) >>>>> Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 2025-12-01 10:28:33.239 | ERROR | main | org.springframework.boot.SpringApplication.reportFailure(SpringApplication.java:851) >>>>> Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'testControl': Injection of resource dependencies failed at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:371) ~[spring-context-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1419) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:962) ~[spring-context-6.1.6.jar:6.1.6] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624) ~[spring-context-6.1.6.jar:6.1.6] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.2.5.jar:3.2.5] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) [spring-boot-3.2.5.jar:3.2.5] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) [spring-boot-3.2.5.jar:3.2.5] at org.springframework.boot.SpringApplication.run(SpringApplication.java:334) [spring-boot-3.2.5.jar:3.2.5] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354) [spring-boot-3.2.5.jar:3.2.5] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) [spring-boot-3.2.5.jar:3.2.5] at com.example.parent.Run.main(Run.java:21) [classes/:?] Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'IPProxyMapper' defined in file [C:\work\ideaWorkSpace\Parent\target\classes\com\example\parent\mapper\IPProxyMapper.class]: com/baomidou/mybatisplus/annotation/OrderBy at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1786) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1443) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1353) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:598) ~[spring-context-6.1.6.jar:6.1.6] at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:576) ~[spring-context-6.1.6.jar:6.1.6] at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:738) ~[spring-context-6.1.6.jar:6.1.6] at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:270) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:145) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:368) ~[spring-context-6.1.6.jar:6.1.6] ... 17 more Caused by: java.lang.NoClassDefFoundError: com/baomidou/mybatisplus/annotation/OrderBy at com.baomidou.mybatisplus.core.metadata.TableInfoHelper.initTableFields(TableInfoHelper.java:332) ~[mybatis-plus-core-3.5.7.jar:3.5.7] at com.baomidou.mybatisplus.core.metadata.TableInfoHelper.initTableInfo(TableInfoHelper.java:198) ~[mybatis-plus-core-3.5.7.jar:3.5.7] at com.baomidou.mybatisplus.core.metadata.TableInfoHelper.initTableInfo(TableInfoHelper.java:174) ~[mybatis-plus-core-3.5.7.jar:3.5.7] at com.baomidou.mybatisplus.core.injector.AbstractSqlInjector.inspectInject(AbstractSqlInjector.java:50) ~[mybatis-plus-core-3.5.7.jar:3.5.7] at com.baomidou.mybatisplus.core.MybatisMapperAnnotationBuilder.parserInjector(MybatisMapperAnnotationBuilder.java:126) ~[mybatis-plus-core-3.5.7.jar:3.5.7] at com.baomidou.mybatisplus.core.MybatisMapperAnnotationBuilder.parse(MybatisMapperAnnotationBuilder.java:116) ~[mybatis-plus-core-3.5.7.jar:3.5.7] at com.baomidou.mybatisplus.core.MybatisMapperRegistry.addMapper(MybatisMapperRegistry.java:90) ~[mybatis-plus-core-3.5.7.jar:3.5.7] at com.baomidou.mybatisplus.core.MybatisConfiguration.addMapper(MybatisConfiguration.java:129) ~[mybatis-plus-core-3.5.7.jar:3.5.7] at org.mybatis.spring.mapper.MapperFactoryBean.checkDaoConfig(MapperFactoryBean.java:80) ~[mybatis-spring-3.0.3.jar:3.0.3] at org.springframework.dao.support.DaoSupport.afterPropertiesSet(DaoSupport.java:44) ~[spring-tx-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1833) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1443) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1353) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:598) ~[spring-context-6.1.6.jar:6.1.6] at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:576) ~[spring-context-6.1.6.jar:6.1.6] at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:738) ~[spring-context-6.1.6.jar:6.1.6] at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:270) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:145) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:368) ~[spring-context-6.1.6.jar:6.1.6] ... 17 more Caused by: java.lang.ClassNotFoundException: com.baomidou.mybatisplus.annotation.OrderBy at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[?:?] at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[?:?] at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) ~[?:?] at com.baomidou.mybatisplus.core.metadata.TableInfoHelper.initTableFields(TableInfoHelper.java:332) ~[mybatis-plus-core-3.5.7.jar:3.5.7] at com.baomidou.mybatisplus.core.metadata.TableInfoHelper.initTableInfo(TableInfoHelper.java:198) ~[mybatis-plus-core-3.5.7.jar:3.5.7] at com.baomidou.mybatisplus.core.metadata.TableInfoHelper.initTableInfo(TableInfoHelper.java:174) ~[mybatis-plus-core-3.5.7.jar:3.5.7] at com.baomidou.mybatisplus.core.injector.AbstractSqlInjector.inspectInject(AbstractSqlInjector.java:50) ~[mybatis-plus-core-3.5.7.jar:3.5.7] at com.baomidou.mybatisplus.core.MybatisMapperAnnotationBuilder.parserInjector(MybatisMapperAnnotationBuilder.java:126) ~[mybatis-plus-core-3.5.7.jar:3.5.7] at com.baomidou.mybatisplus.core.MybatisMapperAnnotationBuilder.parse(MybatisMapperAnnotationBuilder.java:116) ~[mybatis-plus-core-3.5.7.jar:3.5.7] at com.baomidou.mybatisplus.core.MybatisMapperRegistry.addMapper(MybatisMapperRegistry.java:90) ~[mybatis-plus-core-3.5.7.jar:3.5.7] at com.baomidou.mybatisplus.core.MybatisConfiguration.addMapper(MybatisConfiguration.java:129) ~[mybatis-plus-core-3.5.7.jar:3.5.7] at org.mybatis.spring.mapper.MapperFactoryBean.checkDaoConfig(MapperFactoryBean.java:80) ~[mybatis-spring-3.0.3.jar:3.0.3] at org.springframework.dao.support.DaoSupport.afterPropertiesSet(DaoSupport.java:44) ~[spring-tx-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1833) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1443) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1353) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:598) ~[spring-context-6.1.6.jar:6.1.6] at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:576) ~[spring-context-6.1.6.jar:6.1.6] at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:738) ~[spring-context-6.1.6.jar:6.1.6] at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:270) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:145) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:368) ~[spring-context-6.1.6.jar:6.1.6] ... 17 more Disconnected from the target VM, address: '127.0.0.1:12072', transport: 'socket' Process finished with exit code 1
最新发布
12-02
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值