使用application.properties初始化对象

时间:2016-08-18 12:45:16

标签: java properties spring-boot

我在spring boot应用程序中使用@Autowired来初始化一些属性。 我知道如何初始化原始数据类型,但我不知道如何初始化对象。

那是我的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中的对象或列表?

  

更新

对象,我没有创建自己,我想初始化:

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;
}

4 个答案:

答案 0 :(得分:2)

对于列表,您有两种方法:

bitmovin.bitmovin.testFiles=foo,bar,biz

将在testFiles中设置3个项目。您还可以通过索引控制事物。上面的代码可以改写为

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

对于该对象,如果您不在代码中自己创建它,则需要确保它具有公共默认构造函数。然后使用.导航,像任何其他对象一样导航对象。假设您的S3InputConfig具有name属性(getNamesetName):

bitmovin.bitmovin.s3InputConfig.name=the name

您在Boot的文档中已经看到过多使用小写连字符。我们支持原始格式以及连字符小写和其他格式(请参阅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

答案 1 :(得分:0)

通常在使用库中的类时,你无法控制你可以通过这样的方式创建一个bean:

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

    // Do whatever else you want to setup the bean

    return s3OutputConfig;
}

这允许灵活地包含初始化bean所需的其他bean /配置(它们是自动装配的)。

答案 2 :(得分:0)

另一个选择是在构建@Bean时使用@CondtionalOnProperty。这样,您可以限制将哪些bean添加到上下文中。

答案 3 :(得分:-1)

非常简单地为属性bean创建和初始化嵌入对象。

E.g。如果你有这样的课程:

@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