2011-01-24 24 views
41

を解決できませんでした:は、私は私の設定を持っている春のプロパティプレースホルダ

<context:property-placeholder location="classpath:idm.properties" /> 

<bean id="idmPropertyHolder" class="fi.utu.resurssitilaus.idm.IdmPropertyHolder"> 
    <property name="url" value="${idm.url}" /> 
    <property name="user" value="${idm.user}" /> 
    <property name="password" value="${idm.password}" /> 
    <property name="proxyHost" value="${http.proxyHost}" /> 
    <property name="proxyPort" value="${http.proxyPort}" /> 
</bean> 

私は、これはプロパティファイルを失われる可能性が知っているが、私は私のクラスパスにちょうどそれを持って

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener 
    org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'idmPropertyHolder' defined in ServletContext resource [/WEB-INF/idm-config.xml]: Could not resolve placeholder 'idm.url' 
      at org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.processProperties(PropertyPlaceholderConfigurer.java:272) 
      at org.springframework.beans.factory.config.PropertyResourceConfigurer.postProcessBeanFactory(PropertyResourceConfigurer.java:75) 
      at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:640) 
      at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:615) 
      at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:405) 
      at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276) 
      at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197) 
      at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) 
      at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3934) 
      at org.apache.catalina.core.StandardContext.start(StandardContext.java:4429) 
      at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) 
      at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) 
      at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526) 
      at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:630) 
      at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:514) 
      at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1288) 
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
      at java.lang.reflect.Method.invoke(Method.java:597) 
      at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:297) 
      at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:836) 
      at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:761) 
      at org.apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:1473) 
      at org.apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.java:824) 
      at org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:350) 
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
      at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:196) 
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
      at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525) 
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
      at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) 
      at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
      at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) 
      at java.lang.Thread.run(Thread.java:619) 
    24.1.2011 9:19:05 org.apache.catalina.core.ApplicationContext log 
    INFO: Closing Spring root WebApplicationContext 
    24.1.2011 9:19:05 org.apache.catalina.core.ApplicationContext log 
    INFO: Shutting down log4j 

エラーが出ます。何が欠けている?

私のweb.xml:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     /WEB-INF/base-config.xml 
     /WEB-INF/idm-config.xml 
     /WEB-INF/ldap-config.xml 
     /WEB-INF/sec-config.xml 

    </param-value> 
    </context-param> 

    <!-- Reads request input using UTF-8 encoding --> 
    <filter> 
    <filter-name>characterEncodingFilter</filter-name> 
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
    <init-param> 
     <param-name>encoding</param-name> 
     <param-value>UTF-8</param-value> 
    </init-param> 
    <init-param> 
     <param-name>forceEncoding</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    </filter> 


    <filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    </filter> 

    <filter-mapping> 
    <filter-name>characterEncodingFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 


    <filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 

    <listener> 
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
    </listener> 


    <listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <listener> 
    <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class> 
    </listener> 

    <!-- Handles all requests into the application --> 
    <servlet> 
    <servlet-name>dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
     /WEB-INF/app-config.xml 

     </param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet> 
    <servlet-name>tiles</servlet-name> 
    <servlet-class>org.apache.tiles.web.startup.TilesServlet</servlet-class> 
    <init-param> 
     <param-name> 
     org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG 
     </param-name> 
     <param-value> 
     /WEB-INF/tiles-config.xml 
     </param-value> 
    </init-param> 
    <load-on-startup>2</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>dispatcher</servlet-name> 
    <url-pattern>*.html</url-pattern> 
    </servlet-mapping> 

    <session-config> 
    <session-timeout> 
     30 
    </session-timeout> 
    </session-config> 

    <welcome-file-list> 
    <welcome-file>redirect.jsp</welcome-file> 
    </welcome-file-list> 
</web-app> 

答えて

3

私はまだそのバネで配置されているファイルではなく小道具で行うことを考えています。 paramsをjvm paramsとして渡すことで、簡単なテストを行います。すなわち-Didm.url = ....

+0

は私が – mjgirl

+0

のparams JVMに精通していないよ: '-Dkey = [値]は、ヨーヨーは、私はプロパティに –

+0

「値」にシステムプロパティ「キー」を設定することを意味します@ mjgirl私はそれにmainメソッドで "A"と呼ばれるクラスを持っていると言うことができます。この "java -Didm.url = http://www.abc.com A"のようにidm.urlを "A"に渡すことができます – mjgirl

13

あなたのプロパティファイルの場所がclasspath:idm.properties

これはかなり珍しいです、それはidm.propertiesWEB-INF/classesのトップレベルで、またはトップのいずれかに配置しなければならないことを意味します中の1つのジャーのレベルWEB-INF/lib。通常は、プロパティ用の専用フォルダを使用するか、それらを使用するコンテキストファイルの近くに保存することをお勧めします。

私の提案はこれです:あなたのプロパティファイルはおそらくコンテキストファイルの隣にありますか?もしそうなら、それはクラスパス上にありません(この質問を参照してください:Is WEB-INF in the CLASSPATH?)。

ClassPathResourceからclasspath:プレフィックスマップが、あなたはおそらくServletContextResource必要があり、あなたは接頭辞なしの構文を使用してWebApplicationContextからそれを取得します:

<context:property-placeholder location="idm.properties" /> 

参考:

+6

春のpetclinicの例では、src/main/resourcesにプロパティを入れ、クラスパス:app.properties。 – blahdiblah

11

それは間違いなく、その場合には、別の例外がスローされているため、発見されていないpropetiesファイルに問題はありません。

idm.propertiesに実際にキーidm.urlの値があることを確認してください。

+0

起動スクリプトからVMオプションをコピーして貼り付けたので、それらの前に "-D"が付いていました。これは明らかに何かをチェックするために私には起こっていなかった...ありがとう! – delucasvb

95

アプリケーション内に複数のorg.springframework.beans.factory.config.PropertyPlaceholderConfigurerが存在することがあります。スーパークラスのメソッドsetLocationsでブレークポイントを設定して、アプリケーション起動時に複数回呼び出されているかどうかを確認してください。複数のorg.springframework.beans.factory.config.PropertyPlaceholderConfigurerがある場合は、アプリケーションが正常に起動するように、ignoreUnresolvablePlaceholdersプロパティの設定を調べる必要があります。

+7

別のアプリケーションコンテキストから1つのアプリケーションコンテキストをインポートし、それぞれに独自のプロパティプレースホルダを持っていました。私はそれを把握しようと数時間を要しました(私は同じ例外が続いていました)、トップのアプリコンテキストでignoreUnresolvablePlaceholdersをtrueに設定することがそのトリックでした。この回答を書いていただきありがとうございます! – forhas

+0

私の場合にのみ同じ問題がありました。私はxmlにppcが1つあり、別の場所で@PropertySourceアノテーションを使用して別のものを作成していたようです。私は注釈を取り除き、両方のpropsファイルをxmlとviolaのppc beanに渡しました。先端に感謝します。 – dev

+0

プレースホルダ設定のすべての問題を解決するためのシンプルだが強力なソリューション! – Cherry

-6

必ずあなたのプロパティファイルを作成する「idm.urlは」プロパティファイルで設定され、プロパティファイルが

1

をロードされていることを確認し、クラスパスのディレクトリにではなく、あなたのクラスパスディレクトリのサブフォルダ内に存在します。サブフォルダ内に存在する場合は、classpath:subfolder/idmのように記述します。それは難しいことではありません@mjgirl性質

関連する問題