2016-07-21 40 views
1

Ich versuche mein Projekt in eine .war für eine Tomcat-Server-Bereitstellung zu packen. Ich brauche die Fähigkeit zu verwenden, um meine application.propertiesODERapplication-dev.propertiesODERappliation-qa.propertiesORapplication-prod.properties. Wenn ich das Projekt mit dem eingebetteten Servlet ausführe, kann ich über die Befehlszeile angeben, welches ich verwenden möchte, aber das Projekt verwendet immer application.properties, wenn ich es als .war verpacke.Spring Anwendung Eigenschaften Profil mit War-Datei

Ich verwende die folgenden Befehle mein Projekt lokal auszuführen:

  1. mvn spring-boot:run
  2. mvn spring-boot:run -Drun.arguments="--spring.profiles.active=dev"

Und dieser Befehl mein Projekt zu verpacken, obwohl Bambus für den Einsatz:

  • 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 01.30 7-21-16

ich folgendes meiner pom.xml und versuchte Verpackung mit mvn package -P PROD jedoch hinzugefügt haben, wenn ich /about traf ich sehe immer noch, dass ich verwende appliation.properties anstelle von application-prod.properties.

+0

Haben Sie die Lösung dafür gefunden? –

+0

Das Aktualisieren meiner Springboot-Version hat dies für mich behoben. Sie haben die Konfiguration der Anwendung für externe Servlet-Bereitstellungen geändert und dieses Problem behoben. – adenix

Antwort

0

Haben Sie das versucht?

java -jar -Dspring.profiles.active=qa yourwarfilename.war 

Für Verpackung, können Sie ähnliche Profile erstellen und dieses Profil aufrufen, während es über $ mvn Paket -P QA Aufbau:

<profiles> 
    <profile> 
    <id>QA</id> 
    <properties> 
     <spring.profiles.active>qa</spring.profiles.active> 
    </properties> 
    </profile> 
</profiles> 
+0

Dies startet die '.war' mit dem angegebenen Profil, aber ich muss die' .war' in Tomcat – adenix

+0

Ich habe die Antwort aktualisiert, lassen Sie sehen, ob das Ihr Problem lösen – krmanish007

+0

Dies sah vielversprechend aus, aber es immer noch mit dem Fallback verpackt Datei – adenix

3

Sie die Federprofile durch die folgenden definieren:

web.xml

<context-param> 
<param-name>spring.profiles.active</param-name> 
<param-value>your target profile here</param-value> 
</context-param> 

setenv.sh

Unter Ihren Tomcat Binärordner setenv.sh-Datei mit folgendem Inhalt:

JAVA_OPTS="$JAVA_OPTS -Dspring.profiles.active=<your target profile here>" 
+0

Ich ' m benutze Spring Boot, also habe ich keine web.xml. Außerdem muss ich in der Lage sein, mein Profil über die Befehlszeile anzugeben, wenn das Projekt gepackt wird. – adenix

+0

Ich habe auch keinen Zugriff auf die Dev- und Qa-Server, um das Tomcat-Setup zu ändern. – adenix

+0

Oh, ich verstehe. Ich denke, 'spring.profiles.default' könnte Ihnen helfen. –

0

ich hoffe, dass dies Ihr Problem lösen. (Erstes werde ich für appology fragen, weil meine inglish es sehr schlecht, aber ich möchte Ihnen helfen)

Nun, mein Kommentar:

Ich bin Codierung mit Maven und Feder-Boot.

müssen Sie alle Ihr Profile mit ihren jeweiligen Eigenschaften in der pom.xml haben (in meinem Fall habe ich Loggern pro Profil haben, fügen Sie die Eigenschaften, die Sie benötigen):

<profile> 
<id>test</id> 
    <activation> 
     <activeByDefault>false</activeByDefault> 
    </activation> 
    <properties> 
     <FILE_LOG_LEVEL>INFO</FILE_LOG_LEVEL> 
    </properties> 
</profile> 

dann können Sie das Profil auswählen Frühling erzählen mit weicht eine Arbeit über die Datei „aplication.properties“:

spring.profiles.active = "nameOfP rofileYouWantToActive "

Mit diesem müssen Sie nur ausführen: mvn clean-Paket und Sie werden Ihre Bereitstellung.