spring-cloud / spring-cloud-vault

Configuration Integration with HashiCorp Vault
http://cloud.spring.io/spring-cloud-vault/
Apache License 2.0
272 stars 151 forks source link

Unable to instantiate org.springframework.boot.context.config.ConfigDataLoader [org.springframework.cloud.vault.config.VaultConfigDataLoader] #600

Closed jenkins-goldextech closed 3 years ago

jenkins-goldextech commented 3 years ago

versions used: version = [
springboot: "2.5.1", spring_cloud_consul: "3.0.3", spring_cloud_vault: "3.0.3" ]

yaml looks like: image

Spring cloud/consul integration works fine, no issues. I then subsequently added vault to it and that's when my troubles started. If I remove the spring vault dependency then it works again (with just consul) .

Error: java.lang.IllegalArgumentException: Unable to instantiate org.springframework.boot.context.config.ConfigDataLoader [org.springframework.cloud.vault.config.VaultConfigDataLoader] at org.springframework.boot.util.Instantiator.instantiate(Instantiator.java:103) at org.springframework.boot.util.Instantiator.instantiate(Instantiator.java:90) at org.springframework.boot.context.config.ConfigDataLoaders.(ConfigDataLoaders.java:75) at org.springframework.boot.context.config.ConfigDataLoaders.(ConfigDataLoaders.java:56) at org.springframework.boot.context.config.ConfigDataEnvironment.(ConfigDataEnvironment.java:155) at org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor.getConfigDataEnvironment(ConfigDataEnvironmentPostProcessor.java:108) at org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor.postProcessEnvironment(ConfigDataEnvironmentPostProcessor.java:97) at org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor.postProcessEnvironment(ConfigDataEnvironmentPostProcessor.java:89) at org.springframework.boot.env.EnvironmentPostProcessorApplicationListener.onApplicationEnvironmentPreparedEvent(EnvironmentPostProcessorApplicationListener.java:100) at org.springframework.boot.env.EnvironmentPostProcessorApplicationListener.onApplicationEvent(EnvironmentPostProcessorApplicationListener.java:86) at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:131) at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:82) at org.springframework.boot.SpringApplicationRunListeners.lambda$environmentPrepared$2(SpringApplicationRunListeners.java:63) at java.util.ArrayList.forEach(ArrayList.java:1259) at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:117) at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:111) at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:62) at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:362) at org.springframework.boot.SpringApplication.run(SpringApplication.java:320) at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:144) at org.springframework.cloud.bootstrap.BootstrapApplicationListener.bootstrapServiceContext(BootstrapApplicationListener.java:197) at org.springframework.cloud.bootstrap.BootstrapApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:114) at org.springframework.cloud.bootstrap.BootstrapApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:77) at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:131) at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:82) at org.springframework.boot.SpringApplicationRunListeners.lambda$environmentPrepared$2(SpringApplicationRunListeners.java:63) at java.util.ArrayList.forEach(ArrayList.java:1259) at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:117) at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:111) at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:62) at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:362) at org.springframework.boot.SpringApplication.run(SpringApplication.java:320) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1311) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300) at com.eldorado.marketdata.Application.main(Application.java:25) Caused by: java.lang.IllegalAccessException: Unable to find suitable constructor at org.springframework.boot.util.Instantiator.instantiate(Instantiator.java:118) at org.springframework.boot.util.Instantiator.instantiate(Instantiator.java:100) ... 40 common frames omitted

I have debugged the issue however have no idea how to solve it. It can't instantiate class org.springframework.cloud.vault.config.VaultConfigDataLoader

Exception thrown here : image

The parameterType of class 'interface org.springframework.boot.logging.DeferredLogFactory' is not assignable from available parameters image

Has anybody faced this? I am blocked by this issue, any help greatly appreciated.

jenkins-goldextech commented 3 years ago

For other class types, example: 'org.springframework.boot.env.RandomValuePropertySourceEnvironmentPostProcessor' which requires the same instance type, it's able to resolve it. See parameterTypes[i] image

it's available (see parameterTypes and availableParameters): image

mp911de commented 3 years ago

I'm not able to reproduce the issue using Spring Boot 2.5.1 and Spring Cloud 2020.0.3. VaultConfigDataLoader has a single constructor taking DeferredLogFactory as an argument (using a vanilla app via start.spring.io). Can you please provide a reproducer? Debugger screenshots aren't terribly helpful.

caponord commented 3 years ago

Resolved! In the end it was an dependency issue. Thanks for looking into it as well.

mp911de commented 3 years ago

Thanks a lot for the update. Closing the ticket.