Printemps : le Chargement des Propriétés de la Base de données et des fichiers locaux
Je suis en train de charger les propriétés de la base de données. J'ai eu du succès dans cette.
Mais maintenant le problème est que, pour la source de données bean, je veux utiliser des espaces réservés.
Veuillez voir applicationProperties.xml fichier, alors on peut se faire une idée:
<!-- Data Source Bean -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${driverClassName}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</bean>
<!-- My Own class for managing properites came from Database -->
<bean class="PropFromDB.PropFromDB.PropertiesUtil" >
<property name="propertiesArray">
<list>
<ref bean="propertiesFromDB" />
</list>
</property>
</bean>
<!-- PropertiesFactoryBean bean -->
<bean id="propertiesFromDB"
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="properties" ref="commonsConfigurationFactoryBean" />
</bean>
<!-- CommonsConfigurationFactoryBean bean -->
<bean id="commonsConfigurationFactoryBean"
class="org.springmodules.commons.configuration.CommonsConfigurationFactoryBean">
<constructor-arg ref="databaseConfiguration"></constructor-arg>
</bean>
<!-- DatabaseConfiguration bean -->
<bean name="databaseConfiguration"
class="org.apache.commons.configuration.DatabaseConfiguration">
<constructor-arg index="0" ref="dataSource" />
<constructor-arg index="1" value="properties" />
<constructor-arg index="2" value="key" />
<constructor-arg index="3" value="value" />
</bean>
Le code ci-dessus est pour le chargement des propriétés de DB. maintenant, comme vous pouvez le voir pour la source de données de haricot, il y a quelques espaces utilisés. Je l'ai donc inclus cette ligne en haut:
<context:property-placeholder location="classpath:databaseForConfiguration.properties"/>
databaseForConfiguration.propriétés contient toutes les propriétés requises et est dans le classpath :
driverClassName=org.postgresql.Driver
url=jdbc:postgresql://localhost:5432/mydb
username=user
password=pass
Mais quand je tente de l'exécuter, je reçois de l'exception suivante:
Caused by: org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClassName' threw exception; nested exception is java.lang.IllegalStateException: Could not load JDBC driver class [${driverClassName}]
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:108)
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:62)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1489)
... 60 more
et similaires pour {url}, {nom d'utilisateur},{mot de passe}.
Que c'est simple à comprendre, que pour PropertiesUtil bean pour initialiser, première source de données bean besoin de l'initialiser. Et pour la source de données de haricots, les propriétés locales des espaces réservés doit être là. Qui, dans ce cas, ne pas tomber.
Je veux ces deux choses, charge des espaces réservés à partir de fichiers locaux et également à partir de la base de données.
Quelqu'un s'il vous plaît aider moi à résoudre ce problème.
merci d'avance.
OriginalL'auteur Jaydeep | 2014-06-09
Vous devez vous connecter pour publier un commentaire.
Pour
J'ai créé l'usine pour la source de données. et c'est maintenant ressembler à ceci:
La DataSourceFactory classe ressembler à ceci:
Maintenant, je suis en mesure d'obtenir les propriétés de fichier local, ainsi que de la base de données, trop.
Concernant un autre problème, j'ai mis dans les commentaires, qui était à la charge de l'i18n ressources de base de données,j'ai eu la solution à partir de ce lien: Spring MVC: Base de données MessageSource revenir à des propriétés de fichier.
J'ai moi-même posté la question et maintenant j'ai la solution.
J'espère que ce sera utile pour quelqu'un.
Bonjour @Jaydeep.. c'est une excellente solution que vous avez posté. Tout endroit où l'on peut trouver l'intégralité du code source. Il serait d'une grande aide....
OriginalL'auteur Jaydeep
Tout d'abord, vous missunderstood
<context:property-placeholder>
. Sonlocation
est pourfile
, pasProperties
objet.Droit, votre
databaseForConfiguration.properties
contient unProperties
objet de DB, mais ce n'est pas un.properties
fichier.Donc, essayez ceci:
De l'autre côté, il n'est pas évident de savoir comment vous allez charger des propriétés de DB, si vous essayez d'utiliser
placeholders
pourDataSource
options. Dans ce cas, vous devriez déjà avoir déjà configuré<context:property-placeholder>
...Mise à JOUR
Il y a une raison pour mélanger plusieurs réponses de différents sujets. L'Asn j'ai montré au-dessus de la
MethodInvokingFactoryBean
ne les trucs pour construireProperties
objet.Si votre
<context:property-placeholder>
ne peut pas résoudre des espaces réservés (Could not load JDBC driver class [${driverClassName}]
), alors il ne voit pas votredatabaseForConfiguration.properties
dans le classpath.Assurez-vous d'utiliser les bons
location
valeur, par exemplelocation="classpath:WEB-INF/databaseForConfiguration.properties"
, si votre fichier est-il avec la GUERRE.Merci pour la correction (+1). J'ai mis à jour ma réponse selon que de nouvelles infos.
Merci pour la suggestion. Ce serait peut aider les autres. Je reçois aussi des connaissances. mais mon problème est difficile à expliquer, mais maintenant, j'ai résolu d'une autre manière. Si vous avez une autre solution pour charger les propriétés de base de données, veuillez fournir. Je veux appliquer i18n et pour cela, comme vous le savez les propriétés des fichiers est nécessaire. Ainsi, au lieu de fichier, je veux charger à partir de la base de données. Alors, comment puis-je charger i18n propriétés de la base de données? comment ma table de base de données devrait être la structure ? merci à l'avance.
OriginalL'auteur Artem Bilan