ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-11-09 05:04:07  阅读:144  来源: 互联网

标签:spring-boot spring java


我正在开发一个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;
    }
}

标签:spring-boot,spring,java
来源: https://codeday.me/bug/20191109/2011870.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有