1

I have a Spring Boot Config server that reads some properties from the local resources folder. The foldersetup is this:

  • resources
    • config
      • application-production.properties
      • application.properties
    • application.properties

In resources/application.properties, I have the following:

spring.application.name=configserver
server.port=8012
spring.profiles.active=native
spring.cloud.config.server.native.search-locations=classpath:/config

This works just fine in dev. But in Production, in the Kubernetes manifest, I pass the following:

env:
  - name: SPRING_PROFILES_ACTIVE
    value: "production"

And I'm getting the following error from the pod that attempts to start this:

2023-02-27 22:56:43.192 INFO 1 --- [ main] .c.c.ConfigServerApplication : The following 1 profile is active: "production" 2023-02-27 22:56:48.082 INFO 1 --- [
main] o.s.cloud.context.scope.GenericScope : BeanFactory id=f34714c7-eae5-36bb-b71e-023da97acc11 2023-02-27 22:56:50.190 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2023-02-27 22:56:50.205 INFO 1 --- [ main] o.apache.catalina.core.StandardService
: Starting service [Tomcat] 2023-02-27 22:56:50.205 INFO 1 --- [
main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.58] 2023-02-27 22:56:50.781 INFO 1 --- [
main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2023-02-27 22:56:50.781 INFO 1 --- [
main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 7294 ms 2023-02-27 22:56:57.701 WARN 1 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'defaultEnvironmentRepository' defined in class path resource [org/springframework/cloud/config/server/config/DefaultRepositoryConfiguration.class]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: You need to configure a uri for the git repository. 2023-02-27 22:56:57.704 INFO 1 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat] 2023-02-27 22:56:57.796 INFO 1 --- [ main] ConditionEvaluationReportLoggingListener :

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2023-02-27 22:56:57.993 ERROR 1 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter
:

*************************** APPLICATION FAILED TO START


Description:

Invalid config server configuration.

Action:

If you are using the git profile, you need to set a Git URI in your configuration. If you have set spring.cloud.config.server.bootstrap=true, you need to use a composite configuration.

I don't understand enough about profiles in Spring Boot, but how do I run the config server in Production and specify native for the paths?

Jenna S
  • 616
  • 1
  • 6
  • 24
  • Can you try passing --spring.profiles.active=native as a startup parameter? this is the same as having it in the application.yml or .properties file. – gcpdev-guy Feb 28 '23 at 03:42
  • I was worried that 'native' is a non-production profile, so it does work, but what if I had other settings based on a 'production' profile? What exactly is a 'native' profile anyway?! Something specifically reserved for a config server where you don't have any business code? – Jenna S Feb 28 '23 at 05:19
  • Maybe one cannot do what I need based on this: https://github.com/spring-cloud/spring-cloud-config/issues/1503 – Jenna S Feb 28 '23 at 05:58

1 Answers1

1

The problem is that SPRING_PROFILES_ACTIVE environment variable overrides spring.profiles.active specified in application.properties and thus makes native not active.

You should replace spring.profiles.active with spring.profiles.include.

Sometimes, it is useful to have properties that add to the active profiles rather than replace them. The spring.profiles.include property can be used to add active profiles on top of those activated by the spring.profiles.active property.

Similar to spring.profiles.active, spring.profiles.include can only be used in non-profile specific documents.

For reference: Spring Docs - Adding Active Profiles

Toni
  • 3,296
  • 2
  • 13
  • 34