bestsource

환경변수를 통해 이름에 밑줄을 사용하여 Spring Boot 속성을 설정하려면 어떻게 해야 합니까?

bestsource 2023. 3. 20. 23:23
반응형

환경변수를 통해 이름에 밑줄을 사용하여 Spring Boot 속성을 설정하려면 어떻게 해야 합니까?

hibernate.format_sql스프링 부츠환경변수를 사용하여 설정하고 싶습니다.

Spring Boot에서 모든 합니다.FOO_BAR_BAZ to to to to to to to to to to라고 하는 foo.bar.baz봄.

Spring Boot에서 환경변수를 사용하여 타깃 이름에 밑줄이 있는 속성을 설정하려면 어떻게 해야 합니까? ★★★★★★★★★★★★★★★★★.HIBERNATE_FORMAT_SQL will will will will will will will will will will will로 번역됩니다.로 번역됩니다.hibernate.format.sql

이것은 오래된 질문이지만, (나와 같은) 다른 누군가가 이 정보를 찾게 될 경우에 대비하여 대답하겠습니다.

HISBERNATE_FORMAT_SQL이 기능을 합니다.

실제로 "변환"되는 것은 OS 환경 변수가 아니라 Spring 속성 이름입니다.

이름은 여러 가지 방법으로 변환되며 사용 가능한 환경 변수와 대조됩니다.예: "hibernate"format.sql"은 다음과 같이 검색됩니다.

  1. 동면하다format.sql(있는 그대로)
  2. hibernate_format_sql(밑줄로 대체됨)
  3. hibernate_format_sql(대시는 밑줄로 대체됩니다.이 경우는 동일합니다)
  4. hibernate_format_sql(대시 및 도트는 밑줄로 대체됩니다.이 경우는 동일합니다)

대문자에서도 마찬가지입니다.

  1. 휴지 상태FORMAT.SQL (있는 그대로)
  2. HISBERNATE_FORMAT_SQL(도트는 밑줄로 대체됨)
  3. HISBERNATE_FORMAT_SQL(대시는 밑줄로 대체되어 동일)
  4. HISBERNATE_FORMAT_SQL (대시 및 도트는 밑줄로 대체되어 동일)

set 명령 또는 export 명령어를 사용하여 이름에 점이 있는 환경변수를 설정할 수 없지만 env 명령어를 사용하면 가능합니다.나는 이것이 좋은 생각인지 아닌지에 대한 판단을 보류한다.

env "my.dotted.name=\"a value\"" the-command-you-want-to-run

자세한 내용은 System Environment Property Source.java를 참조하십시오.특정 버전에 링크합니다만, 사용하고 있는 버전을 확인해 주세요.

프로덕션 환경에서 이러한 문제를 해결하려면 속성 해결 코드에 대한 디버깅 로깅을 켜 보십시오.

logging:
  level:
    org.springframework.core.env: DEBUG

... 또는 적절한 환경변수를 설정함으로써 :)

편집: 관련 Spring Boot 매뉴얼 토픽을 숙지하는 것이 좋습니다.https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config

여기에 있는 코멘트의 보다 까다로운 예에 대해서는, 예를 들면 다음과 같습니다.spring.jpa.properties.hibernate.criteria.literal_handling_mode어플리케이션의 기동 방법에 따라서는, 다른 솔루션을 사용할 수 있습니다.

변수를 환경 변수에 포함된 JSON으로 설정할 수 있습니다.

env SPRING_APPLICATION_JSON='{"spring":{"jpa":{"properties":{"hibernate":{"criteria":{"literal_handling_mode":"BIND"}}}}}}' ./gradlew bootRun

변수를 그대로 설정하기만 하면 다음과 같이 동작할 수 있습니다.

env spring.jpa.properties.hibernate.criteria.literal_handling_mode=BIND ./gradlew bootRun

위의 두 가지가 모두 실행 중인 Spring Boot 어플리케이션의 값을 이렇게 얻을 수 있는 한에서의 셋업으로 동작했습니다.

@Value("${spring.jpa.properties.hibernate.criteria.literal_handling_mode}")
private String testSettingThroughEnvVariable;

이게 도움이 됐으면 좋겠네요!YMMV

나도 같은 문제가 있었어 환경 변수spring_jpa_properties_hibernate_default_schema봄 번역:spring.jpa.properties.hibernate.default.schema단, 휴지 상태에서는hibernate.default_schema.

(디바이스 문제)를 이유로 단순히 로 변경할 수 없습니다.spring.jpa.properties.hibernate.default_schema- 로컬 머신으로 작업합니다.

이렇게 풀었어요.

@Component
public class HibernateConfig implements HibernatePropertiesCustomizer {

    private final static String HIBERNATE_CUSTOM_DEFAULT_SCHEMA_PARAM = "hibernate.default.schema";

    @Override
    public void customize(Map<String, Object> hibernateProperties) {
        if (hibernateProperties.containsKey(HIBERNATE_CUSTOM_DEFAULT_SCHEMA_PARAM)) {
            hibernateProperties.put(AvailableSettings.DEFAULT_SCHEMA, hibernateProperties.get(HIBERNATE_CUSTOM_DEFAULT_SCHEMA_PARAM));
        }
    }
}

알고보니SPRING_JPA_SHOW_SQL=true정상적으로 동작합니다.이것이 특정 속성의 이름이 과부하가 되었음을 의미하는 것인지, 아니면 스프링이 더 영리한 일을 하고 있는지 알 수 없습니다.그것은 나의 문제를 해결했고 내가 질문한 예에 대해 원하는 행동을 했다.

언급URL : https://stackoverflow.com/questions/34178556/how-to-set-a-spring-boot-property-with-an-underscore-in-its-name-via-environment

반응형