2016-08-18 2 views
2

스프링 부트 응용 프로그램에서 @Autowired을 사용하여 일부 속성을 초기화합니다. 원시 데이터 형식을 초기화하는 방법을 알고 있지만 개체를 ​​초기화하는 방법을 모르겠습니다.application.properties를 사용하여 객체를 초기화하십시오.

그건 내 Component :

@Component 
@ConfigurationProperties(prefix = "bitmovin.bitmovin") 
public class BitmovinConfig { 

    private S3InputConfig S3InputConfig = new S3InputConfig(); 
    private int threadPoolSize; 
    private ArrayList<String> testFiles; 

    public BitmovinConfig() { 
    } 

    public S3InputConfig getS3InputConfig() { 
     return S3InputConfig; 
    } 

    public void setS3InputConfig(S3InputConfig s3InputConfig) { 
     S3InputConfig = s3InputConfig; 
    } 

    public int getThreadPoolSize() { 
     return threadPoolSize; 
    } 

    public void setThreadPoolSize(int threadPoolSize) { 
     this.threadPoolSize = threadPoolSize; 
    } 

    public ArrayList<String> getTestFiles() { 
     return testFiles; 
    } 

    public void setTestFiles(ArrayList<String> testFiles) { 
     this.testFiles = testFiles; 
    } 
} 

그리고 내 application.properties 파일입니다 :

bitmovin.bitmovin.threadPoolSize = 30 
bitmovin.bitmovin.S3InputConfig = ?? 
bitmovin.bitmovin.testFiles= ?? 

가 어떻게 객체 나 application.properties의 목록을 초기화 할 수 있습니다?

오브젝트, 나 자신을 작성하지 않았다, 내가 초기화 할 UPDATE : 목록은

public class S3OutputConfig { 
    @Expose 
    public String name; 
    @Expose 
    public S3Region region; 
    @Expose 
    public String accessKey; 
    @Expose 
    public String secretKey; 
    @Expose 
    public String bucket; 
    @Expose 
    public String prefix; 
    @Expose 
    public boolean makePublic; 
} 

답변

1

, 당신은 몇 가지 방법이 있습니다

bitmovin.bitmovin.testFiles=foo,bar,biz 

testFiles. 색인을 통해 물건을 제어 할 수도 있습니다. 당신은 코드에서 직접 작성하지 않은 경우 위의 코드는, 객체에 대한

bitmovin.bitmovin.testFiles[0]=foo 
bitmovin.bitmovin.testFiles[1]=bar 
bitmovin.bitmovin.testFiles[2]=biz 

로 쓸 수있다, 당신은 공용 기본 생성자가 있는지 확인해야합니다. 그런 다음 다른 개체와 마찬가지로 개체를 탐색하고 .을 사용하여 탐색합니다. 당신이 S3InputConfig (getNamesetName 포함) name 속성이 있습니다 가정 : 소문자 하이픈의

bitmovin.bitmovin.s3InputConfig.name=the name 

당신은 본 적이 사용 부팅의 문서에 많이. 우리는 하이픈 소문자뿐만 아니라 원래 형식도 지원합니다 (relaxed binding 참조). 다음과 같이 설정에 대한 정식 표현은 다음과 같습니다

bitmovin.bitmovin.test-files[0]=foo 
bitmovin.bitmovin.test-files[1]=bar 
bitmovin.bitmovin.test-files[2]=biz 
bitmovin.bitmovin.s3-input-config.name=the name 
+0

목록에 제안 해 주셔서 감사합니다. 꽤 괜찮습니다.하지만 'bitmovin.bitmovin.s3-input-config.bucket = awesome-video'를 사용하여 객체 속성을 설정하면 여전히 null입니다. – TheDoctor

+0

질문을 객체의 클래스로 업데이트했습니다. – TheDoctor

+0

전체 개체를 초기화 할 수 없으므로 예제에서 수행 한 것처럼 다양한 필드를 초기화해야합니다. 끝에'.name '이 있음을 주목하십시오. 그'@ Expose'가 무엇인지 모르겠지만 바인딩이 작동하려면 getter/setter가 필요합니다. –

0

그것은 꽤 간단하게 생성하고 속성 콩에 포함 된 개체를 초기화 할 수 있습니다.

예. 당신은 클래스가있는 경우 :

@Component 
@ConfigurationProperties(prefix = "bitmovin.bitmovin") 
public class BitmovinConfig { 

    private S3OutputConfig outputConfig = new S3OutputConfig(); 

    public S3OutputConfig getOutputConfig() { 
     return outputConfig; 
    } 
} 

곳 S3OutputConfig 구조 :

public class S3OutputConfig { 

    public String name; 

    public S3Region region; 

    public String accessKey; 

    public String secretKey; 

    public String bucket; 

    public String prefix; 

    public boolean makePublic; 
} 

당신은이 방법으로 outputConfig의 필드를 초기화 할 수 있습니다 : 당신이 라이브러리에서 클래스를 사용하여 작업 할 때 일반적으로

bitmovin.bitmovin.output-config.name=Config Name 
bitmovin.bitmovin.output-config.access-key=XAKJGSDIUGASASD 
bitmovin.bitmovin.output-config.region=us-east-1 
0

다음과 같이하면 빈을 생성 할 수 있습니다 :

@Bean 
S3OutputConfig s3OutputConfig(BitmovinConfig bitmovinConfig) { 
    S3OutputConfig s3OutputConfig = new S3OutputConfig(); 

    // Do whatever else you want to setup the bean 

    return s3OutputConfig; 
} 

이렇게하면 빈을 초기화하는 데 필요한 다른 bean/configuration (autowired)을 융통성있게 포함 할 수 있습니다.

0

또 다른 옵션은 @Bean을 구성 할 때 @CondtionalOnProperty을 사용하는 것입니다. 이렇게하면 컨텍스트에 추가되는 bean을 제한 할 수 있습니다.

관련 문제