복붙노트

[SPRING] Spring Boot 외부화 속성이 작동하지 않습니다.

SPRING

Spring Boot 외부화 속성이 작동하지 않습니다.

나는 아래 실을보고 거기에 주어진 것들을 따랐다. 여전히 내 속성 재정의가 발생하지 않습니다.

1) 스프링 부트 - 외부 특성 2) 프로파일 특정 속성 사용 가능 3) 스프링 부트 외부 설정

나는 바람둥이 8.0.33과 봄 부팅 스타터 웹에있어 내 setenv.sh에서 이것을 가지고있다.

export JAVA_OPTS="$JAVA_OPTS -Dlog.level=INFO -Dspring.config.location=file:/opt/jboss/apache-tomcat-8.0.33/overrides/ -Dspring.profiles.active=dev"

그리고 overrides 폴더에는 2 개의 파일이 있습니다.

1) application.properties 2) application-dev.properties

application.properties에 단일 항목이 있습니다.

spring.profiles.active=dev

적절한 log.level이이 명령이 작동하고 있음을 의미하는 내 코드로 전달된다는 것을 알았습니다. 그저 내가 오버라이드가 예상대로 일어나지 않는 이유에 관해서는 단서가 없다.

내 작업 공간에 PropertyPlaceholderConfigurer 코드가 없습니다. 1이 필요한지 잘 모르겠다.

도와주세요!!!

해결법

  1. ==============================

    1.속성을 외부화하는 데이 메서드를 사용하지 않습니다. 먼저, 당신의 방법에 대한 제안을 시도해 볼 것이고, 내가 사용하고있는 것을 보여 드리겠습니다.

    속성을 외부화하는 데이 메서드를 사용하지 않습니다. 먼저, 당신의 방법에 대한 제안을 시도해 볼 것이고, 내가 사용하고있는 것을 보여 드리겠습니다.

    당신의 메소드에 대한 제안은 file : / 대신에 file : /을 Spring과 같이 사용하는 것입니다. 콜론 뒤에 세 개의 슬래시를 전달하지 않으면 속성을 인식하지 못한다는 것을 알았습니다.

    지침과 함께 사용할 수있는 샘플 프로젝트를 만들었습니다.

    이제 내가 사용하는 방법.

    각 프로파일에 대한 설정 파일을 정의하고 src / main / resources 아래에 application.properties 파일을 보관합니다.

    그런 다음 각 구성 파일에 @Profile 및 @PropertySource 주석을 사용합니다.

    예 :

    @Configuration
    @Profile("dev")
    @PropertySource("file:///${user.home}/.devopsbuddy/application-dev.properties")
    public class DevelopmentConfig {
    
    @Bean
    public EmailService emailService() {
        return new MockEmailService();
    }
    
    @Bean
    public ServletRegistrationBean h2ConsoleServletRegistration() {
        ServletRegistrationBean bean = new ServletRegistrationBean(new WebServlet());
        bean.addUrlMappings("/console/*");
        return bean;
    }
    }
    

    @Configuration
    @Profile("prod")
    @PropertySource("file:///${user.home}/.devopsbuddy/application-prod.properties")
    public class ProductionConfig {
    
    @Bean
    public EmailService emailService() {
        return new SmtpEmailService();
    }
    }
    

    다음과 같이 ApplicationConfig를 호출하는 모든 프로파일에 유효한 구성 파일도 있습니다.

    @Configuration
    @EnableJpaRepositories(basePackages = "com.devopsbuddy.backend.persistence.repositories")
    @EntityScan(basePackages = "com.devopsbuddy.backend.persistence.domain.backend")
    @EnableTransactionManagement
    @PropertySource("file:///${user.home}/.devopsbuddy/application-common.properties")
    public class ApplicationConfig {
    }
    

    내 src / main / resources / application.properties 파일은 다음과 같습니다 :

    spring.profiles.active=dev
    default.to.address=me@example.com
    token.expiration.length.minutes=120
    

    물론 나는 시스템 속성으로 전달하여 spring.profile.active 속성을 외부화 할 수 있지만 내 경우에는 괜찮습니다.

    응용 프로그램을 실행할 때 "dev"프로파일을 전달하면 Spring은 DevelopmentConfig 클래스에 정의 된 모든 등록 정보 및 Bean과 ApplicationConfig의 모든 등록 정보를로드합니다. "prod"를 전달하면 ProductionConfig 및 ApplicationConfig 속성이 대신로드됩니다.

    저는 보안, 이메일, 데이터 JPA, Amazon Web Services, Stripe 등으로 Spring Boot 웹 사이트를 만드는 방법을 배우고 있습니다. 원할 경우 여기에 관심을 등록 할 수 있으며 등록 과정이 열릴 때 통보를 받게됩니다.

  2. from https://stackoverflow.com/questions/36635163/spring-boot-externalizing-properties-not-working by cc-by-sa and MIT license