Le chargement dynamique de fichier de propriétés à l'aide de Printemps

J'ai écrit un PropertyUtils de classe (de l'internet), qui va charger les Propriétés

<bean id="propertiesUtil" class="com.myApp.PropertiesUtil" >
    <property name="locations">
        <list>
            <value>classpath:myApp/myApp.properties</value>         
        </list>
    </property>
</bean>

et un PropertiesUtil classe est comme ci-dessous

public class PropertiesUtil extends PropertyPlaceholderConfigurer {

    private static Map<String, String> properties = new HashMap<String, String>();

    @Override
    protected void loadProperties(final Properties props) throws IOException {
        super.loadProperties(props);
        for (final Object key : props.keySet()) {
            properties.put((String) key, props.getProperty((String) key));
        }
    }

    public String getProperty(final String name) {
        return properties.get(name);
    }

}

Plus tard, je peux obtenir la propriété en appelant PropertiesUtil.méthode getProperty ().

Mais maintenant je veux le modifier légèrement pour que, Si le myApp.les propriétés sont modifiées par jour/modifiés par l'utilisateur, elle doit être chargée à nouveau

Probablement j'ai besoin FileWatcher classe

public abstract class FileWatcher extends TimerTask {
    private long timeStamp;
    private File file;

    public FileWatcher(File file) {
        this.file = file;
        this.timeStamp = file.lastModified();
    }

    @Override
    public final void run() {
        long timeStampNew = this.file.lastModified();

        if (this.timeStamp != timeStampNew) {
            this.timeStamp = timeStampNew;
            onChange(this.file);
        }
    }

    protected abstract void onChange(File newFile);
}

mais mes doutes sont

  1. Comment puis-je créer un Fichier objet à l'aide de classpath:myApp/myApp.propriétés
    (parce que le chemin absolu n'est pas connu)
  2. Comment puis-je appeler/appeler le printemps à
    charge/passer la nouvelle myApp.propriétés à PropetisUtil classe [en
    onChange méthode].
Dans votre méthode loadProperties(), est-il une raison particulière pour laquelle vous êtes en boucle pour chaque propriété? Ne pouvez-vous pas appel à un constructeur de la classe de Propriétés qui prend Propriétés que les param?

OriginalL'auteur Reddy | 2013-01-02