我正在开发一个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
}
如何使消费应用程序可以覆盖这些属性
答案 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文件。
希望这有帮助。