I have two Spring profiles: dev
and test
. I want to set the active profile in the server environment, I don't want to set it in my code so that wherever I deploy my application the profile gets loaded based on the profile in the server.
How can I do that?
This question is related to
spring
spring-boot
spring-profiles
There are at least two ways to do that:
defining context param in web.xml – that breaks "one package for all environments" statement. I don't recommend that
defining system property -Dspring.profiles.active=your-active-profile
I believe that defining system property is a much better approach. So how to define system property for Tomcat? On the internet I could find a lot of advice like "modify catalina.sh" because you will not find any configuration file for doing stuff like that. Modifying catalina.sh is a dirty unmaintainable solution. There is a better way to do that.
Just create file setenv.sh in Tomcat's bin directory with content:
JAVA_OPTS="$JAVA_OPTS -Dspring.profiles.active=dev"
and it will be loaded automatically during running catalina.sh start or run.
Here is a blog describing the above solution.
For Eclipse, setting -Dspring.profiles.active
variable in the VM arguments would do the trick.
Go to
Right Click Project --> Run as --> Run Configurations --> Arguments
And add your -Dspring.profiles.active=dev
in the VM arguments
For Tomcat 8:
Linux :
Create setenv.sh and update it with following:
export SPRING_PROFILES_ACTIVE=dev
Windows:
Create setenv.bat and update it with following:
set SPRING_PROFILES_ACTIVE=dev
as System environment Variable:
Windows:
Start -> type "envi" select environment variables and add a new:
Name: spring_profiles_active
Value: dev
(or whatever yours is)
Linux: add following line to /etc/environment under PATH:
spring_profiles_active=prod
(or whatever profile is)
then also export spring_profiles_active=prod
so you have it in the runtime now.
In the <tomcat-home>\conf\catalina.properties
file, add this new line:
spring.profiles.active=dev
Source: Stackoverflow.com