2

我使用彈簧引導1.5.2,並使用配置文件,但我發現了一件很奇怪的事情。彈簧引導始終使用相同的配置文件

我的春天啓動的資源文件夾是這樣的: enter image description here

CONFIGS在application.yml

spring: 
    profiles: 
    active: @[email protected] 

應用dev.yml

spring: 
    profiles: dev 
    datasource: 
     driver-class-name: com.mysql.jdbc.Driver 
     url: jdbc:mysql://localhost:3306/db1 
     username: root 
     password: 
server: 
    port: 8080 

應用test.yml

spring: 
    profiles: test 
    datasource: 
    driver-class-name: com.mysql.jdbc.Driver 
    url: jdbc:mysql://localhost:3306/db2 
    username: root 
    password: 

server: 
    port: 8081 

我的pom.xml,只包含資源部分和配置文件部分。

<!-- profile --> 
<profiles> 
    <profile> 
     <id>dev</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <properties> 
      <build.profile.id>dev</build.profile.id> 
      <profileActive>dev</profileActive> 
     </properties> 
    </profile> 
    <profile> 
     <id>test</id> 
     <properties> 
      <build.profile.id>test</build.profile.id> 
      <profileActive>test</profileActive> 
     </properties> 
    </profile> 
    <profile> 
     <id>prod</id> 
     <properties> 
      <build.profile.id>prod</build.profile.id> 
      <profileActive>prod</profileActive> 
     </properties> 
    </profile> 
</profiles> 


<resources> 
     <resource> 
      <directory>src/main/java</directory> 
      <excludes> 
       <exclude>**/*.java</exclude> 
      </excludes> 
     </resource> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>true</filtering> 
      <includes> 
       <include>application-${profileActive}.yml</include> 
       <include>application.yml</include> 
       <include>templates/*</include> 
      </includes> 
     </resource> 

    </resources> 

我現在想用測試概,發現一切正常,@[email protected]已經更換到test;

mvn clean package -Dmaven.test.skip=true -Ptest 

看起來好像一切正​​常。

enter image description here

但是當我嘗試運行jar,它總是使用開發輪廓,雖然application.yml顯示了我們現在使用的test or prod輪廓。

enter image description here

我不知道哪裏是錯誤的,我陽明CONFIGS。我嘗試將所有配置文件配置包含在一個application.yml文件中。但應用程序仍然使用dev配置文件。

完全CONFIGS在一個application.yml文件

spring: 
    profiles: 
    active: @[email protected] 

--- 
spring: 
    profiles: dev 
    datasource: 
    driver-class-name: com.mysql.jdbc.Driver 
    url: jdbc:mysql://localhost:3306/db1 
    username: root 
    password: 

server: 
    port: 8080 

--- 
spring: 
    profiles: test 
    datasource: 
    driver-class-name: com.mysql.jdbc.Driver 
    url: jdbc:mysql://localhost:3306/db2 
    username: root 
    password: 

server: 
    port: 8081 

--- 
spring: 
    profiles: prod 

server: 
    port: 9000 

最後,我嘗試使用性能文件,所有我的configs的正常工作,當我運行我的應用程序可以使用正確的個人資料。

而現在,我只想知道我的yml配置有什麼問題。

在此先感謝!

+0

你可以把所有的東西放在一個Git倉庫中,讓你很容易看到_exactly_你如何配置東西? –

+0

我剛剛創建了一個與您定義的完全相同的簡單項目。一切工作如預期。你可以嘗試在intelliJ之外運行jar嗎? – Patrick

回答

1

終於,我找到了原因運行任務。

我的項目是一個多模塊Maven項目。

一個模塊,我使用yml格式,

等是property格式。

當我製作兩個模塊都是yml格式時,一切正常。

感謝大家!謝謝!

2

嘗試運行你的罐子像

java -jar -Dspring.profiles.active=test yourapp.jar 

或更換@ profileActive @上你所需要的配置文件的名稱。

0

問題可能在於,當spring啓動讀取您的application.yml時,它已經決定回退到默認配置文件。從那裏開始,我認爲,切換配置文件已經晚了。

你可以嘗試的是在名爲「bootstrap.yml」的配置文件中定義你的spring.profiles.active屬性。這可能對你有用。

0

我將spring-boot-starter-web的描述複製爲附加依賴項,以便能夠啓動一個小應用程序。

一切按預期工作。如果我運行mvn clean package -Ptesttest配置文件將被激活。與其他配置文件相同。我把所有的配置文件放在一個yml文件中,註釋掉<include>application-${profileActive}.yml</include>,它也可以工作。

當我像父母文件系統路徑一樣執行JAR文件時,一切都按預期工作。當我使用另一個配置文件同時執行另一個Maven構建並重新啓動應用程序時,將使用新的配置文件。

如果您使用的mvn clean packagedev之外的其他配置文件,任何application-dev.yml都不應該在生成的JAR中。如果沒有clean以及具有不同Maven配置文件的不同構建,它們將全部位於JAR中。

你使用哪個操作系統?是否有可能在您的JAR文件中包含文件句柄並且不會被替換?但是這應該在Maven構建中發出信號。

+0

謝謝,我會再試一次。 – diligent

0

我會親自執行以下操作:

1)從application.yaml刪除此(因爲你可以設置一個JVM屬性用於此)

spring: 
    profiles: 
    active: @[email protected] 

2)刪除輪廓特定頭從你的每個配置文件特定的yaml文件。您不需要它,因爲該配置文件基於文件後綴,例如刪除此:

spring: 
    profiles: dev 

3)奧列格說,剛與Dspring.profiles.active =無論