Adding multiple repositories to Spring cloud config server - spring-boot

I need to add two config repositories to my config server. But, it picks only one config repository. Can anyone please help me to fix this problem.
Config Server bootstrap.yml
server:
port: 8899
spring:
cloud:
config:
server:
git:
uri: https://github.com/pocuser9x/wednest-config-store
search-paths:
- 'wednest-config-store/*service'
repos:
uri: https://github.com/pocuser9x/secure-config-store
In https://github.com/pocuser9x/wednest-config-store I have below files
event-service.yml
event-service-dev.yml
event-service-stg.yml
These files are picking correctly.
In https://github.com/pocuser9x/secure-config-store I have below file
event-service-prod.yml
This file is not picking.

I think what you are looking for is the composite repo feature. It is documented here.
For you, this would be something like:
spring:
profiles:
active: composite
cloud:
config:
server:
composite:
-
type: git
uri: https://github.com/pocuser9x/wednest-config-store
search-paths:
'wednest-config-store/*service'
-
type: git
uri: https://github.com/pocuser9x/secure-config-store
One note is that the documentation shows profile set as above, but I found a need to use "include" instead of "active". Include is additive.
profiles:
include: composite

Related

How to access multiple application yml from difference service on configure server(Spring)

I have configured "configure-server" by fetching all configuration from gitlab repository.
Currently, when application(config-server) start it fetch all application properties in git repo.
In case, I have two client application A,B
which has difference application properties like
aplication-a.yml
aplication-b.yml
when application A start, I just only want configure-service fetch only application-a.yml from git repositry.
Here is application configure:
Configure Server
server:
port: 9000
spring:
application:
name: CONFIG-SERVER
cloud:
config:
server:
git:
uri: https://gitlab.com/mama/cloud-configure-server.git
clone-on-start: true
default-label: main
Application A
spring:
cloud:
config:
enabled: true
uri: http://localhost:9000
How to tell configure-service fetch only application-a.yml from git repository?
In case, I don't want to fetch all?
Thank you!!

Are multiple GIt hosts in the Spring Cloud config server possible?

With the recent outage of Microsoft's Azure Services our team is brain storming ways to add redundancy and fault tolerance to our apps.
In the documentation on Spring.IO there are multiple ways of using Git, SVN, or vault together but Im interested in using Two Git host.
setting the Composite profile maybe what Im looking for but that sounds like if I'm trying to override values from all the repositories listed and Im looking for a complete fail-over option.
My use case is how to configure the config server so that if a host goes down and we cannot retrieve our config file to fail over to our second GIT host.
IS this possible and what would the configuration look like?
My guess is something like this with ordering.
spring:
profiles:
cloud:
config:
server:
git:
uri: bitbucket.com
order: 1
git:
uri: github.com
order: 1
The answer is to use the composite feature:
spring:
profiles:
active: composite
cloud:
config:
server:
composite:
-
type: git
uri: file:///path/to/rex/git/repo
-
type: git
uri: file:///path/to/walter/git/repo

Is is possible to configure multiple git repositories in Spring Cloud Config Server

I would like to read some configurations from multiple git repositories, something like:
spring:
profiles:
active: base, app1, app2
cloud:
config:
server:
base:
uri: http://${GIT_HOST}/base/base.git
username: ${GIT_USERNAME}
password: ${GIT_PASSWORD}
app1:
uri: http://${GIT_HOST}/group1/app1.git
username: ${GIT_USERNAME}
password: ${GIT_PASSWORD}
app2:
uri: http://${GIT_HOST}/group2/app2.git
username: ${GIT_USERNAME}
password: ${GIT_PASSWORD}
At startup I see the following exception:
Caused by: java.lang.IllegalStateException: You need to configure a uri for the git repository
The documentation shows an example using two different repos, git and svn. Can't we use multiple repos of the same kind?
Due to the link of document you said, the svn and git after server is the type, not profile. So you cannot use base, app1, app2.
But in your case, I think you can use this kind of config: document link.
spring:
cloud:
config:
server:
git:
uri: https://git/common/config-repo.git
repos:
team-a:
pattern: team-a-*
cloneOnStart: true
uri: http://git/team-a/config-repo.git
team-b:
pattern: team-b-*
cloneOnStart: false
uri: http://git/team-b/config-repo.git
team-c:
pattern: team-c-*
uri: http://git/team-a/config-repo.git

Spring cloud config local and remote repositories for different profiles

I'm trying to setup my application with multiple repositories - a local file based one for development/testing purpose and a remote git repo for production.
I am using the following yaml for this purpose -
spring:
application:
name: localRepoConfig
cloud:
config:
server:
git:
uri: https://github.com/spring-cloud-samples/config-repo
repos:
development:
pattern:
- '*/development'
- '*/staging'
uri: https://github.com/development/config-repo
native:
searchLocations: classpath:/config
server:
port: 8888
This is not working however, the following works for the local repo -
spring:
application:
name: localRepoConfig
profiles:
active: native
cloud:
config:
server:
native:
searchLocations: classpath:/config
server:
port: 8888
I have not been able to make the two repositories function, after following the Spring documentation and a few posts here.
Would greatly appreciate if someone can point me in the right direction.
I got this working with the following config in bootstrap.yml -
spring:
application:
name: localRepoConfig
profiles:
active: native
cloud:
config:
server:
native:
searchLocations: classpath:/config
server:
port: 8888
---
spring:
profiles: development
cloud:
config:
server:
git:
uri: https://github.com/spring-cloud-samples/config-repo
server:
port: 8989
I am able to switch between the native and development profiles now.
The following guide was quite helpful -
kubecloud.io/guide-spring-cloud-config/
Based on the documentation on Spring Cloud Config it sounds like native and git are mutually exclusive and that you can't use both for a single config server.

How to ask Spring Cloud Config server to checkout configuration from specific branch?

I have following Spring cloud config application.yml:
spring:
application:
name: configserver
cloud:
config:
server:
git:
uri: https://xyz#bitbucket.org/xyz/microservices-configs.git
username: xyz
password: xyz
basedir: target/configs
server:
port: 8881
Following is my bootstrap.yml of user microservice:
spring:
application:
name: userservice
cloud:
config:
uri: http://localhost:8881/
Scenario - 1
When I hit config server in browser like this:
http://localhost:8881/development/userservice-development.yml
It serves file properly. and when I look at basedir i.e. target/config, I see:
- userservice.yml
- gateway.yml
Exactly what I wanted, Since I added this two files only in development branch.
Scenario - 2
When I run my userservice microservice project using following command:
mvn clean spring-boot:run -Dspring.profiles.active=development
It fetches the right file from git, but it checkout from master branch ! but not from the development branch as I am expecting. am I expecting right ? (FYI I have both development and production yml in master branch)
So the question is, how do we go for using config server ? Is there any configuration which we can set to fetch yml from that particular branch only ? I believe we need to set some label, because as per documentation, default label is master. Can anyone let me know how do we go for setting label in above scenario ?
According to the documentation, the configuration you want to set in your config client is:
spring.cloud.config.label=mybranch
Where mybranch is an existing branch in your git repo.
You can specify the default branch (more generally, Git label) that a config server uses if a client does not specify the label, via property spring.cloud.config.server.git.default-label, perhaps this is what you are after? Certainly solves the issue for me!
If only use the branch in a yml file just configure:
spring:
cloud:
config:
server:
git:
uri: https://gitlab.com/somerepo.git
username: someuser
password: somepass
default-label: branchname
Config server designed to use profile to separate environment.
Example:
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
The branching make configuration inconsistency.
Concept of config server is based on 12-factor config (http://12factor.net/config ) .
Check it out for detail reason.

Resources