[SPRING] 속성 파일에서 값을 읽을 수없는 Spring 조건
SPRING속성 파일에서 값을 읽을 수없는 Spring 조건
org.springframework.context.annotation.Conditionas Spring Condition을 구현하려고한다.
public class APIScanningDecisionMaker implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
// Not able to read the property "swagger.scanner.can.run". It is always NULL.
String canRunFlagInStr = context.getEnvironment().getProperty("swagger.scanner.can.run");
// Ignore the rest of the code.
}
}
그러나 위의 코드에서 볼 수 있듯이 "swagger.scanner.can.run"속성을 읽을 때는 항상 NULL입니다. 내 속성 파일에서 "swagger.scanner.can.run = false"로 설정했습니다.
또한 @Value ( "$ {swagger.scanner.can.run}")를 사용하려고 시도했지만 NULL도 반환합니다. 이 메소드에 디버그를 넣으면 호출되는 것을 볼 수 있습니다.
완료를 위해 다음과 같이 APIScanningDecisionMaker를 사용하고 있습니다.
@Configuration
@EnableSwagger
@Conditional(APIScanningDecisionMaker.class)
public class CustomSwaggerConfig {
// Ignore the rest of the code
}
"swagger.scanner.can.run"이 NULL로 검색되는 이유가 있습니까?
해결법
-
==============================
1.어쩌면 봄이 파일을 모른다는 것일까?
어쩌면 봄이 파일을 모른다는 것일까?
이것은 @Value ( "$ {swagger.scanner.can.run}")가 사용되는 주석이 달린 클래스에서 수정 될 수 있습니다.
@PropertySource(value="classpath:config.properties")
문안 인사,
-
==============================
2."Condition"을 구현하는 클래스의 객체는 Spring의 생성자를 통해 생성되므로 @Value 주석을 사용하여 값을 삽입 할 수 없습니다. 코드에서 다음과 같이 할 수 있습니다.
"Condition"을 구현하는 클래스의 객체는 Spring의 생성자를 통해 생성되므로 @Value 주석을 사용하여 값을 삽입 할 수 없습니다. 코드에서 다음과 같이 할 수 있습니다.
@Override public boolean matches( ConditionContext arg0, AnnotatedTypeMetadata arg1) { String prop = conditionContext.getEnvironment() .getProperty("arg0"); //further code }
-
==============================
3.@Conditional을 config 클래스에 추가하면 APIScanningDecisionMaker가 ConfigurationCondition을 구현해야합니다. 그리고 config 클래스에 @PropertySource를 추가하는 것을 잊지 마십시오.
@Conditional을 config 클래스에 추가하면 APIScanningDecisionMaker가 ConfigurationCondition을 구현해야합니다. 그리고 config 클래스에 @PropertySource를 추가하는 것을 잊지 마십시오.
import org.springframework.context.annotation.ConfigurationCondition; public class APIScanningDecisionMaker implement ConfigurationCondition { @Override public ConfigurationPhase getConfigurationPhase() { return ConfigurationPhase.REGISTER_BEAN; } }
속성이 ConfigurationPhase.REGISTER_BEAN 단계에로드되었습니다.
메소드에 @Conditional을 사용하면 Condition을 구현할 수 있습니다.
-
==============================
4.이게 잘 작동 해.
이게 잘 작동 해.
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) { try { InputStream i = conditionContext.getResourceLoader().getResource("prop.file").getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(i)); StringBuilder out = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { out.append(line); } System.out.println(out.toString()); } catch (IOException e) { e.printStackTrace(); } return true; }
from https://stackoverflow.com/questions/32790111/spring-condition-not-able-to-read-value-from-property-file by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring-JUnit 테스트가 GenericApplicationContext에서 실행되는 것을 어떻게 생각합니까? (0) | 2019.07.18 |
---|---|
[SPRING] 밤새 연결이 끊어졌습니다 (spring boot + mysql). (0) | 2019.07.18 |
[SPRING] 스프링 MVC - 봄 보안에 의해 파일 업로드가 차단됨 [복제] (0) | 2019.07.18 |
[SPRING] 스프링 부트에서 추가 클래스 패스를 설정하는 방법? (0) | 2019.07.18 |
[SPRING] 정적 함수에서 @Value 주석의 대안 (0) | 2019.07.17 |