Je dois lire un fichier de propriétés contenant des données de configuration dans une application Web JSF.Est-ce que getResourceAsStream() est sûr pour les threads?
En ce moment, le code ressemble à ceci
private Properties getConfig() {
Properties properties = new Properties();
InputStream inputStream = null;
try {
inputStream = this.getClass().getResourceAsStream("/config.properties");
try {
properties.load(inputStream);
} catch (IOException e) {
logger.error("Error while reading config properties", e);
}
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
}
}
return properties;
}
Est-il sûr de le faire de cette façon ou puis-je rencontrer des problèmes de concurrence lorsque plusieurs threads appellent getConfig()?
Je ne suis pas sûr que ce soit thread-safe ou pas, mais normalement dans un tel cas, j'utilise une seule classe de configuration de ton dans laquelle je charge le fichier de propriétés une fois et y accéder où je veux . C'est possible dans le cas où personne ne va changer le fichier de propriétés après le déploiement. –
Oui, j'ai utilisé une approche Singleton pour cela en premier lieu. Mais l'exigence est que le fichier peut être modifié à tout moment. – Sylar
et pourquoi j'ai mentionné dans mon commentaire que * Ceci est possible dans le cas où personne ne va changer le fichier de propriété après le déploiement. * –