从消费应用程序中读取弹簧属性

时间:2018-04-04 00:37:58

标签: java spring spring-boot

我正在开发一个Java库/包,它应该被Spring Boot应用程序用作jar。

主驱动程序类依赖于applicaton.properties中存在的一组props,并在存储库中定义自己的集合。

但是,我希望通过使用应用来配置这些属性。什么是正确的结构方式?

例如,在项目中我有一个文件

public class Properties {
    private int maxConnectingCount; 
    private int maxIdleCount;
    // .. other properties read from application.properties
}

主驱动程序类看起来像这样:

public class LibraryDriver {

    @Autowired 
    private Properties props
    // do stuff with these props
}

如何使消费应用程序可以覆盖这些属性

2 个答案:

答案 0 :(得分:2)

我通常会做以下情况:

public class Properties {
    private int maxConnectingCount; 
    private int maxIdleCount;

    public Properties(String maxConnectingCount, String maxIdleCount) {
        this.maxConnectingCount = maxConnectingCount;
        this.maxIdleCount = maxIdleCount;
    }
}

然后你像这样创建bean:

@Configuration
public class LibraryDriverConfiguration {

    @Value("${maxConnectingCount}")
    private int maxConnectingCount;

    @Value("${maxIdleCount}")
    private int maxIdleCount;

    @Bean
    LibraryDriver libraryDriver() {
        return new LibraryDriver(new Properties(maxConnectingCount, maxIdleCount));
}

我喜欢这种方法,因为它允许你的属性通过定义不同的构造函数来获得合理的默认值。

另一种选择是创建一个Property bean,然后将其自动装配到LibraryDriver;类似的东西:

@Configuration
public class PropertiesConfiguration {

    @Value("${maxConnectingCount}")
    private int maxConnectingCount;

    @Value("${maxIdleCount}")
    private int maxIdleCount;

    @Bean
    Properties properties() {
        return new Properties(maxConnectingCount, maxIdleCount);
    }
}

然后:

@Component
public class LibraryDriver {

    private final Properties properties;

    @Autowired
    public LibraryDriver(Properties properties) {
        this.properties = properties;
    }
}

答案 1 :(得分:1)

简单的方法是使用@Value()

假设您开发了一个使用name属性的@Component,如以下示例所示:

@Component
public class LibraryProperties {
private int active; 
private int idle;
// .. other properties read from application.properties
//
@Value("${name}")
private String name;
}

在应用程序类路径上(例如,在jar中),您可以拥有一个application.properties文件,该文件为name字段提供值。在新环境中运行时,可以在jar之外提供覆盖名称的application.properties文件。

希望这有帮助。