Setting Spring Profile variable
You can simply set a system property on the server as follows...
-Dspring.profiles.active=test
Edit: To add this to tomcat in eclipse, select Run -> Run Configurations
and choose your Tomcat run configuration. Click the Arguments
tab and add -Dspring.profiles.active=test at the end of VM arguments
. Another way would be to add the property to your catalina.properties in your Servers
project, but if you add it there omit the -D
Edit: For use with Spring Boot, you have an additional choice. You can pass the property as a program argument if you prepend the property with two dashes.
Here are two examples using a Spring Boot executable jar file...
System Property
[user@host ~]$ java -jar -Dspring.profiles.active=test myproject.jar
Program Argument
[user@host ~]$ java -jar myproject.jar --spring.profiles.active=test
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 should do the trick.
Go to
Right Click Project --> Run as --> Run Configurations --> Arguments
And add your -Dspring.profiles.active=dev
in the VM arguments