Les constantes et les propriétés en java
Java meilleures pratiques recommande de lire les propriétés comme des constantes. Alors, que pensez-vous est la meilleure approche pour l'atteindre? Mon approche est la suivante: Une classe de Configuration pour lire le fichier de propriétés qu'une seule fois (le pattern singleton) et utiliser cette classe pour lire les propriétés si nécessaire sous forme de constantes. Et une des Constantes de la classe de magasin:
- Les propriétés de nom de les trouver dans le fichier de propriétés (par exemple, app.la base de données.l'url).
- Constantes statiques (ceux que je ne veux pas que l'utilisateur de config par exemple
CONSTANT_URL="myurl.com").
public final class Configurations {
private Properties properties = null;
private static Configurations instance = null;
/** Private constructor */
private Configurations (){
this.properties = new Properties();
try{
properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream(Constants.PATH_CONFFILE));
}catch(Exception ex){
ex.printStackTrace();
}
}
/** Creates the instance is synchronized to avoid multithreads problems */
private synchronized static void createInstance () {
if (instance == null) {
instance = new Configurations ();
}
}
/** Get the properties instance. Uses singleton pattern */
public static Configurations getInstance(){
//Uses singleton pattern to guarantee the creation of only one instance
if(instance == null) {
createInstance();
}
return instance;
}
/** Get a property of the property file */
public String getProperty(String key){
String result = null;
if(key !=null && !key.trim().isEmpty()){
result = this.properties.getProperty(key);
}
return result;
}
/** Override the clone method to ensure the "unique instance" requeriment of this class */
public Object clone() throws CloneNotSupportedException {
throw new CloneNotSupportedException();
}}
La Constante de classe contient les références vers les propriétés et les Constantes.
public class Constants {
//Properties (user configurable)
public static final String DB_URL = "db.url";
public static final String DB_DRIVER = "db.driver";
//Constants (not user configurable)
public static final String PATH_CONFFILE = "config/config.properties";
public static final int MYCONSTANT_ONE = 1;
}
Et les propriétés des fichiers serait:
db.url=www.myurl.com
db.driver=mysql
Pour lire les propriétés et les constantes serait:
//Constants
int i = Constants.MYCONSTANT_ONE;
//Properties
String url = Configurations.getInstance().getProperty(Constants.DB_URL);
Vous pensez que c'est une bonne approche? Quelle est votre façon de lire les propriétés et les constantes en Java?
Merci d'avance.
OriginalL'auteur Esteban S | 2015-04-27
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé une meilleure solution pour homogénéiser le code et a tout comme des constantes. Avec les mêmes Configurations de classe et .fichier de propriétés: Depuis getInstance() la méthode est statique, il est possible d'initialiser les constantes les Constantes de classe.
Une classe pour stocker le nom de la propriété .fichier de propriétés:
Et alors la Constante de classe seront les suivants:
Et enfin les utiliser:
Je pense que c'est un pur et élégant solution de fixer les constantes et les propriétés des problèmes dans les tests.
getProperty
fonctionnalité dansgetInstance
et renommez ce que la nouvellegetProperty
pour éviter d'appelgetInstance().getProperty
mais je laisse cela de cette façon dans le poste, car il est plus facile à comprendre.OriginalL'auteur Esteban S
Je pense que vous devriez jeter un oeil à Configuration D'Apache Commons, vous pourriez trouver utile. Vous pouvez faire beaucoup de choses comme avoir une hiérarchie de vos fichiers de configuration, spécifiez plusieurs sources.
Pour les Constantes, il semble bon 🙂
getProperty
commestatic
et inclus lagetInstance
, afin d'éviter l'appel àgetInstance
dans la méthode qui a besoin de récupérer la propriété.Merci pour la réponse, c'est un puissant bibliothèque pour JNDI ou XML mais à mon avis, pour de simples fichiers de propriétés est préférable de la simplicité de java.util. Aussi il est possible d'ajouter de multiples sources de charger de nouvelles ressources et en ajoutant avec Propriétés.putAll méthode depuis java.util.Propriétés implémente la Carte.
OriginalL'auteur Fabien