2

저는 스프링 부트 1.5.2를 사용 중이며 프로필을 사용하고 있지만 매우 이상한 것을 발견했습니다. 이 같은항상 같은 프로필을 사용하는 스프링 부트

내 봄 부팅 자원 폴더 : application.yml

spring: 
    profiles: 
    active: @[email protected] 

응용 프로그램 dev.yml에서 enter image description here

CONFIGS

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 

모든 것이 정상인 것처럼 보입니다. 나는 항아리를 실행하려고하면 우리가 지금 test or prod 프로필을 사용하여 application.yml 쇼 있지만

enter image description here

하지만, 항상, dev에 프로필을 사용하여. 내 YML의 CONFIGS 잘못입니다

enter image description here

나도 몰라. 그리고 하나의 application.yml 파일에 모든 프로필 구성을 포함하려고합니다. 그러나 응용 프로그램은 여전히 ​​dev 프로필을 사용합니다. 나는 내 응용 프로그램이 올바른 프로필을 사용할 수 있습니다 실행할 때

는 완전히 내 CONFIGS 모두 잘 작동

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 

마지막으로, 나는 특성을 파일을 사용하려고 하나 개 application.yml 파일에 CONFIGS.

그리고 이제 yml 구성 파일의 문제점을 알고 싶습니다.

미리 감사드립니다.

+0

Git 리포지토리에 모든 항목을 함께 넣어서 어떻게 구성했는지 쉽게 볼 수 있습니까? –

+0

방금 ​​정의한 것과 같은 간단한 프로젝트를 만들었습니다. 모든 것은 예상대로 작동합니다. IntelliJ 외부로 항아리를 주려고 할 수 있습니까? – Patrick

답변

1

마지막으로, 나는 이유를 발견하여 작업을 실행합니다.

내 프로젝트는 여러 모듈 받는다는 프로젝트입니다.

하나 개의 모듈 나는 yml 형식,

을 이용하고 있고 다른 하나는 property 형식입니다.

두 모듈을 모두 yml 형식으로 만들면 모든 것이 정상입니다.

여러분 모두 감사합니다! 감사!

2

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

처럼 단지를 실행하거나 당신이 필요로하는 프로파일의 이름에 @ profileActive @를 교체하십시오.

0

스프링 부트로 인해 application.yml이 읽힐 때 이미 기본 프로필로 폴백할지 여부가 문제 일 수 있습니다. 거기에서, 나는 생각합니다. 프로필을 전환하는 것이 늦었습니다.

시도해 볼 수있는 것은 "bootstrap.yml"이라는 구성 파일에서 spring.profiles.active 속성을 정의하는 것입니다. 이것은 당신을위한 트릭을 할 수 있습니다.

0

작은 응용 프로그램을 시작하려면 추가 종속성으로 spring-boot-starter-web으로 사용자의 설명을 재현했습니다.

모든 것이 예상대로 작동합니다. mvn clean package -Ptest을 실행하면 test 프로파일이 활성화됩니다. 다른 프로필과 동일합니다. 나는 모든 프로파일을 하나의 yml 파일에 집어 넣어서 <include>application-${profileActive}.yml</include>을 주석 처리하고 작동한다.

부모 파일 시스템 경로에서 JAR 파일을 실행할 때 예상대로 작동합니다. 동시에 다른 프로파일로 다른 Maven 빌드를 실행하고 애플리케이션을 다시 시작하면 새 프로파일이 사용됩니다.

dev이 아닌 다른 프로필로 mvn clean package을 사용하는 경우 application-dev.yml이 생성 된 JAR에 존재하지 않아야합니다. clean과 Maven 프로파일이 다른 빌드가 없으면 JAR에 모두 포함됩니다.

어떤 OS를 사용하십니까? 뭔가가 JAR 파일의 파일 핸들을 보유 할 가능성이 있으며 바뀌지 않을 수 있습니까? 그러나 이것은 Maven 빌드에서 시그널되어야한다. 그냥 이것에 대한 JVM 속성을 설정할 수 있기 때문에))

spring: 
    profiles: 
    active: @[email protected] 

2

1) (당신의 application.yaml에서이 제거 프로파일 특정 헤더를 제거합니다

+0

감사합니다. 다시 시도하겠습니다. – diligent

0

나는 개인적으로 다음을 수행 할 것 각 프로파일 별 yaml 파일에서. 프로필이 파일 접미사를 기반으로하므로 필요하지 않습니다. 이 제거 :

spring: 
    profiles: dev 

3) 올렉 말했듯이, 단지 Dspring.profiles.active =이 무엇이든간에

관련 문제