2012-05-04 18 views
4

Tomcatにデプロイされ、Postgresに接続するJava WebサービスでDAOを単純化するためにSpringのJdbcTemplateを使用しようとしています。SpringデータソースBeanの定義に失敗しました

私はSpring's documentionを以下のよ、と次のように私は、アプリケーションのコンテキスト・ファイル内のデータソースを設定しようとしている:

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

I適切な場所に次のdb.propertiesファイルを持っている:

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

デプロイしようとすると、次のスタックトレースが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) 

問題ではありませんもの:

  1. db.propertiesファイルが正しい場所にあります。
  2. db.propertiesの資格情報は正確であり、手動でデータベースに接続するために読み取ることができます。
  3. context.xmlファイルがContextLoaderListenerによって見つかっており、他の依存関係を挿入できます。

これを引き起こす可能性のあることについては、私は非常に感謝しています。私はSpring 3.1.1とTomcat 7.0.26を使用しています。あなたはおそらく、それぞれが作成したプロジェクト内の複数の<context:property-placeholder ... >を持って

location="classpath:db.properties" 

答えて

1

use org.springframework.jdbc.datasource.DriverManagerDataSource 代わりorg.apache.commons.dbcp.BasicDataSource

+1

私は今これを試しましたが、違いはありません。 –

4

ドロップあなたの場所から先頭のスラッシュ(すなわちlocation="WEB-INF/db.properties"を)か、いっそのクラスパスにそれを変更します基礎となるオブジェクトの新しいインスタンスであり、痛みの扉です。

次の宣言を使用することをお勧めします。ロードプロパティファイル:

<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> 
+0

'classpath:db.properties'が私のために働いていました。あなたはその違いを説明できますか?以前はファイルを見つけていたように見えました(ログファイルから)。 –

+1

db.propertiesのコピーを作成して間違ったものを編集していたため、これが助けになったことが判明しました。 –

0

使用は無視し、解決不能 = "true" を、あなたのアプリケーションのコンテキストで。デフォルト値は 'fales'で、これを 'true'に設定する必要があります。そのため、まだ訪問していない他のコンテキストにキーを渡します。

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

maven依存関係が正しく設定されていることを確認してください。プロジェクトにSping-coreとSpringコンテキストの依存関係が存在する必要があります。

 <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version></version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version></version> 
     </dependency> 
+0

それは問題だとは思わないが、決して知りません。この質問は3歳です。 –

関連する問題