복붙노트

[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. ==============================

    1.어쩌면 봄이 파일을 모른다는 것일까?

    어쩌면 봄이 파일을 모른다는 것일까?

    이것은 @Value ( "$ {swagger.scanner.can.run}")가 사용되는 주석이 달린 클래스에서 수정 될 수 있습니다.

    @PropertySource(value="classpath:config.properties")
    

    문안 인사,

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

    2."Condition"을 구현하는 클래스의 객체는 Spring의 생성자를 통해 생성되므로 @Value 주석을 사용하여 값을 삽입 할 수 없습니다. 코드에서 다음과 같이 할 수 있습니다.

    "Condition"을 구현하는 클래스의 객체는 Spring의 생성자를 통해 생성되므로 @Value 주석을 사용하여 값을 삽입 할 수 없습니다. 코드에서 다음과 같이 할 수 있습니다.

    @Override        
    public boolean matches(
    ConditionContext arg0, 
                AnnotatedTypeMetadata arg1) {       
            String prop = conditionContext.getEnvironment()
                     .getProperty("arg0");   
    //further code   
         }    
    
  3. ==============================

    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. ==============================

    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;
    }
    
  5. from https://stackoverflow.com/questions/32790111/spring-condition-not-able-to-read-value-from-property-file by cc-by-sa and MIT license