HavenNo7
HavenNo7

Reputation: 107

Spring Best approach for multiple environments

I have the following:

And I have many environment:

Each one will have different URLs for System A. So I want to create a project that will integrate those systems. Since All Systems use Jersey and Spring, I can create one filter (jersey) that will abort the request in case the user is not authorized.

So the idea is to create Integration System that will be a JAR with Jerseys filters and uses the parents configuration (Active profile from Spring) to get the correct URL. I might even use this JAR to make System B communicate with System D also, if I can make this work.

The trick is, making this JAR get the correct .properties file based on the Enviroment (set on the parent-project). To be honest, I dont know where to begin.

Reading the DOCs for Spring Environment I found:

Do not use profiles if a simpler approach can get the job done. If the only thing changing between profiles is the value of properties, Spring's existing PropertyPlaceholderConfigurer / may be all you need.

I could have 3 different properties files (development, homolog or production) or I could have one properties file with different keys:

system.a.url.develpment=http://localhost:8080/systemA/authorize
system.a.url.homolog=http://localhost:8081/systemA/authorize
system.a.url.production=http://api.systemA.com/authorize

What is the best approach? What would you do?

Upvotes: 1

Views: 1814

Answers (1)

sodik
sodik

Reputation: 4683

In such "simple" case I would only use property file for configuration of urls and have different config files for different environments (dev, prod,..) with one (same named property), e.g.

system.a.url=http://localhost:8081/systemA/authorize

You can manage your property files manually (e.g. outside your jar/war) or you can use maven profiles to make jar/war file specific for your environment. But I don't see the need for spring profiles.

EDIT: Alternatively you can use environment variables to "configure" settings specific to an environment (what a coincidence in the names :)). Note that you can have different environments also inside one machine. For more details check e.g. this.

export AUTH_URL="http://localhost:8081/systemA/authorize"

Upvotes: 1

Related Questions