0

任何人都可以指导我如何执行apache commons configuration2属性的重新加载。我无法在任何地方找到这个实现。 apache文档太抽象了。这是我迄今为止的,但它不起作用。如何重新加载apache commons configurations2属性

CombinedConfiguration cc = new CombinedConfiguration(); 

    Parameters params = new Parameters(); 
    File configFile = new File("config.properties"); 
    File emsFile = new File("anotherconfig.properties"); 

    ReloadingFileBasedConfigurationBuilder<FileBasedConfiguration> configBuilder = 
     new ReloadingFileBasedConfigurationBuilder<FileBasedConfiguration>(PropertiesConfiguration.class) 
     .configure(params.fileBased() 
      .setFile(configFile)); 
    PeriodicReloadingTrigger reloadTrg = new PeriodicReloadingTrigger(configBuilder.getReloadingController(), null, 5, TimeUnit.SECONDS); 
    reloadTrg.start(); 

    cc.addConfiguration(configBuilder.getConfiguration()); 

    FileBasedConfigurationBuilder<FileBasedConfiguration> emsBuilder = 
      new FileBasedConfigurationBuilder<FileBasedConfiguration>(PropertiesConfiguration.class) 
      .configure(params.properties() 
       .setFile(emsFile)); 
    cc.addConfiguration(emsBuilder.getConfiguration()); 

    DataSource ds = EmsDataSource.getInstance().getDatasource(this); 

    BasicConfigurationBuilder<DatabaseConfiguration> dbBuilder = 
     new BasicConfigurationBuilder<DatabaseConfiguration>(DatabaseConfiguration.class); 
    dbBuilder.configure(
     params.database() 
      .setDataSource(ds) 
      .setTable("EMS_CONFIG") 
      .setKeyColumn("KEY") 
      .setValueColumn("VALUE") 
    ); 
    cc.addConfiguration(dbBuilder.getConfiguration()); 

回答

0

从构建器获取的配置不会自动更新。每次阅读时都需要从构建器获取配置。

Automatic Reloading of Configuration Sources

一个重要点使用此方法时重新加载要记住的是,如果构建器被用作中央组件来访问配置数据重新加载仅为功能性。从构建器获取的配置实例不会自动更改!因此,如果应用程序在启动时从构建器获取配置对象,然后在其整个生命周期中使用它,外部配置文件上的更改将永远不可见。正确的方法是集中引用构建器,并在每次需要配置数据时从那里获取配置。

0

使用下面的代码:

@Component 
public class ApplicationProperties { 
    private PropertiesConfiguration configuration; 

    @PostConstruct 
    private void init() { 
     try { 
      String filePath = PropertiesConstants.PROPERTIES_FILE_PATH; 
      System.out.println("Loading the properties file: " + filePath); 
      configuration = new PropertiesConfiguration(filePath); 

      //Create new FileChangedReloadingStrategy to reload the properties file based on the given time interval 
      FileChangedReloadingStrategy fileChangedReloadingStrategy = new FileChangedReloadingStrategy(); 
      fileChangedReloadingStrategy.setRefreshDelay(PropertiesConstants.REFRESH_DELAY); 
      configuration.setReloadingStrategy(fileChangedReloadingStrategy); 
     } catch (ConfigurationException e) { 
      e.printStackTrace(); 
     } 
    } 

    public String getProperty(String key) { 
     return (String) configuration.getProperty(key); 
    } 

    public void setProperty(String key, Object value) { 
     configuration.setProperty(key, value); 
    } 

    public void save() { 
     try { 
      configuration.save(); 
     } catch (ConfigurationException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
相关问题