spring-cloud / spring-cloud-consul

Spring Cloud Consul
http://cloud.spring.io/spring-cloud-consul/
Apache License 2.0
813 stars 541 forks source link

Runtime reflection is not supported for public void org.springframework.cloud.consul.discovery.ConsulDiscoveryProperties.setHealthCheckPath #816

Open paakmau opened 1 year ago

paakmau commented 1 year ago

Runtime reflection is not supported for public void org.springframework.cloud.consul.discovery.ConsulDiscoveryProperties.setHealthCheckPath

Describe the bug

A problem about runtime reflection will raise when compiled as a native image if the spring.cloud.consul.discovery.xxx in property is specified.

Sample

My environment:

bomou@dialga:~/project/demo$ java --version
openjdk 17.0.5 2022-10-18 LTS
OpenJDK Runtime Environment GraalVM 22.3.0 (build 17.0.5+8-LTS)
OpenJDK 64-Bit Server VM GraalVM 22.3.0 (build 17.0.5+8-LTS, mixed mode, sharing)
bomou@dialga:~/project/demo$ ./gradlew --version

------------------------------------------------------------
Gradle 7.6.1
------------------------------------------------------------

Build time:   2023-02-24 13:54:42 UTC
Revision:     3905fe8ac072bbd925c70ddbddddf4463341f4b4

Kotlin:       1.7.10
Groovy:       3.0.13
Ant:          Apache Ant(TM) version 1.10.11 compiled on July 10 2021
JVM:          17.0.5 (BellSoft 17.0.5+8-LTS)
OS:           Linux 5.15.90.1-microsoft-standard-WSL2 amd64

Here's a minimized sample to reproduce. The demo.zip may also help.

  1. Create a template project with Spring Initializr, checked with Spring Web, Consul Discovery, GraalVM Native Support

  2. Edit the application.yml:

    spring:
      application:
        name: demo
    cloud:
      consul:
        host: localhost
        port: 8500
  3. Run nativeCompile, it seems work well(maybe):

    bomou@dialga:~/project/demo$ ./gradlew clean nativeCompile
    Starting a Gradle Daemon, 1 incompatible Daemon could not be reused, use --status for details
    
    > Configure project :
    Repository https://plugins.gradle.org/m2 deleted.
    
    > Task :processAot
    
    .   ____          _            __ _ _
    /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
    ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
    \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
    '  |____| .__|_| |_|_| |_\__, | / / / /
    =========|_|==============|___/=/_/_/_/
    :: Spring Boot ::                (v3.0.6)
    
    2023-05-05T23:27:32.109+08:00  INFO 354838 --- [           main] com.example.demo.DemoApplication         : Starting DemoApplication using Java 17.0.5 with PID 354838 (/home/bomou/project/demo/build/classes/java/main started by bomou in /home/bomou/project/demo)
    2023-05-05T23:27:32.112+08:00  INFO 354838 --- [           main] com.example.demo.DemoApplication         : No active profile set, falling back to 1 default profile: "default"
    2023-05-05T23:27:32.771+08:00  INFO 354838 --- [           main] o.s.cloud.context.scope.GenericScope     : BeanFactory id=87e24bf6-2d3a-380b-bb92-eb9b769892da
    
    > Task :compileAotJava
    Note: /home/bomou/project/demo/build/generated/aotSources/org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration__BeanDefinitions.java uses or overrides a deprecated API.
    Note: Recompile with -Xlint:deprecation for details.
    
    > Task :generateResourcesConfigFile
    [native-image-plugin] Resources configuration written into /home/bomou/project/demo/build/native/generated/generateResourcesConfigFile/resource-config.json
    
    > Task :nativeCompile
    [native-image-plugin] GraalVM Toolchain detection is disabled
    [native-image-plugin] GraalVM location read from environment variable: JAVA_HOME
    [native-image-plugin] Native Image executable path: /home/bomou/.sdkman/candidates/java/22.3.r17-nik/lib/svm/bin/native-image
    =======================================================================================================================
    GraalVM Native Image: Generating 'demo' (executable)...
    ========================================================================================================================
    Warning: Could not resolve com.sun.el.ExpressionFactoryImpl for reflection configuration. Reason: java.lang.ClassNotFoundException: com.sun.el.ExpressionFactoryImpl.
    Warning: Could not resolve groovy.grape.GrabAnnotationTransformation for reflection configuration. Reason: java.lang.ClassNotFoundException: groovy.grape.GrabAnnotationTransformation.
    Warning: Could not resolve groovy.lang.Script for reflection configuration. Reason: java.lang.ClassNotFoundException: groovy.lang.Script.
    Warning: Could not resolve groovy.lang.Script for reflection configuration. Reason: java.lang.ClassNotFoundException: groovy.lang.Script.
    Warning: Could not resolve groovyjarjarantlr.CommonToken for reflection configuration. Reason: java.lang.ClassNotFoundException: groovyjarjarantlr.CommonToken.
    Warning: Could not resolve jakarta.persistence.Persistence for reflection configuration. Reason: java.lang.ClassNotFoundException: jakarta.persistence.Persistence.
    Warning: Could not resolve javafx.beans.value.ObservableValue for reflection configuration. Reason: java.lang.ClassNotFoundException: javafx.beans.value.ObservableValue.
    Warning: Could not resolve javax.money.MonetaryAmount for reflection configuration. Reason: java.lang.ClassNotFoundException: javax.money.MonetaryAmount.
    Warning: Could not resolve org.codehaus.groovy.antlr.GroovySourceAST for reflection configuration. Reason: java.lang.ClassNotFoundException: org.codehaus.groovy.antlr.GroovySourceAST.
    Warning: Could not resolve org.codehaus.groovy.ast.builder.AstBuilderTransformation for reflection configuration. Reason: java.lang.ClassNotFoundException: org.codehaus.groovy.ast.builder.AstBuilderTransformation.
    Warning: Could not resolve org.codehaus.groovy.runtime.ScriptBytecodeAdapter for reflection configuration. Reason: java.lang.ClassNotFoundException: org.codehaus.groovy.runtime.ScriptBytecodeAdapter.
    Warning: Could not resolve org.glassfish.expressly.ValueExpressionImpl for reflection configuration. Reason: java.lang.ClassNotFoundException: org.glassfish.expressly.ValueExpressionImpl.
    Warning: Could not resolve org.glassfish.expressly.parser.AstValue for reflection configuration. Reason: java.lang.ClassNotFoundException: org.glassfish.expressly.parser.AstValue.
    Warning: Could not resolve org.joda.time.ReadableInstant for reflection configuration. Reason: java.lang.ClassNotFoundException: org.joda.time.ReadableInstant.
    Warning: Could not register method org.hibernate.validator.internal.constraintvalidators.bv.time.future.FutureValidatorForReadablePartial.<init>() for reflection. Reason: java.lang.NoClassDefFoundError: org/joda/time/ReadableInstant.
    Warning: Could not register method org.hibernate.validator.internal.constraintvalidators.bv.time.futureorpresent.FutureOrPresentValidatorForReadablePartial.<init>() for reflection. Reason: java.lang.NoClassDefFoundError: org/joda/time/ReadableInstant.
    Warning: Could not register method org.hibernate.validator.internal.constraintvalidators.bv.time.past.PastValidatorForReadablePartial.<init>() for reflection. Reason: java.lang.NoClassDefFoundError: org/joda/time/ReadableInstant.
    Warning: Could not register method org.hibernate.validator.internal.constraintvalidators.bv.time.pastorpresent.PastOrPresentValidatorForReadablePartial.<init>() for reflection. Reason: java.lang.NoClassDefFoundError: org/joda/time/ReadableInstant.
    Warning: Could not resolve org.jboss.logmanager.LogManager for reflection configuration. Reason: java.lang.ClassNotFoundException: org.jboss.logmanager.LogManager.
    Warning: Could not resolve org.apache.commons.logging.impl.Jdk14Logger for reflection configuration. Reason: java.lang.ClassNotFoundException: org.apache.commons.logging.impl.Jdk14Logger.
    Warning: Could not resolve org.apache.commons.logging.impl.Log4JLogger for reflection configuration. Reason: java.lang.ClassNotFoundException: org.apache.commons.logging.impl.Log4JLogger.
    Warning: Could not resolve org.apache.commons.logging.impl.LogFactoryImpl for reflection configuration. Reason: java.lang.ClassNotFoundException: org.apache.commons.logging.impl.LogFactoryImpl.
    Warning: Could not resolve org.apache.commons.logging.impl.WeakHashtable for reflection configuration. Reason: java.lang.ClassNotFoundException: org.apache.commons.logging.impl.WeakHashtable.
    Warning: Method sun.security.x509.AuthorityInfoAccessExtension.<init>() not found.
    Warning: Method sun.security.x509.AuthorityKeyIdentifierExtension.<init>() not found.
    Warning: Method sun.security.x509.BasicConstraintsExtension.<init>() not found.
    Warning: Method sun.security.x509.CRLDistributionPointsExtension.<init>() not found.
    Warning: Method sun.security.x509.CertificatePoliciesExtension.<init>() not found.
    Warning: Method sun.security.x509.ExtendedKeyUsageExtension.<init>() not found.
    Warning: Method sun.security.x509.PrivateKeyUsageExtension.<init>() not found.
    Warning: Method sun.security.x509.SubjectKeyIdentifierExtension.<init>() not found.
    [1/7] Initializing...                                                                                    (9.0s @ 0.31GB)
    Version info: 'GraalVM 22.3.0 Java 17 CE'
    Java version info: '17.0.5+8-LTS'
    C compiler: gcc (linux, x86_64, 10.2.1)
    Garbage collector: Serial GC
    2 user-specific feature(s)
    - com.oracle.svm.thirdparty.gson.GsonFeature
    - org.springframework.aot.nativex.feature.PreComputeFieldFeature
    Field org.apache.commons.logging.LogAdapter#log4jSpiPresent set to true at build time
    Field org.apache.commons.logging.LogAdapter#log4jSlf4jProviderPresent set to true at build time
    Field org.apache.commons.logging.LogAdapter#slf4jSpiPresent set to true at build time
    Field org.apache.commons.logging.LogAdapter#slf4jApiPresent set to true at build time
    Field org.springframework.core.NativeDetector#imageCode set to true at build time
    Field org.springframework.format.support.DefaultFormattingConversionService#jsr354Present set to false at build time
    Field org.springframework.core.KotlinDetector#kotlinPresent set to false at build time
    Field org.springframework.core.KotlinDetector#kotlinReflectPresent set to false at build time
    Field org.springframework.cglib.core.AbstractClassGenerator#imageCode set to true at build time
    Field org.springframework.boot.logging.log4j2.Log4J2LoggingSystem$Factory#PRESENT set to false at build time
    Field org.springframework.cloud.bootstrap.TextEncryptorConfigBootstrapper#RSA_IS_PRESENT set to true at build time
    Field org.springframework.web.servlet.view.InternalResourceViewResolver#jstlPresent set to false at build time
    Field org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport#romePresent set to false at build time
    Field org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport#jaxb2Present set to false at build time
    Field org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport#jackson2Present set to true at build time
    Field org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport#jackson2XmlPresent set to false at build time
    Field org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport#jackson2SmilePresent set to false at build time
    Field org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport#jackson2CborPresent set to false at build time
    Field org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport#gsonPresent set to true at build time
    Field org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport#jsonbPresent set to false at build time
    Field org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport#kotlinSerializationCborPresent set to false at build time
    Field org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport#kotlinSerializationJsonPresent set to false at build time
    Field org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport#kotlinSerializationProtobufPresent set to false at build time
    Field org.springframework.http.converter.json.Jackson2ObjectMapperBuilder#jackson2XmlPresent set to false at build time
    Field org.springframework.boot.logging.java.JavaLoggingSystem$Factory#PRESENT set to true at build time
    Field org.springframework.web.client.RestTemplate#romePresent set to false at build time
    Field org.springframework.web.client.RestTemplate#jaxb2Present set to false at build time
    Field org.springframework.web.client.RestTemplate#jackson2Present set to true at build time
    Field org.springframework.web.client.RestTemplate#jackson2XmlPresent set to false at build time
    Field org.springframework.web.client.RestTemplate#jackson2SmilePresent set to false at build time
    Field org.springframework.web.client.RestTemplate#jackson2CborPresent set to false at build time
    Field org.springframework.web.client.RestTemplate#gsonPresent set to true at build time
    Field org.springframework.web.client.RestTemplate#jsonbPresent set to false at build time
    Field org.springframework.web.client.RestTemplate#kotlinSerializationCborPresent set to false at build time
    Field org.springframework.web.client.RestTemplate#kotlinSerializationJsonPresent set to false at build time
    Field org.springframework.web.client.RestTemplate#kotlinSerializationProtobufPresent set to false at build time
    Field org.springframework.boot.logging.logback.LogbackLoggingSystem$Factory#PRESENT set to true at build time
    Field org.springframework.core.ReactiveAdapterRegistry#reactorPresent set to true at build time
    Field org.springframework.core.ReactiveAdapterRegistry#rxjava3Present set to false at build time
    Field org.springframework.core.ReactiveAdapterRegistry#kotlinCoroutinesPresent set to false at build time
    Field org.springframework.core.ReactiveAdapterRegistry#mutinyPresent set to false at build time
    Field org.springframework.web.context.support.StandardServletEnvironment#jndiPresent set to true at build time
    Field org.springframework.context.event.ApplicationListenerMethodAdapter#reactiveStreamsPresent set to true at build time
    Field org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter#jaxb2Present set to false at build time
    Field org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter#jackson2Present set to true at build time
    Field org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter#jackson2XmlPresent set to false at build time
    Field org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter#jackson2SmilePresent set to false at build time
    Field org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter#gsonPresent set to true at build time
    Field org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter#jsonbPresent set to false at build time
    Field org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter#kotlinSerializationCborPresent set to false at build time
    Field org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter#kotlinSerializationJsonPresent set to false at build time
    Field org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter#kotlinSerializationProtobufPresent set to false at build time
    Field org.springframework.web.context.support.WebApplicationContextUtils#jsfPresent set to false at build time
    Field org.springframework.web.context.request.RequestContextHolder#jsfPresent set to false at build time
    Field org.springframework.boot.logging.logback.LogbackLoggingSystemProperties#JBOSS_LOGGING_PRESENT set to true at build time
    Field org.springframework.boot.autoconfigure.web.format.WebConversionService#JSR_354_PRESENT set to false at build time
    SLF4J: No SLF4J providers were found.
    SLF4J: Defaulting to no-operation (NOP) logger implementation
    SLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.
    Field org.springframework.web.servlet.mvc.method.annotation.ReactiveTypeHandler#isContextPropagationPresent set to false at build time
    Field org.springframework.web.servlet.support.RequestContext#jstlPresent set to false at build time
    [2/7] Performing analysis...  [*********]                                                               (51.6s @ 1.82GB)
    19,635 (92.81%) of 21,156 classes reachable
    31,474 (68.30%) of 46,083 fields reachable
    91,672 (61.80%) of 148,344 methods reachable
    1,355 classes,   630 fields, and 6,602 methods registered for reflection
        64 classes,    70 fields, and    55 methods registered for JNI access
        4 native libraries: dl, pthread, rt, z
    [3/7] Building universe...                                                                               (5.8s @ 1.94GB)
    [4/7] Parsing methods...      [***]                                                                      (5.3s @ 2.44GB)
    [5/7] Inlining methods...     [***]                                                                      (2.1s @ 2.21GB)
    [6/7] Compiling methods...    [******]                                                                  (33.2s @ 1.72GB)
    [7/7] Creating image...                                                                                  (5.1s @ 2.80GB)
    39.41MB (48.11%) for code area:    59,834 compilation units
    39.23MB (47.89%) for image heap:  445,881 objects and 269 resources
    3.27MB ( 4.00%) for other data
    81.92MB in total
    ------------------------------------------------------------------------------------------------------------------------
    Top 10 packages in code area:                               Top 10 object types in image heap:
    1.63MB sun.security.ssl                                     8.67MB byte[] for code metadata
    1.09MB java.util                                            4.66MB java.lang.Class
    853.77KB java.lang.invoke                                     4.18MB java.lang.String
    717.98KB com.sun.crypto.provider                              3.65MB byte[] for java.lang.String
    596.88KB jdk.proxy4                                           3.52MB byte[] for general heap data
    538.70KB org.apache.catalina.core                             2.64MB byte[] for embedded resources
    504.55KB org.apache.tomcat.util.net                           1.65MB com.oracle.svm.core.hub.DynamicHubCompanion
    489.62KB org.apache.coyote.http2                              1.16MB byte[] for reflection metadata
    488.91KB java.util.concurrent                               805.16KB java.lang.String[]
    488.77KB java.lang                                          691.37KB c.o.svm.core.hub.DynamicHub$ReflectionMetadata
    31.68MB for 874 more packages                                6.92MB for 3707 more object types
    ------------------------------------------------------------------------------------------------------------------------
                            7.6s (6.4% of total time) in 75 GCs | Peak RSS: 4.30GB | CPU load: 5.91
    ------------------------------------------------------------------------------------------------------------------------
    Produced artifacts:
    /home/bomou/project/demo/build/native/nativeCompile/demo (executable)
    /home/bomou/project/demo/build/native/nativeCompile/demo.build_artifacts.txt (txt)
    ========================================================================================================================
    Finished generating 'demo' in 1m 58s.
    [native-image-plugin] Native Image written to: /home/bomou/project/demo/build/native/nativeCompile
    
    BUILD SUCCESSFUL in 2m 11s
    10 actionable tasks: 10 executed
  4. If directly run with ./gradlew bootRun, it works.

  5. But if with spring.cloud.consul.discovery.health-check-path specified, the problem will raise.

    bomou@dialga:~/project/demo$ ./build/native/nativeCompile/demo --spring.cloud.consul.discovery.health-check-path=/actuator/health
    
    .   ____          _            __ _ _
    /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
    ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
    \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
    '  |____| .__|_| |_|_| |_\__, | / / / /
    =========|_|==============|___/=/_/_/_/
    :: Spring Boot ::                (v3.0.6)
    
    2023-05-05T23:57:05.377+08:00  INFO 355100 --- [           main] com.example.demo.DemoApplication         : Starting AOT-processed DemoApplication using Java 17.0.5 with PID 355100 (/home/bomou/project/demo/build/native/nativeCompile/demo started by bomou in /home/bomou/project/demo)
    2023-05-05T23:57:05.377+08:00  INFO 355100 --- [           main] com.example.demo.DemoApplication         : No active profile set, falling back to 1 default profile: "default"
    2023-05-05T23:57:05.378+08:00  INFO 355100 --- [           main] o.s.cloud.context.scope.GenericScope     : BeanFactory id=6bb999ab-e7c4-3fbd-a0aa-954477fd726c
    2023-05-05T23:57:05.389+08:00  INFO 355100 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
    2023-05-05T23:57:05.389+08:00  INFO 355100 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
    2023-05-05T23:57:05.389+08:00  INFO 355100 --- [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.8]
    2023-05-05T23:57:05.393+08:00  INFO 355100 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
    2023-05-05T23:57:05.393+08:00  INFO 355100 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 16 ms
    2023-05-05T23:57:06.422+08:00  INFO 355100 --- [           main] o.s.cloud.commons.util.InetUtils         : Cannot determine local hostname
    2023-05-05T23:57:06.424+08:00  WARN 355100 --- [           main] w.s.c.ServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'compositeDiscoveryClient': Unsatisfied dependency expressed through method 'compositeDiscoveryClient' parameter 0: Error creating bean with name 'consulDiscoveryClient': Unsatisfied dependency expressed through method 'consulDiscoveryClient' parameter 1: Error creating bean with name 'consulDiscoveryProperties': Runtime reflection is not supported for public void org.springframework.cloud.consul.discovery.ConsulDiscoveryProperties.setHealthCheckPath(java.lang.String)
    2023-05-05T23:57:06.424+08:00  INFO 355100 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
    2023-05-05T23:57:06.425+08:00 ERROR 355100 --- [           main] o.s.boot.SpringApplication               : Application run failed
    
    org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'compositeDiscoveryClient': Unsatisfied dependency expressed through method 'compositeDiscoveryClient' parameter 0: Error creating bean with name 'consulDiscoveryClient': Unsatisfied dependency expressed through method 'consulDiscoveryClient' parameter 1: Error creating bean with name 'consulDiscoveryProperties': Runtime reflection is not supported for public void org.springframework.cloud.consul.discovery.ConsulDiscoveryProperties.setHealthCheckPath(java.lang.String)
            at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArgument(BeanInstanceSupplier.java:343) ~[na:na]
            at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArguments(BeanInstanceSupplier.java:267) ~[na:na]
            at org.springframework.beans.factory.aot.BeanInstanceSupplier.get(BeanInstanceSupplier.java:202) ~[na:na]
            at org.springframework.beans.factory.support.DefaultListableBeanFactory.obtainInstanceFromSupplier(DefaultListableBeanFactory.java:947) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1214) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1158) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:973) ~[demo:6.0.8]
            at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:917) ~[demo:6.0.8]
            at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) ~[demo:6.0.8]
            at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[demo:3.0.6]
            at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) ~[demo:3.0.6]
            at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[demo:3.0.6]
            at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) ~[demo:3.0.6]
            at org.springframework.boot.SpringApplication.run(SpringApplication.java:1304) ~[demo:3.0.6]
            at org.springframework.boot.SpringApplication.run(SpringApplication.java:1293) ~[demo:3.0.6]
            at com.example.demo.DemoApplication.main(DemoApplication.java:10) ~[demo:na]
    Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'consulDiscoveryClient': Unsatisfied dependency expressed through method 'consulDiscoveryClient' parameter 1: Error creating bean with name 'consulDiscoveryProperties': Runtime reflection is not supported for public void org.springframework.cloud.consul.discovery.ConsulDiscoveryProperties.setHealthCheckPath(java.lang.String)
            at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArgument(BeanInstanceSupplier.java:343) ~[na:na]
            at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArguments(BeanInstanceSupplier.java:267) ~[na:na]
            at org.springframework.beans.factory.aot.BeanInstanceSupplier.get(BeanInstanceSupplier.java:202) ~[na:na]
            at org.springframework.beans.factory.support.DefaultListableBeanFactory.obtainInstanceFromSupplier(DefaultListableBeanFactory.java:947) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1214) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1158) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[demo:6.0.8]
            at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1633) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1597) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveMultipleBeans(DefaultListableBeanFactory.java:1488) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1375) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1337) ~[demo:6.0.8]
            at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArgument(BeanInstanceSupplier.java:327) ~[na:na]
            ... 21 common frames omitted
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'consulDiscoveryProperties': Runtime reflection is not supported for public void org.springframework.cloud.consul.discovery.ConsulDiscoveryProperties.setHealthCheckPath(java.lang.String)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:605) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[demo:6.0.8]
            at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1417) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1337) ~[demo:6.0.8]
            at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArgument(BeanInstanceSupplier.java:327) ~[na:na]
            ... 39 common frames omitted
    Caused by: com.oracle.svm.core.jdk.UnsupportedFeatureError: Runtime reflection is not supported for public void org.springframework.cloud.consul.discovery.ConsulDiscoveryProperties.setHealthCheckPath(java.lang.String)
            at org.graalvm.nativeimage.builder/com.oracle.svm.core.util.VMError.unsupportedFeature(VMError.java:89) ~[na:na]
            at java.base@17.0.5/java.lang.reflect.Method.acquireMethodAccessor(Method.java:71) ~[demo:na]
            at java.base@17.0.5/java.lang.reflect.Method.invoke(Method.java:566) ~[demo:na]
            at org.springframework.boot.context.properties.bind.JavaBeanBinder$BeanProperty.setValue(JavaBeanBinder.java:372) ~[na:na]
            at org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:104) ~[na:na]
            at org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:86) ~[na:na]
            at org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:62) ~[na:na]
            at org.springframework.boot.context.properties.bind.Binder.lambda$bindDataObject$5(Binder.java:476) ~[demo:3.0.6]
            at org.springframework.boot.context.properties.bind.Binder$Context.withIncreasedDepth(Binder.java:590) ~[na:na]
            at org.springframework.boot.context.properties.bind.Binder$Context.withDataObject(Binder.java:576) ~[na:na]
            at org.springframework.boot.context.properties.bind.Binder.bindDataObject(Binder.java:474) ~[demo:3.0.6]
            at org.springframework.boot.context.properties.bind.Binder.bindObject(Binder.java:414) ~[demo:3.0.6]
            at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:343) ~[demo:3.0.6]
            at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:332) ~[demo:3.0.6]
            at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:262) ~[demo:3.0.6]
            at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:249) ~[demo:3.0.6]
            at org.springframework.boot.context.properties.ConfigurationPropertiesBinder.bind(ConfigurationPropertiesBinder.java:93) ~[demo:3.0.6]
            at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.bind(ConfigurationPropertiesBindingPostProcessor.java:96) ~[demo:3.0.6]
            at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:79) ~[demo:3.0.6]
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:419) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) ~[demo:6.0.8]
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:598) ~[demo:6.0.8]
            ... 48 common frames omitted