java-从使用中的应用读取spring属性

我正在开发一个Java库/程序包,它打算由Spring Boot应用程序以jar形式使用.

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

但是,我希望这些属性可以通过使用应用程序进行配置.什么是正确的结构呢?

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

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
}

我如何才能使使用中的应用程序可以覆盖这些属性

最佳答案
我通常会在以下情况下执行以下操作:

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

转载注明原文:java-从使用中的应用读取spring属性 - 代码日志