spring-cloud-bindings icon indicating copy to clipboard operation
spring-cloud-bindings copied to clipboard

SCS Configuration Help Needed

Open emreyokur opened this issue 1 year ago • 0 comments

Hi,

We are experiencing problem integrating scs by using spring-cloud-bindings. Whatever we have tried, we could not bind scs to our app.

We have the below argument set to true on bootstrap.yml

org:
  springframework:
    cloud:
      bindings:
        boot:
          enable: true

We have added the below dependency to pom.xml

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>

We provided the necessary scs configuration parameters to the pod via a servicebinding secret, and we can see they are mounted to spring bindings root inside the container.

When we start the application, scs is being processed before cloud bindings processor. It is trying to connect config server over localhost:8888 and fails, then bindings are being processed and application is starting. We can inspect the properties after application has started successfully by checking actuator/configprops, all binding properties are being displayed correctly, however the app is not integrated with config server.

Our spring boot version is 2.7, spring cloud version is 2021.0.6 and cloud-bindings version is 1.14.0.

Startup logs are as follows.

:: Spring Boot ::               (v2.7.11)

2024-01-26 09:50:41.343
             INFO  [main:getRemoteEnvironment] org.springframework.cloud.config.client.ConfigServicePropertySourceLocator : **Fetching config from server at : http://localhost:8888/**
2024-01-26 09:50:41.545
             INFO  [main:getRemoteEnvironment] org.springframework.cloud.config.client.ConfigServicePropertySourceLocator : Connect Timeout Exception on Url - http://localhost:8888/. Will be trying the next url if available
2024-01-26 09:50:41.545
             WARN  [main:locate] org.springframework.cloud.config.client.ConfigServicePropertySourceLocator : Could not locate PropertySource: I/O error on GET request for "http://localhost:8888/DEVOPS.APPS.devops-pas-sandbox1/default": Connection refused; nested exception is java.net.ConnectException: Connection refused
2024-01-26 09:50:41.547
             INFO  [main:logStartupProfileInfo] org.springframework.boot.SpringApplication : No active profile set, falling back to 1 default profile: "default"
2024-01-26 09:50:41.558
             INFO  [main:logTo] org.springframework.boot.logging.DeferredLog : **Creating binding-specific PropertySource from Kubernetes Service Bindings**
2024-01-26 09:50:43.467
             INFO  [main:setSerializationId] org.springframework.cloud.context.scope.GenericScope : BeanFactory id=404a518b-3bec-3cba-b9b1-c91c9daa50e9
2024-01-26 09:50:44.456
             INFO  [main:initialize] org.springframework.boot.web.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)

As per the logs, bindings are being processed after config server property fetching has finished, so we thought there is a problem with beanprocessing orderings, we checked the code, and compared the ordering values between ConfigDataEnvironmentPostProcessor.ORDER and BindingSpecificEnvironmentPostProcessor.ORDER and found that the latter is "ConfigDataEnvironmentPostProcessor.ORDER - 1;" so it should be processed with a higher precedence. However the logs shown above behaves like vice versa.

emreyokur avatar Jan 26 '24 08:01 emreyokur