死机简单配置
編寫(xiě)整個(gè)框架的目的是為了處理應(yīng)用程序的配置。 我更喜歡一種簡(jiǎn)單的方法。
如果通過(guò)配置我們的意思是“ 部署之間可能有所不同的所有內(nèi)容 ”,那么我們應(yīng)該嘗試使配置保持簡(jiǎn)單。 在Java中,最簡(jiǎn)單的選項(xiàng)是不起眼的屬性文件。 屬性文件的缺點(diǎn)是,當(dāng)您希望應(yīng)用程序接收更改時(shí)必須重新啟動(dòng)它。 還是你
這是我在多個(gè)項(xiàng)目中使用的一種簡(jiǎn)單方法:
AppConfiguration類(lèi)如下所示:
public abstract class AppConfiguration {private static Logger log = LoggerFactory.getLogger(AppConfiguration.class);private long nextCheckTime = 0;private long lastLoadTime = 0;private Properties properties = new Properties();private final File configFile;protected AppConfiguration(String filename) {this.configFile = new File(filename);}public String getProperty(String propertyName, String defaultValue) {String result = getProperty(propertyName);if (result == null) {log.trace("Missing property {} in {}", propertyName, properties.keySet());return defaultValue;}return result;}public String getRequiredProperty(String propertyName) {String result = getProperty(propertyName);if (result == null) {throw new RuntimeException("Missing property " + propertyName);}return result;}private String getProperty(String propertyName) {if (System.getProperty(propertyName) != null) {log.trace("Reading {} from system properties", propertyName);return System.getProperty(propertyName);}if (System.getenv(propertyName.replace('.', '_')) != null) {log.trace("Reading {} from environment", propertyName);return System.getenv(propertyName.replace('.', '_'));}ensureConfigurationIsFresh();return properties.getProperty(propertyName);}private synchronized void ensureConfigurationIsFresh() {if (System.currentTimeMillis() < nextCheckTime) return;nextCheckTime = System.currentTimeMillis() + 10000;log.trace("Rechecking {}", configFile);if (!configFile.exists()) {log.error("Missing configuration file {}", configFile);}if (lastLoadTime >= configFile.lastModified()) return;lastLoadTime = configFile.lastModified();log.debug("Reloading {}", configFile);try (FileInputStream inputStream = new FileInputStream(configFile)) {properties.clear();properties.load(inputStream);} catch (IOException e) {throw new RuntimeException("Failed to load " + configFile, e);}} }這樣可以高效地讀取配置文件,并根據(jù)需要更新設(shè)置。 它支持默認(rèn)的環(huán)境變量和系統(tǒng)屬性。 而且它甚至可以很好地記錄正在發(fā)生的事情。
- 有關(guān)完整的源代碼和自動(dòng)更新的不可思議的數(shù)據(jù)源,請(qǐng)參見(jiàn)以下要點(diǎn):https://gist.github.com/jhannes/b8b143e0e5b287d73038
請(qǐng)享用!
翻譯自: https://www.javacodegeeks.com/2014/10/dead-simple-configuration.html
總結(jié)
- 上一篇: 草船借箭人物特点 草船借箭人物特点是什么
- 下一篇: 不放面包糠炸鱿鱼 不放面包糠炸鱿鱼的方法