Le printemps de la source de données bean définition de la faute
Je suis en train d'utiliser le Printemps JdbcTemplate pour simplifier mon DAOs dans un service web Java est déployé dans Tomcat et se connecte à Postgres.
Je suis Le printemps de la documention, et je suis en train de configurer une source de données dans le contexte de l'application de fichier, comme suit:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="com.manta" />
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${driverClassName}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</bean>
<context:property-placeholder location="/WEB-INF/db.properties"/>
</beans>
J'ai le texte suivant db.properties
fichier à l'endroit approprié:
driverClassName=org.postgresql.Driver
url=jdbc:postgresql://pgprod.ecnext.com:5432/manta
username=my_user_name
password=my_password
Quand j'essaie de déployer, je trouve la suite de trace de pile dans catalina.out
:
SEVERE: Context initialization failed
org.springframework.beans.factory.BeanDefinitionStoreException:
Invalid bean definition with name 'dataSource' defined in ServletContext resource [/WEB-INF/context.xml]:
Could not resolve placeholder 'driverClassName'
at org.springframework.beans.factory.config.PlaceholderConfigurerSupport.doProcessProperties(PlaceholderConfigurerSupport.java:209)
at org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.processProperties(PropertyPlaceholderConfigurer.java:220)
at org.springframework.beans.factory.config.PropertyResourceConfigurer.postProcessBeanFactory(PropertyResourceConfigurer.java:84)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:681)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:656)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:446)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:385)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:284)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4765)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5260)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:866)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:842)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:958)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1599)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:679)
Choses qui ne sont PAS le problème:
- La
db.properties
fichier est au bon endroit. - Les informations d'identification dans le
db.properties
sont corrects, et peut être lu à la main pour se connecter à la base de données. - La
context.xml
fichier est trouvé par la ContextLoaderListener, et je suis en mesure d'injecter d'autres dépendances.
Je serais très heureux des suggestions quant à ce que pourrait en être la cause. Je suis l'aide de Printemps 3.1.1, et Tomcat 7.0.26.
OriginalL'auteur Eric Wilson | 2012-05-04
Vous devez vous connecter pour publier un commentaire.
Vous avez sans doute plusieurs
<context:property-placeholder ... >
dans votre projet que chaque de créer une nouvelle instance de l'objet sous-jacent, et ouvre la porte à des douleurs...Je préfère utiliser la déclaration suivante pour le chargement des fichiers de propriété:
OriginalL'auteur Farid
Tomber le slash à partir de votre emplacement (c'est à dire
location="WEB-INF/db.properties"
) ou mieux encore de le modifier pour classpath:classpath:db.properties
a fonctionné pour moi. Toute chance vous pourriez nous expliquer la différence? Il me semblait (à partir des fichiers journaux) que c'était de trouver le fichier avant de l'.Il s'avère que cela m'a aidé car j'avais fait une copie de la db.propriétés et a été l'édition du mal.
OriginalL'auteur Chris
use org.springframework.jdbc.datasource.DriverManagerDataSource
au lieu de
org.apache.commons.dbcp.BasicDataSource
OriginalL'auteur creativeby
Utilisation ignorer-insolubles="true" en vous contexte de l'application. La valeur par défaut est fales, vous devez définir le "vrai" donc la clé de toutes les autres dans le contexte qui ne l'ont pas encore visité.
OriginalL'auteur mahesh
Assurez-vous d'avoir la dépendance maven correctement, Sping-core et Printemps-contexte dépendances doit être présent dans votre projet.
OriginalL'auteur Sundar