[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.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."xyz"의 출처를 모르겠습니다 (어쩌면 전체 응용 프로그램을 보여주지 않을 수도 있습니다.). @ConfigurationProperties의 @Value와 보통 바인딩하지는 않습니다 (접두어가 무엇인지 알 수있는 방법이 없습니다). 실제로 어디에서나 @EnableCongigurationProperties를 사용 했습니까? SpringApplication을 사용하여 애플리케이션 컨텍스트를 생성하고 있습니까?
"xyz"의 출처를 모르겠습니다 (어쩌면 전체 응용 프로그램을 보여주지 않을 수도 있습니다.). @ConfigurationProperties의 @Value와 보통 바인딩하지는 않습니다 (접두어가 무엇인지 알 수있는 방법이 없습니다). 실제로 어디에서나 @EnableCongigurationProperties를 사용 했습니까? SpringApplication을 사용하여 애플리케이션 컨텍스트를 생성하고 있습니까?
-
==============================
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
from https://stackoverflow.com/questions/27416327/configurationproperties-prefix-not-working by cc-by-sa and MIT license