J'ai une série de propriétés d'application qui ont tous des types différents. p>
Les types pourraient inclure, booléens, dates, horodatages ou chaînes. p>
Je dois être capable de fournir la possibilité d'utiliser des utilisateurs administratifs de modifier ces propriétés et de le rappeler / les persister à un fichier. P>
Je cherche une meilleure pratique de la pratique de stocker ces propriétés de l'application et de pouvoir les persister sur le changement et de les charger au démarrage. P>
8 Réponses :
Vous pouvez les stocker dans votre base de données, mais en raison de la différence de types de données de vos propriétés, vous devrez les stocker dans leur représentation à chaîne. Vous pouvez utiliser une autre colonne pour spécifier peut-être le type de données. p>
Cette forme de paramétrisation d'application est quelque chose que vous avez utilisé avec succès à mon travail. C'est l'idée générale, j'espère que vous pourriez arriver à votre solution avec cela. P>
En supposant que vous utilisiez Java, jetez un coup d'œil à Apache Commons DatabasEconfiguration ( http://commons.apache.org/configuration/apidocs/org/apache/commons/configuration/databaseConfiguration.html ).
Fondamentalement, ce qu'il fait est assez simple. Il analyse une table contenant des paires de clés et expose ce tableau en tant que java.Util.properties. Vous pouvez l'utiliser pour charger vos propriétés de l'application dans la base de données.
Une fois chargé, vous pouvez mettre en cache ces propriétés dans votre application. N'oubliez pas d'invalider ce cache chaque fois que vous apportez des modifications aux propriétés de l'application. P>
Peut-être qu'une machine virtuelle doit également être installée avec cette base de données, il sera donc vraiment indépendant de la plate-forme. Ce serait la solution vraiment java. ;-(
Vous pouvez utiliser SQLite Firefox l'utilise pour persister les propriétés p>
Il y a un joli proverbe anglais: "Utilisation d'un Sledgehammer pour casser une noix" .
Message du futur: le lien est déjà mort. SUB> P>
Java a une installation construite spécifiquement à cette fin - propriétés. strong>
Voici un très bon article à ce sujet P>
https://docs.oracle.com/javase/tatuuteur /essential/environment/properties.html p>
Ce que j'ai fini par faire consistait à copier du code des java.util.prefs.preferences et à l'utiliser dans mes propres propriétés classes de la classe, car la classe de préférences est vraiment pour les préférences du système et des utilisateurs et ne me permet pas vraiment de l'enregistrer facilement dans un endroit Je spécifie.
Si vous avez besoin de plus de flexibilité dans la structuration des propriétés, vous pouvez envisager de concevoir votre propre fichier de configuration XML strong>, bien qu'il soit un peu plus de travail à lire et à écrire. Vous pouvez cependant utiliser une API Marshalling / Unmarshalling comme Jaxb, Xstream, etc. pour faciliter cette tâche. P>
Ces fichiers peuvent facilement être modifiés manuellement. P> java.util.properties code> est le moyen le plus simple. Un objet code> code> peut être créé à partir d'un fichier de propriétés (un fichier contenant des propriétés dans le format nom = valeur code>) ou même un simple fichier XML. Vous pouvez modifier l'objet en mémoire, puis l'écrire dans une propriété ou un fichier XML. P>
J'utilise ce code et cela fonctionne assez bien pour moi (seul code partiel, codage de la mémoire ..): (Ceci est utilisé conjointement avec la classe de propriétés de Java, mais il est plus facile d'ajouter des propriétés et de conserver votre modèle de fichier de propriété en synchronisation.)
CountDownLatch latch = Conf.value(Prop.SOME_INTEGER); //Compilation error! Since it expects int and won't unbox. CountDownLatch latch = Conf.value(Prop.SOME_ITEGER,Integer.class); //Verbose, but works everytime. Of course you could get a //ClassCastException, but you should notice that early //in the development...
Vous mémorisez ceux dans votre mémoire?
Ah, c'est un extrait que j'utilise tout le temps pour que je me souvienne grossièrement. Il est trop petit pour l'emballer dans un pot cependant :)
Oui, c'est exactement comment cela devrait fonctionner. Seule une bibliothèque simple et 50 lignes serait nécessaire, qu'est-ce que cela fait tout cela automatiquement ... je pense que c'est un peu triste si cela n'existe pas dans le monde Java il y a vingt ans.
Depuis que vous avez besoin de stocker et de lire diverses propriétés de différents types tels que booléens, entiers, etc. Je pense que le Voici le API Documentation P> java.util.prefs code> API est un bon choix pour vous. Il vous permet de stocker et de lire divers types de données. P>
+1 Préférences L'API est bizarre et ne donne pas beaucoup de contrôle de la manière dont les données sont stockées, mais c'est une API beaucoup plus récente que les propriétés et constituent un meilleur choix.
Existe-t-il des bibliothèques solides pour des implémentations basées sur des fichiers pour java.util.prefs.preferences?
La mise en œuvre JDK de Sun Sun les stocke dans le système de fichiers, pour les préférences de l'utilisateur (Préférences.geUserroot ()), dans le répertoire Home de l'utilisateur, dans les fichiers XML. La documentation de l'API de classe Préférences définit une DTD de ces fichiers
Merci pour la réponse. J'aimerais prendre le contrôle sur l'endroit où le fichier est stocké. Le répertoire de base de l'utilisateur n'est pas approprié pour mon application. Je voudrais le stocker avec les autres données de fichiers de ma candidature. La mise en œuvre de la JDK du Soleil l'autorise-t-elle cela? Ou toute autre mise en œuvre?
Oui vous pouvez à cela. Vous devez avoir une classe mettant en œuvre Java.UtilL.Prafts.PrreferencesFactory qui renvoie une classe qui est une sous-classe de préférences abstraites. Toutes les méthodes abstraites prennent sont assez simples et ne doivent pas être difficiles à mettre en œuvre. Infact Vos préférences La mise en œuvre peut être soutenue par une Java.Util.Properties (fichier)
Même si vous devez utiliser des préférences API ou Properties, voici un piratage qui pourrait également fonctionner: p>
Créer un hashmap
"... les persiste à un magasin hors ligne." I> - Je ne pense vraiment pas que tu veux dire ça. Un magasin hors ligne serait quelque chose comme un archiveur de bande.
@Stephen C, commentaire équitable, je l'ai changé en "un fichier"