2017-01-08 1 views
0

웹 스프링 부트 1.4.3을 사용하고 많은 속성을 설정하기 위해 사용자 정의 @AutoConfigure을 생성하고 있습니다. 하나의 기본 제공 Spring 속성에 따라 설정 한 많은 속성이 나타납니다. server.port. 질문 : 내 자동 구성자가이 속성을 사용하는 가장 좋은 방법은 무엇입니까? 아니면 9999를 기본값으로 사용합니까? 나는 논리를 할 @PostConstruct를 사용하고 있지만 생각했습니다봄 부팅 - 다른 속성을 기반으로 속성을 자동 구성 하시겠습니까?

@Configuration(prefix="myapp") 
@EnableConfigurationProperties(MyAppProperties.class) 
public class MyAppProperties { 
    @Autowired 
    ServerProperties serverProperties; 

    Integer port = serverProperties.getPort() otherwise 9999? 

} 

:

여기
myapp.port = ${server.port:9999} 

이 얼마나 내가 자동 구성으로 입수 한 것 : 여기

내가 속성 파일과 그것을 할 방법 Spring-Boot의 자동 구성 소스 코드 예제를 보면 코드 냄새와 같은 느낌이 들기 때문에 그렇게하지는 않습니다.

+0

아쉽게도 Java 컴파일러의 주석 통과와 같은 반복 자동 구성을 얻지 못합니다. '@ AutoConfigureAfter'를 사용해 보셨습니까? – chrylis

+1

'정수 포트 = serverProperties.getPort()! = null? serverProperties.getPort() : 9999' –

답변

0

나는 Spring 3.x 이후로 개인적으로 @Value 주석을 선호한다 (나는 믿는다). 당신이 application.propertiesserver.port을 설정하면

public class MyAppProperties { 
    @Value("${server.port:9999}") 
    private int port; 
} 

는, 거기에서 설정 한 값을 사용합니다. 그렇지 않으면 기본값은 9999입니다.

+0

아, 스프링 부트 1.4.3이 아니야 4.3 (OCD를 가진 사람처럼 들린다면 사과) – anand1st

+0

4.3 스프링 노트 버전 주석 - 1.4.3으로 업데이트했습니다. – Strumbles

+0

간단히 9999보다 setter에서 더 복잡한 논리를 수행 할 때 필요한 @ConfigurationProperties와 @Autoconfigure를 사용했지만 결국 원래의 질문에 답하는 것이 가장 좋습니다. – Strumbles

0

마지막으로 알아 냈습니다. 열쇠는 @EnableConfigurationProperties(MyProps.class) 대신 @Bean을 사용하여 종속 속성을 노출하는 것이 었습니다. Spring에서 속성을 삽입하는 순서 때문에 @Bean을 사용하면 server.port 종속 속성을 기본값으로 사용하고 application.properties 파일을 덮어 쓰게 할 수 있습니다. 전체 예 :

@ConfigurationProperties(prefix="myapp") 
public class MyProps { 
    Integer port = 9999; 
} 

@AutoConfigureAfter(ServerPropertiesAutoConfiguration.class) 
public class MyPropsAutoConfigurer { 
    @Autowired 
    private ServerProperties serverProperties; 

    @Bean 
    public MyProps myProps() { 
     MyProps myProps = new MyProps(); 
     if (serverProperties.getPort() != null) { 
      myProps.setPort(serverProperties.getPort()); 
     } 
     return myProps; 
    } 
} 

이 3 가지 수 :

  1. 기본 9999 server.port가 null가 아닌 경우
  2. 로를 사용자가 application.properties 파일 사용에 myapp.port을 지정하는 경우
  3. 것을 사용하는 (스프링은 @Bean을로드 한 후 스프링을 주입 함)
관련 문제