Spring application properties profile with war file
Solution 1
You can define the spring profiles through the following:
web.xml
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>your target profile here</param-value>
</context-param>
setenv.sh
Under your Tomcat's bin folder create setenv.sh file with the following content:
JAVA_OPTS="$JAVA_OPTS -Dspring.profiles.active=<your target profile here>"
Solution 2
To package the project according to a pre defined profile, you need to do this :
In your
application.properties
, addIn your POM, add this :
<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources>
and define your profiles (just like what you did)
run the command
mvn package -P QA
You will see that in the generated WAR, in the application.properties
, [email protected]@
will be replaced with spring.profiles.active=QA
Solution 3
Only use this when you want to deploy.
java -jar -Dspring.profiles.active=<active profile name> <your war file name>.war
Solution 4
Have you tried this?
java -jar -Dspring.profiles.active=qa yourwarfilename.war
For packaging, you can create profiles like this and call this profile while building it via $mvn package -P QA:
<profiles>
<profile>
<id>QA</id>
<properties>
<spring.profiles.active>qa</spring.profiles.active>
</properties>
</profile>
</profiles>
adenix
Updated on July 05, 2022Comments
-
adenix almost 2 years
I am trying to package my project in a
.war
for a tomcat server deployment. I need the ability to use myapplication.properties
ORapplication-dev.properties
ORappliation-qa.properties
ORapplication-prod.properties
. Running the project with the embeded servlet I am able to specify via the command line which one I want to use, but, the project always usesapplication.properties
when I package it as a.war
.I use the following commands to run my project locally:
mvn spring-boot:run
mvn spring-boot:run -Drun.arguments="--spring.profiles.active=dev"
And this command to package my project though bamboo for deployment:
mvn package -Dspring.profiles.active=qa
Application.java
package com.pandera.wilson; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.context.web.SpringBootServletInitializer; import org.springframework.context.annotation.ComponentScan; import org.springframework.core.env.AbstractEnvironment; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; import javax.servlet.ServletContext; import javax.servlet.ServletException; import org.apache.log4j.Logger; /** * @author Gaurav Kataria * @author Austin Nicholas * @category Application */ @SpringBootApplication @ComponentScan(basePackages = { "com.pandera.wilson" }) @EnableAsync public class Application extends SpringBootServletInitializer { static final Logger logger = Logger.getLogger(Application.class); public static void main(String[] args) throws Exception { logger.info("Entering Application"); SpringApplication.run(Application.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(Application.class); } }
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.springframework</groupId> <artifactId>wilson</artifactId> <version>3.0.1</version> <packaging>war</packaging> <properties> <java.version>1.8</java.version> <start-class>com.pandera.wilson.Application</start-class> </properties> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.6.RELEASE</version> </parent> <build> <finalName>wilson-services</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.security.oauth</groupId> <artifactId>spring-security-oauth2</artifactId> </dependency> <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>sqljdbc4</artifactId> <version>4.0</version> </dependency> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20160212</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>com.microsoft.azure</groupId> <artifactId>azure</artifactId> <version>1.0.0-beta2</version> </dependency> </dependencies> <repositories> <repository> <id>spring-releases</id> <url>https://repo.spring.io/libs-release</url> </repository> </repositories> </project>
EDIT 1:30PM 7-21-16I've added the following to my pom.xml and tried packaging with
mvn package -P PROD
, however, when I hit/about
I still see that I'm usingappliation.properties
instead ofapplication-prod.properties
.<profiles> <profile> <id>QA</id> <properties> <spring.profiles.active>qa</spring.profiles.active> </properties> </profile> <profile> <id>DEV</id> <properties> <spring.profiles.active>dev</spring.profiles.active> </properties> </profile> <profile> <id>PROD</id> <properties> <spring.profiles.active>prod</spring.profiles.active> </properties> </profile> </profiles>
-
adenix almost 8 yearsThis does start the
.war
using the specified profile but I need to deploy the.war
into tomcat -
krmanish007 almost 8 yearsI have updated the answer, lets see if that solve your issue
-
adenix almost 8 yearsI'm using Spring Boot so I don't have a web.xml. Also I need to be able to specify my profile via command line when the project is packaged.
-
adenix almost 8 yearsThis looked promising but it still packaged with the fallback file
-
adenix almost 8 yearsAlso, I don't have access to the dev and qa servers to change the tomcat setup.
-
adenix almost 8 yearsI updated the question with what I added an how I tried to package the project.
-
adenix almost 8 yearsAfter some testing it seems that my maven profiles aren't being selected with -P PROD
-
krmanish007 almost 8 yearsI think stackoverflow.com/questions/11869064/… will answer your question
-
Rae Burawes almost 8 yearsOh I see. I think
spring.profiles.default
might help you.