복붙노트

[SPRING] @ConfigurationProperties 접두사가 작동하지 않습니다.

SPRING

@ConfigurationProperties 접두사가 작동하지 않습니다.

.yml 파일

cassandra:
    keyspaceApp:junit
solr:
    keyspaceApp:xyz

@Component
@ConfigurationProperties(prefix="cassandra")
public class CassandraClientNew {
   @Value("${keyspaceApp:@null}") private String keyspaceApp;

기본 메소드 파일

@EnableAutoConfiguration
@ComponentScan
@PropertySource("application.yml")
public class CommonDataApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = new SpringApplicationBuilder(CommonDataApplication.class)
                .web(false).headless(true).main(CommonDataApplication.class).run(args);
    }
}

테스트 사례

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = CommonDataApplication.class)
@IntegrationTest
@EnableConfigurationProperties
public class CassandraClientTest {

    @Autowired
    CassandraClientNew cassandraClientNew;

    @Test
    public void test(){
        cassandraClientNew.getSession();
        System.out.println(" **** done ****");
    }
}

junit을 keyspaceApp로 설정하는 대신 xyz를 설정합니다.

접두사 = "cassandra"가 작동하지 않는 것 같습니다.

해결법

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

    1.Spring Boot Typesafe Configuration Properties 기능을 사용하려는 것 같습니다.

    Spring Boot Typesafe Configuration Properties 기능을 사용하려는 것 같습니다.

    따라서 올바르게 작동하게하려면 코드에 몇 가지 변경 사항을 추가해야합니다.

    먼저 CommonDataApplication 클래스에는 @EnableConfigurationProperties 주석이 있어야합니다.

    @EnableAutoConfiguration
    @ComponentScan
    @PropertySource("application.yml")
    @EnableConfigurationProperties
    public class CommonDataApplication {
        public static void main(String[] args) {
            // ...
        }
    }
    

    나는 당신이 @PropertySource ( "application.yml") 주석을 application.yml (application.properties와 application.xml은 물론) Spring Boot가 사용하는 기본 설정 파일로 필요하다고 생각하지 않는다.

    CassandraClientNew 클래스에는 @Value 주석 접두어 keypaceApp 속성이 필요하지 않습니다. 그리고 keyspaceApp에는 setter 메소드가 있어야합니다.

    @Component
    @ConfigurationProperties(prefix="cassandra")
    public class CassandraClientNew {
       private String keyspaceApp;
    
       public String setKeyspaceApp(String keyspaceApp) {
           this.keyspaceApp = keyspaceApp;
       }
    }
    

    BTW, List 또는 Sets를 사용 중이고 콜렉션을 초기화하는 경우 (예 : List values ​​= new ArrayList <> ();), getter 만 필요합니다. 콜렉션이 초기화되지 않은 경우 setter 메소드도 제공해야합니다 (그렇지 않으면 예외가 발생합니다).

    도움이되기를 바랍니다.

  2. ==============================

    2."xyz"의 출처를 모르겠습니다 (어쩌면 전체 응용 프로그램을 보여주지 않을 수도 있습니다.). @ConfigurationProperties의 @Value와 보통 바인딩하지는 않습니다 (접두어가 무엇인지 알 수있는 방법이 없습니다). 실제로 어디에서나 @EnableCongigurationProperties를 사용 했습니까? SpringApplication을 사용하여 애플리케이션 컨텍스트를 생성하고 있습니까?

    "xyz"의 출처를 모르겠습니다 (어쩌면 전체 응용 프로그램을 보여주지 않을 수도 있습니다.). @ConfigurationProperties의 @Value와 보통 바인딩하지는 않습니다 (접두어가 무엇인지 알 수있는 방법이 없습니다). 실제로 어디에서나 @EnableCongigurationProperties를 사용 했습니까? SpringApplication을 사용하여 애플리케이션 컨텍스트를 생성하고 있습니까?

  3. ==============================

    3.http://www.baeldung.com/configuration-properties-in-spring-boot

    http://www.baeldung.com/configuration-properties-in-spring-boot

    이 기능은 SB 1.5.4-RELEASE에서만 작동합니다. 이것으로 단순합니다. 자세한 정보는 위의 게시물을 참조하십시오.

    @Configuration @ConfigurationProperties (접두어 = "메일") 공용 클래스 ConfigProperties

  4. from https://stackoverflow.com/questions/27416327/configurationproperties-prefix-not-working by cc-by-sa and MIT license