Properties - modificiation valeur sans redémarrage
Bonjour à tous,
Dans le code de mon client, j'ai défini une classe MyPropertyLoader afin de pouvoir utiliser (lecture, écriture, modification) un fichier .properties contenant des entrées classiques type CLEF=VALEUR :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| public class MyPropertyLoader {
private static final String CONF_FILE = "config/core.properties";
private static Properties coreProperties = null;
public static String getProperty(String key) {
if (coreProperties == null) {
loadCoreProperties();
}
return coreProperties != null ? coreProperties.getProperty(key) : null;
}
public static void setProperty(String key, String value) {
if (coreProperties == null) {
loadCoreProperties();
}
coreProperties.setProperty(key, value);
}
public static void savePropertiesFile() {
FileOutputStream fos = null;
try {
fos = new FileOutputStream(CONF_FILE);
coreProperties.store(fos, null);
} catch (FileNotFoundException fnfe) {
... ;
} catch (IOException ioe) {
... ;
} finally {
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
... ;
}
}
}
}
private static synchronized void loadCoreProperties() {
if (coreProperties == null) {
InputStream propsIs = null;
try {
File file = new File(CONF_FILE);
if (file.exists()) {
propsIs = new FileInputStream(CONF_FILE);
coreProperties = new Properties();
coreProperties.load(propsIs);
} else {
System.err.println(CONF_FILE.concat(" not found on your disk !!!"));
}
} catch (IOException ioe) {
System.err.print("MyPropertyLoader initialization error : ".concat(ioe.getMessage()));
ioe.printStackTrace();
} finally {
if (propsIs != null) {
try {
propsIs.close();
} catch (IOException ioe) {
System.err.print("MyPropertyLoader stream closing error : ".concat(ioe.getMessage()));
ioe.printStackTrace();
}
}
}
}
}
} |
Admettons que, dans une autre classe appelée Toto, je définisse un attribut de la manière suivante :
Code:
1 2 3 4 5 6 7
| public class Toto {
private static String valeur1 = MyPropertyLoader.getProperty("clef1");
...
} |
Si pour une raison ou une autre, la valeur d'une des propriétés est modifiée (via des appels aux méthodes MyPropertyLoader.setProperty et MyPropertyLoader.savePropertiesFile), alors le fichier est correctement mis à jour mais la valeur de l'attribut dans la classe Toto n'est pas modifiée...
Est-ce qu'il y a moyen de forcer un genre de reload de l'attribut (sans redémarrer le client) ?
Merci,
Mildju