Primavera dataSource bean definizione in mancanza di

Sto cercando di utilizzare la Primavera JdbcTemplate per semplificare il mio Tao in a Java web service che viene distribuito in Tomcat e si connette a Postgres.

Sto seguendo Primavera documentazione, e sto cercando di configurare un’Origine dati nel contesto dell’applicazione file, come segue:

<?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>

Ho il seguente db.properties file nel posto adatto:

driverClassName=org.postgresql.Driver 
url=jdbc:postgresql://pgprod.ecnext.com:5432/manta
username=my_user_name
password=my_password

Quando cerco di distribuire, trovo il seguente stack trace in 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)

Cose che NON sono il problema:

  1. Il db.properties file è nella posizione corretta.
  2. Le credenziali in db.properties sono corrette, e possono essere letti manualmente la connessione al database.
  3. Il context.xml file viene trovato dalla ContextLoaderListener, e sono in grado di iniettare altre dipendenze.

Sarei molto grato di qualsiasi suggerimenti su cosa potrebbe causare questo. Io sto usando la Molla 3.1.1, e Tomcat 7.0.26.

OriginaleL’autore Eric Wilson | 2012-05-04

5 risposte

  1. 6

    Probabilmente avete più <context:property-placeholder ... > nel progetto di creare una nuova istanza dell’oggetto sottostante, ed è una porta dolori…

    Io preferisco usare la seguente dichiarazione per il caricamento di file di proprietà di:

    <bean id="propertyConfigurer"     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:db-config.properties</value>
            </list>
        </property>
        <property name="ignoreUnresolvablePlaceholders" value="true" />
    </bean>

    OriginaleL’autore

  2. 4

    Cadere la barra dalla tua posizione (cioè location="WEB-INF/db.properties" ) o meglio ancora cambiare classpath:

    location="classpath:db.properties"
    classpath:db.properties ha funzionato per me. Qualche possibilità che tu possa spiegare la differenza? Sembrava (dal file di log) che è stato trovare il file di prima.
    Si scopre che questo mi ha aiutato, perché avevo fatto una copia del db.proprietà ed è stato la modifica di uno sbagliato.

    OriginaleL’autore

  3. 1

    use org.springframework.jdbc.datasource.DriverManagerDataSource
    invece di org.apache.commons.dbcp.BasicDataSource

    Ho provato ora, nessuna differenza.

    OriginaleL’autore

  4. 0

    Utilizzare ignorare-non risolvibili=”true” in voi contesto di applicazione. Valore di Default è ‘fales’ è necessario impostare il “vero” così passa la chiave di tutti gli altri in un contesto che non hanno ancora visitato.

    <context:property-placeholder ignore-unresolvable="true" location="/WEB-INF/application.properties" />
    <context:property-placeholder ignore-unresolvable="true" location="/WEB-INF/dbcp.properties"/>

    OriginaleL’autore

  5. 0

    Assicurarsi di che avere il plugin di maven dipendenza correttamente, Sping-core e Molla in contesto dipendenze devono essere presenti nel progetto.

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version></version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version></version>
            </dependency>
    Non credo che era il problema, ma non lo sapremo mai. Questa domanda è di tre anni.

    OriginaleL’autore

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *