source

애플리케이션 속성을 정의되지 않음/설정 취소로 재정의합니다.

factcode 2023. 3. 10. 22:48
반응형

애플리케이션 속성을 정의되지 않음/설정 취소로 재정의합니다.

이것이 유효한 질문인지 잘 모르겠습니다만, 이것이 가능한지 궁금했습니다.

스프링 부트 프로젝트에는 application.properties와 몇 가지 프로파일 고유의 속성이 있습니다.프로파일 고유의 속성은 정의된 application.properties를 application-profile.properties에 정의된 속성으로 덮어쓰고 프로파일 고유의 속성에만 속하는 속성을 추가합니다.아래 그림:

application.properties

key1=value1
key2=value2

application-profile.properties

key1=valueProfile1
key3=valueProfile3

응용 프로그램이 이 프로필에서 시작할 때 표시되는 최종 속성은 다음과 같습니다.

key1=valueProfile1
key2=value2
key3=valueProfile3

즉, 공통 속성과 프로파일 속성이 모두 결합되어 있고 프로파일 속성 값이 공통을 추가 및 재정의합니다.

단, 어떤 시나리오에서 공통 application.properties에서 속성을 정의해야 하는데 특정 프로파일에서 응용 프로그램을 시작할 때 속성을 "정의되지 않음"으로 정의해야 하는 경우 어떻게 해야 합니까?아래 그림:

application.properties

keySpecial=specialValue
key1=value1
key2=value2

application-special.properties

key1=valueSpecial1
//unset or undefine keySpecial
keyAlternateSpecial=specialAlternateValue
key3=valueSpecial3

이 「특수한」프로파일로 애플리케이션을 기동하면, 다음과 같이 최종 속성을 표시할 수 있습니다.

keyAlternateSpecial=specialAlternateValue
key1=valueSpecial1
key2=value2
key3=valueSpecial3

keySpecial은 이 특수 프로파일에서 응용 프로그램을 실행할 때 정의되지 않으며 존재하지도 않습니다.

이게 가능합니까?

주의: 공통 application.properties에서 "keySpecial"을 정의하는 것을 자제하고 다른 모든 프로파일 고유의 속성에서 정의할 수 있습니다.또한 "특수" 프로파일 속성에만 "Key Alternate Special"을 지정하십시오.

상세 정보:

이에 대해 궁금했던 시나리오는 spring boot datasource jndi 속성입니다.문서에서

spring.datasource.jndi-name= # JNDI location of the datasource. Class, url, username & password are ignored when set.

이 속성이 존재하기만 하면 다른 데이터 소스 속성(class,url,username,password)이 설정되어 있어도 응용 프로그램은 무시합니다.

application.properties에서 jndi 속성을 삭제할 수 없습니다.대신 설정 해제/정의 해제하고 다른 데이터 소스 속성(class,url,username,password)을 "특수한" 프로파일 속성에 추가하고 싶었습니다.

application.property에서 spring.datasource.jndi-name을 삭제하기 위해 설정을 할 수 있습니다.spring.datasource.jndi-name=false. 쪽입니니다다@ConditionalOnProperty(prefix = "spring.datasource", name = "jndi-name")자동 구성 클래스가 활성화되지 않습니다.Conditional On Property javadoc 입니다.

다른 프로파일이 정의되어 있지 않을 때 활성화되는 기본 프로파일로 JNDI 속성을 정의함으로써 개발 중에 JNDI 없이 다른 데이터 소스를 사용할 수 있다는 점을 유스케이스에서 해결했습니다.

여기 제 가 있습니다.application.yml파일, 이게 당신에게 적합한지 모르겠네요.

spring:
  jpa:
    database: POSTGRESQL
    hibernate:
      ddl-auto: none
# Default profile, active by default on JBoss since no spring profiles are activated
---
spring:
  profiles: default
  datasource:
    jndi-name: java:jboss/datasources/anagraficaDS
# Development configuration
---
spring:
  profiles: development
  datasource:
    platform: postgres
    url: jdbc:postgresql://localhost:5432/my-db
    username: root
    password: secret
    driverClassName: org.postgresql.Driver

파티에 늦었지만:

Spring Boot 2.4 이후로는 프로파일 그룹이 권장됩니다.

놓다를 keySpecial=specialValue 기타 설정의 프로파일로 을 (라고 합니다)라고 special.
그런 다음 필요한 프로파일에 추가합니다.a,b , , , , 입니다.c한 것은 「」special를 지다a ★★★★★★★★★★★★★★★★★」b 그럼아니다,아니다,아니다,아니다,아니다,아니다.

spring.profiles.group.profilea[0]=special
spring.profiles.group.profileb[0]=special

언급URL : https://stackoverflow.com/questions/39702392/override-an-application-property-to-undefined-unset

반응형