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 :
Admettons que, dans une autre classe appelée Toto, je définisse un attribut de la manière suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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(); } } } } } }
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...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public class Toto { private static String valeur1 = MyPropertyLoader.getProperty("clef1"); ... }
Est-ce qu'il y a moyen de forcer un genre de reload de l'attribut (sans redémarrer le client) ?
Merci,
Mildju
Partager