Bootstrap.yml Configuration Not Processed Anymore With Spring Cloud 2020.0
Answer :
As pointed put by Nicoll, With Spring Cloud Vault 3.0 and Spring Boot 2.4, the bootstrap context initialization (bootstrap.yml
, bootstrap.properties
) of property sources was deprecated. This can be fixed in one of the 2 ways
- Use Spring Boot 2.4.0 Config Data API to import configuration from Vault (Preferred)
- Legacy Processing: Enable the bootstrap context either by setting the configuration property
spring.cloud.bootstrap.enabled=true
or by including the dependency
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency>
1. Use Spring Boot 2.4.0 Config Data API (Preferred)
Move bootstrap.yml configuration to application.yml and updated file looks like below
application.yml
spring: cloud: vault: authentication: APPROLE app-role: role-id: ${role-id} secret-id: ${secret-id} role: pres-read app-role-path: approle uri: ${vault-server} connection-timeout: 5000 read-timeout: 15000 config: import: vault://secret/app/pres/
And define individual profiles as shown below. Add spring.config.import: vault://secret/app/pres/demo
property.
application-demo.yml
## Server Properties server: port: 8081 spring: config: import: vault://secret/app/pres/demo datasource: username: ${pres.db.username} password: ${pres.db.password} url: ${pres.db.url} driver-class-name: com.mysql.cj.jdbc.Driver
Repeat the same process for all profiles like dev, test, qc, staging and prod.
2. Legacy Processing:
Add the following dependency if you still want to use bootstrap.yml
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency>
to the project. The issue will be resolved.
See Spring Cloud Vault docs for more information
I spent a whole day trying to resolve this issue. For everyone who is following any outdated cloud tutorials:- from springboot 2.4 bootstrap starter dependency has to be added, to follow along the tutorial to use bootstrap.properties (bootstrap.yml) for external configuration.
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency>
Comments
Post a Comment