{"id":14977552,"url":"https://github.com/marcellodesales/spring-mvc-with-spring-cloud-config-client-without-springboot","last_synced_at":"2025-10-02T12:30:35.665Z","repository":{"id":46824079,"uuid":"88204077","full_name":"marcellodesales/spring-mvc-with-spring-cloud-config-client-without-springboot","owner":"marcellodesales","description":"Sample Spring MVC web app with Spring Cloud Config Client and no SpringBoot","archived":false,"fork":true,"pushed_at":"2017-04-14T09:34:55.000Z","size":28,"stargazers_count":22,"open_issues_count":0,"forks_count":11,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-09-29T00:05:11.309Z","etag":null,"topics":["configuration","hack","spring-boot","spring-cloud","spring-cloud-config","spring-framework"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"l0rd/spring-mvc-helloworld","license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marcellodesales.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-04-13T20:32:55.000Z","updated_at":"2023-05-03T09:03:20.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/marcellodesales/spring-mvc-with-spring-cloud-config-client-without-springboot","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcellodesales%2Fspring-mvc-with-spring-cloud-config-client-without-springboot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcellodesales%2Fspring-mvc-with-spring-cloud-config-client-without-springboot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcellodesales%2Fspring-mvc-with-spring-cloud-config-client-without-springboot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcellodesales%2Fspring-mvc-with-spring-cloud-config-client-without-springboot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marcellodesales","download_url":"https://codeload.github.com/marcellodesales/spring-mvc-with-spring-cloud-config-client-without-springboot/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234983197,"owners_count":18917435,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["configuration","hack","spring-boot","spring-cloud","spring-cloud-config","spring-framework"],"created_at":"2024-09-24T13:55:54.031Z","updated_at":"2025-10-02T12:30:35.396Z","avatar_url":"https://github.com/marcellodesales.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Java Spring MVC Web App with Spring Cloud Config Client and NO SPRINGBOOT\n\nWe all know how difficult is to change the configuration of our apps and services in the middle of Production panic attacks :) Configuration management has become much simpler with Spring Cloud Config ecosystem, which allows dynamic configuration management for any service and clients, from backend to frontend. However, being mostly a Java shop, it has been really hard to onbonard customers due to the fact that they are required to migrate to SpringBoot. Therefore, it was really important to us to find a way around and easy customers adoption.\n\nThis is based on the discussions of https://github.com/spring-cloud/spring-cloud-config/issues/299.\n\n# Why this Sample\n\nThe reason why I decided to invest some time to make this reference example a reality was, by no means, to go against the SpringBoot's adoption. As a big fan, I'd like to help those who doesn't want to do a full sprint from the beginning, but would like it to be a \"crawl-walk-run\" one. That is:\n\n* You need dynamic configuration management from reading the magic from https://cloud.spring.io/spring-cloud-config/ and https://spring.io/guides/gs/centralized-configuration/.\n* You LOVE SpringBoot, but some of your services are STILL using JavaEE, or even in SpringFramework, but you don't have the time, money, budget, etc to make a full migration.\n* You work in a Platform team but you find resistence from your customers to adopt Spring Cloud Config based on the requirements of SpringBoot migration.\n* You want others, less fortunate souls, to come and embrace configuration management before embracing the full SpringBoot framework.\n\n\u003e NOTE: \n\u003e * This example uses the original SpringCloud Config client without any changes.\n\u003e * It does require you to add a couple of changes to your application, as described at https://github.com/spring-cloud/spring-cloud-config/issues/299\n\n\n# How to use Spring Cloud Config Client in Non-SpringBoot Web Applications?\n\n\u003e NOTE: \n\u003e * The solution to make this possible is described at https://github.com/spring-cloud/spring-cloud-config/issues/299#issuecomment-293990546. \n\u003e * The steps below are from the PR https://github.com/marcellodesales/spring-mvc-helloworld-spring-cloud-config-client/pull/1 to show the integration into an existing application.\n\n* Using a compatible Spring Framework to the Spring Cloud Config Client you want to use requires verifying their compatibility.\n* This solution involves changing the file `web.xml` and creating at least 3 classes to be added to your application.\n\n1. Add the dependency to the library to your application using the `pom.xml` as shown at https://github.com/marcellodesales/spring-mvc-helloworld-spring-cloud-config-client/pull/1/commits/1bf65f128f58f59111449dc13aa6b5e5f0eccb54\n * Optionally, add the dependency to `Run Jetty Run` to run the application in Eclipse, just like SpringBoot apps. https://github.com/marcellodesales/spring-mvc-helloworld-spring-cloud-config-client/pull/1/commits/bb395ae9b0b990a83a085db4398d247dd8419547\n \n2. Create an ApplicationContext that uses the Spring Cloud Config Client as a resource and update the `web.xml` with it.\n * https://github.com/marcellodesales/spring-mvc-helloworld-spring-cloud-config-client/pull/1/commits/3b5f5e8604c7335e4c2f5eda98a4d2563b281abf\n\n3. Create your POJO classes that represents a couple or multiple properties using `@Value` or `@ConfigurationProperties` annotations. \n * Use the @ConfigurationProperties to better plan your properties and organize them following a common business logic. I usually create `*Properties` classes where `Properties` help me identify that it's a POJO for configuration. \n * Only use @Value when you need a reference of a property alone.\n * Very useful when taking advantage of the `@RefreshScope` capabilities of Spring Cloud Config http://cloud.spring.io/spring-cloud-static/docs/1.0.x/spring-cloud.html#_refresh_scope\n \n4. Create the `@EnableConfigurationProperties` class instantiates the bean that's responsible for resolving classes with `@Value` and `@ConfigurationProperties`. \n * Note that this class MUST list all the Beans with @ConfigurationProperties\n * https://github.com/marcellodesales/spring-mvc-helloworld-spring-cloud-config-client/pull/1/commits/7d64e413b2ceb019e5ef38485f5acd45a5cdc699\n\n5. Autowire the new Properties Beans into an existing `@Controller` or `@Service`. \n * https://github.com/marcellodesales/spring-mvc-helloworld-spring-cloud-config-client/pull/1/commits/c15f54504dff4f629f8201f8514c78e885fd3d2b\n\n6. Add the Log level for the Spring Cloud Config Client to at least `INFO` and see what it is up to! \n * https://github.com/marcellodesales/spring-mvc-helloworld-spring-cloud-config-client/pull/1/commits/454d8350d42377b2ed8f1efdfa2daf6e37e7496f\n \n7. Enjoy! \n\n# Setup and Tools\n\nHere's what I use to get very close to SpringBoot's amazing set of commands.\n\n## Run Jetty Run\n\n* For very quick verification, I recommend installing the Jetty Eclipse Runner to quickly run and debug this application just like using SpringBoot's DevTools!\n* Follow the instructions from https://github.com/xzer/run-jetty-run#install.\n * You will be running your application as quickly as SpringBoot apps from the comfort of Eclipse :)\n * No need to deploy the app in Tomcat or other App Server\n\n[![Run Jetty Run](https://img.youtube.com/vi/Dtj1YBy9LKw/0.jpg)](https://www.youtube.com/watch?v=Dtj1YBy9LKw)\n\n* If you prefer to mimic SpringBoot in the command-line level, you can use http://www.eclipse.org/jetty/documentation/9.4.x/jetty-maven-plugin.html.\n\nBefore you run, make sure you execute the following:\n\n```java\n$ mvn eclipse:eclipse\n```\n\n## Docker\n\n* The repo originally comes with a Dockerfile. You can quickly build the application and run it inside a container.\n\n```java\n$ mvn package\n$ docker build -t reference .\n$ docker run -ti -p 8080:8080 reference\n```\n\nHowever, it is easier to just run it using Jetty.\n\n# Running this app\n\n\u003e This method requires `Spring Framework 4.2.5.RELEASE` at minimum.\n\u003e You must provide the environment variables to your application instead of setting the values.\n\nYou will run the following:\n\n* The Spring Cloud Config Server loading files from your local directory for the quick check.\n* Run the application to load the properties from it.\n\n## Running the Config Server\n\nYou can use the Docker image https://hub.docker.com/r/hyness/spring-cloud-config-server/ to quickly run the config server loading property files from the local directory. I'm providing the `docker-compose` with it, loading from the local directory indicated (my personal machine) or yours provided with the environment variable `SPRING_CLOUD_CONFIG_SERVER_NATIVE_SEARCH_LOCATIONS`.\n\n```yml\n$ cat config-server-local-directory.yml \nversion: '2.1'\n\nservices:\n  configServer:\n    image: hyness/spring-cloud-config-server\n    container_name: config-server\n    environment:\n      SPRING_CLOUD_CONFIG_SERVER_NATIVE_SEARCH_LOCATIONS: file:/local-development\n      SPRING_PROFILES_ACTIVE: native \n    volumes:\n      - ${SPRING_CLOUD_CONFIG_SERVER_NATIVE_SEARCH_LOCATIONS:-/home/mdesales/dev/github/spring-cloud-config-publisher-config}:/local-development\n    ports:\n      - 8888:8888\n\nvolumes:\n  \"config-server\":\n```\n\nStarting the config server can be done with the following:\n\n```\n$ docker-compose up\n```\n\nYou can verify it by calling the following:\n\n* `curl localhost:8888/publisher/qal/develop | jq` will show the current configuration from your running server, where:\n * `SPRING_APPLICATION_NAME` = publisher\n * `SPRING_PROFILES_ACTIVE` = qal \n * `SPRING_CLOUD_CONFIG_LABEL = develop\n\nHere's the example calling it and inspecting the output of the Metadata API. This application requires at least `github.cloneBaseDir` and `github.cloneBaseDir`. \n\n\u003e ATTENTION: Note that `develop` is not applicable in this example since it's NOT a github repo.\n\n```json\n{\n  \"name\": \"publisher\",\n  \"profiles\": [\n    \"qal\"\n  ],\n  \"label\": \"develop\",\n  \"version\": null,\n  \"state\": null,\n  \"propertySources\": [\n    {\n      \"name\": \"file:/local-development/publisher-qal.yml\",\n      \"source\": {\n        \"github.cloneBaseDir\": \"/app/spring-cloud-config-publisher/git_basedir\",\n        \"publisher.s3.cacheControl\": \"private; max-age: 61; s-max-age: 61\"\n      }\n    },\n    {\n      \"name\": \"file:/local-development/publisher.properties\",\n      \"source\": {\n        \"github.cloneBaseDir\": \"/tmp\",\n        \"github.token\": \"f4d24eed3909ad8766e29fd2500e80cb33d153a8\"\n     }\n  ]\n}\n```\n\n## Running the Application\n\nMake sure that there's a configuration service running at `SPRING_CLOUD_CONFIG_URI`, or it will try fetching configuration at http://localhost:8888. Converting the same properties defined above to your application, use the convention described by Spring Cloud Config.\n\n```sh\n$ SPRING_APPLICATION_NAME=publisher SPRING_PROFILES_ACTIVE=qal SPRING_CLOUD_CONFIG_LABEL=develop mvn jetty:run\n```\n\nThe following output is for the current version. Everything runs just like SpringBoot! If the application prints `Github Properties are` and `My Properties are`, with values associated with them, then it's a success! They are using Spring Cloud Config and Spring Framework to load properties using `@Value(\"${property.name}\")` and `@ConfigurationProperty(prefix = \"property.prefix\")` classes with magical powers.\n\n```java\n$ SPRING_APPLICATION_NAME=publisher SPRING_PROFILES_ACTIVE=qal SPRING_CLOUD_CONFIG_LABEL=develop mvn jetty:run         \n[INFO] Scanning for projects...\n[INFO]                                                                         \n[INFO] ------------------------------------------------------------------------\n[INFO] Building HelloWorld Maven Webapp 1.0-SNAPSHOT\n[INFO] ------------------------------------------------------------------------\n[INFO] \n[INFO] \u003e\u003e\u003e jetty-maven-plugin:9.4.3.v20170317:run (default-cli) \u003e test-compile @ HelloWorld \u003e\u003e\u003e\n[INFO] \n[INFO] --- maven-resources-plugin:2.3:resources (default-resources) @ HelloWorld ---\n[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!\n[INFO] Copying 2 resources\n[INFO] \n[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ HelloWorld ---\n[INFO] Nothing to compile - all classes are up to date\n[INFO] \n[INFO] --- maven-resources-plugin:2.3:testResources (default-testResources) @ HelloWorld ---\n[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!\n[INFO] skip non existing resourceDirectory /home/mdesales/dev/github/intuit/servicesplatform-tools/spring-cloud-config-reference-springframework-app/src/test/resources\n[INFO] \n[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ HelloWorld ---\n[INFO] No sources to compile\n[INFO] \n[INFO] \u003c\u003c\u003c jetty-maven-plugin:9.4.3.v20170317:run (default-cli) \u003c test-compile @ HelloWorld \u003c\u003c\u003c\n[INFO] \n[INFO] --- jetty-maven-plugin:9.4.3.v20170317:run (default-cli) @ HelloWorld ---\n[INFO] Configuring Jetty for project: HelloWorld Maven Webapp\n[INFO] webAppSourceDirectory not set. Trying src/main/webapp\n[INFO] Reload Mechanic: automatic\n[INFO] Classes = /home/mdesales/dev/github/intuit/servicesplatform-tools/spring-cloud-config-reference-springframework-app/target/classes\n[INFO] Logging initialized @2059ms to org.eclipse.jetty.util.log.Slf4jLog\n[INFO] Context path = /\n[INFO] Tmp directory = /home/mdesales/dev/github/intuit/servicesplatform-tools/spring-cloud-config-reference-springframework-app/target/tmp\n[INFO] Web defaults = org/eclipse/jetty/webapp/webdefault.xml\n[INFO] Web overrides =  none\n[INFO] web.xml file = file:///home/mdesales/dev/github/intuit/servicesplatform-tools/spring-cloud-config-reference-springframework-app/src/main/webapp/WEB-INF/web.xml\n[INFO] Webapp directory = /home/mdesales/dev/github/intuit/servicesplatform-tools/spring-cloud-config-reference-springframework-app/src/main/webapp\n[INFO] jetty-9.4.3.v20170317\n[INFO] Scanning elapsed time=1200ms\n[INFO] 1 Spring WebApplicationInitializers detected on classpath\n[INFO] DefaultSessionIdManager workerName=node0\n[INFO] No SessionScavenger set, using defaults\n[INFO] Scavenging every 660000ms\n23:46:13,390 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]\n23:46:13,390 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]\n23:46:13,390 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/home/mdesales/dev/github/intuit/servicesplatform-tools/spring-cloud-config-reference-springframework-app/target/classes/logback.xml]\n23:46:13,439 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set\n23:46:13,442 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]\n23:46:13,451 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT]\n23:46:13,505 |-WARN in ch.qos.logback.core.ConsoleAppender[STDOUT] - This appender no longer admits a layout as a sub-component, set an encoder instead.\n23:46:13,505 |-WARN in ch.qos.logback.core.ConsoleAppender[STDOUT] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.\n23:46:13,505 |-WARN in ch.qos.logback.core.ConsoleAppender[STDOUT] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details\n23:46:13,506 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.zenika.controller] to DEBUG\n23:46:13,506 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [com.zenika.controller] to false\n23:46:13,506 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[com.zenika.controller]\n23:46:13,507 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.springframework.cloud.config.client] to DEBUG\n23:46:13,507 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [org.springframework.cloud.config.client] to false\n23:46:13,507 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[org.springframework.cloud.config.client]\n23:46:13,507 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to ERROR\n23:46:13,507 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[ROOT]\n23:46:13,507 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.\n23:46:13,508 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@4ee5b2d9 - Registering current configuration as safe fallback point\n\n[INFO] Initializing Spring root WebApplicationContext\n##################### loaded my comfigurable context\n2017-04-13 23:46:13 [main] DEBUG c.z.c.config.CloudEnvironment - Adding [servletConfigInitParams] PropertySource with lowest search precedence\n2017-04-13 23:46:13 [main] DEBUG c.z.c.config.CloudEnvironment - Adding [servletContextInitParams] PropertySource with lowest search precedence\n2017-04-13 23:46:13 [main] DEBUG c.z.c.config.CloudEnvironment - Adding [jndiProperties] PropertySource with lowest search precedence\n2017-04-13 23:46:13 [main] DEBUG c.z.c.config.CloudEnvironment - Adding [systemProperties] PropertySource with lowest search precedence\n2017-04-13 23:46:13 [main] DEBUG c.z.c.config.CloudEnvironment - Adding [systemEnvironment] PropertySource with lowest search precedence\n##################### will load the client configuration\nConfigClientProperties [enabled=true, profile=qal, name=publisher, label=master, username=null, password=null, uri=http://localhost:8888, authorization=null, discovery.enabled=false, failFast=false, token=null]\n2017-04-13 23:46:14 [main] INFO  o.s.c.c.c.ConfigServicePropertySourceLocator - Fetching config from server at: http://localhost:8888\n2017-04-13 23:46:15 [main] INFO  o.s.c.c.c.ConfigServicePropertySourceLocator - Located environment: name=publisher, profiles=[qal], label=develop, version=null, state=null\n2017-04-13 23:46:15 [main] DEBUG c.z.c.config.CloudEnvironment - Adding [configService] PropertySource with lowest search precedence\n2017-04-13 23:46:15 [main] DEBUG c.z.c.config.CloudEnvironment - Initialized CloudEnvironment with PropertySources [servletConfigInitParams,servletContextInitParams,jndiProperties,systemProperties,systemEnvironment,configService]\n2017-04-13 23:46:15 [main] DEBUG c.z.c.config.CloudEnvironment - Replacing [servletContextInitParams] PropertySource with [servletContextInitParams]\n2017-04-13 23:46:15 [main] INFO  c.z.c.c.SpringCloudConfigContext - Refreshing Root WebApplicationContext: startup date [Thu Apr 13 23:46:15 PDT 2017]; root of context hierarchy\n2017-04-13 23:46:15 [main] DEBUG c.z.c.c.SpringCloudConfigContext - Bean factory for Root WebApplicationContext: org.springframework.beans.factory.support.DefaultListableBeanFactory@163042ea: defining beans [propertiesConfigurer,baseController,myPropeties,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.event.internalEventListenerProcessor,org.springframework.context.event.internalEventListenerFactory,org.springframework.web.servlet.view.InternalResourceViewResolver#0]; root of factory hierarchy\n2017-04-13 23:46:15 [main] DEBUG c.z.c.c.SpringCloudConfigContext - Unable to locate MessageSource with name 'messageSource': using default [org.springframework.context.support.DelegatingMessageSource@429aeac1]\n2017-04-13 23:46:15 [main] DEBUG c.z.c.c.SpringCloudConfigContext - Unable to locate ApplicationEventMulticaster with name 'applicationEventMulticaster': using default [org.springframework.context.event.SimpleApplicationEventMulticaster@e91b4f4]\nGithub Properties are f4d24eed3909ad8766e29fd2500e80cb33d153a8 with /app/spring-cloud-config-publisher/git_basedir\nMy Properties are: f4d24eed3909ad8766e29fd2500e80cb33d153a8 with /app/spring-cloud-config-publisher/git_basedir\n2017-04-13 23:46:15 [main] DEBUG c.z.c.c.SpringCloudConfigContext - Unable to locate LifecycleProcessor with name 'lifecycleProcessor': using default [org.springframework.context.support.DefaultLifecycleProcessor@5f366587]\n[INFO] Initializing Spring FrameworkServlet 'mvc-dispatcher'\nGithub Properties are f4d24eed3909ad8766e29fd2500e80cb33d153a8 with /app/spring-cloud-config-publisher/git_basedir\nMy Properties are: f4d24eed3909ad8766e29fd2500e80cb33d153a8 with /app/spring-cloud-config-publisher/git_basedir\n[INFO] Started o.e.j.m.p.JettyWebAppContext@6df7988f{/,file:///home/mdesales/dev/github/intuit/servicesplatform-tools/spring-cloud-config-reference-springframework-app/src/main/webapp/,AVAILABLE}{file:///home/mdesales/dev/github/intuit/servicesplatform-tools/spring-cloud-config-reference-springframework-app/src/main/webapp/}\n[INFO] Started ServerConnector@2efd2f21{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}\n[INFO] Started @7077ms\n[INFO] Started Jetty Server\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcellodesales%2Fspring-mvc-with-spring-cloud-config-client-without-springboot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarcellodesales%2Fspring-mvc-with-spring-cloud-config-client-without-springboot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcellodesales%2Fspring-mvc-with-spring-cloud-config-client-without-springboot/lists"}