3 votes

Propriétés au niveau de l'application

Je possède actuellement un fichier de propriétés que je charge dans chaque classe où j'ai besoin d'accéder aux propriétés

static PropertiesConfiguration config = null;
config = new PropertiesConfiguration("Interface.properties");

Cela fonctionne bien. Mais je sais que ce n'est pas la manière la plus efficace de charger le fichier de propriétés plusieurs fois.

Est-ce que quelqu'un pourrait m'aider à créer le fichier de propriétés au niveau de l'application et à créer un fichier java (disons config.java) + à appeler la méthode qui renvoie la propriété.

5voto

CoolBeans Points 11615

Une façon de résoudre ce problème est d'utiliser l'injection de dépendance. Vous pouvez avoir un bean singleton qui contient l'instance de la propriété, puis injecter ce bean en tant que dépendance à chacune de vos classes qui ont besoin d'accéder à ces propriétés.

Une façon d'implémenter l'injection de dépendance est d'utiliser le framework Spring. Par exemple, vous pouvez charger le fichier de propriétés en utilisant PropertyPlaceHolderConfigurer de Spring. Ensuite, ce bean devient votre référence pour le reste de l'application. Un tutoriel à ce sujet peut être trouvé ici.

Une autre option pour vous est de charger le fichier de propriétés dans le constructeur de la classe d'entrée principale ou la méthode principale de votre application, puis de transmettre l'objet aux classes qui en ont besoin. Cependant, cela rendrait votre application plus fortement couplée et la maintenance serait plus difficile à l'avenir.

Une autre option consiste à créer une classe singleton qui charge les propriétés et a une méthode qui renvoie les valeurs au besoin.

3voto

javabie Points 425

J'ai utilisé cette approche pour définir les propriétés au niveau de l'application.

Définissez un fichier de propriétés (disons configure.properties).

Créez une classe java Config:

public class Config {
    private static Config instance;
    private PropertiesConfiguration configure;

    private Config() throws ConfigurationException {
        configure = new PropertiesConfiguration("configure.properties");
    }

    public static Config getInstance() {
        if (null == instance) {
            try {
                instance = new Config();
            } catch (ConfigurationException ex) {
                throw new RuntimeException(ex);
            }
        }
        return instance;
    }

    public PropertiesConfiguration getConfigure() {
        return configure;
    }

    public void setConfig(PropertiesConfiguration configure) {
        this.configure = configure;
    }
}

Cette classe java charge le fichier de propriétés au démarrage et appelle la méthode getInstance pour obtenir la valeur de la propriété. Pour obtenir la valeur de la propriété n'importe où ailleurs dans l'application, import Config et

Config.getInstance().getConfig().getString("property.given.in.properties");

Désolé si les noms des variables n'ont pas beaucoup de sens.

Merci à tous pour vos contributions.

1voto

ttarchala Points 831

Je viens de charger mon fichier de propriétés dans les propriétés du système :

public void loadStreamToSysProperties(InputStream in) throws IOException
{
    Properties p = System.getProperties();
    p.load(in);                
}

Ensuite, je peux les récupérer avec System.getProperty où que je sois dans le code. Dans cet exemple, InputStream est un flux que j'ai créé à partir du nom/chemin du fichier.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X