Убедитесь, что 'idm.url' установлен в файле свойств и файл свойств загружен

я есть мой конфиг:

<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

Я знаю, что это может быть отсутствующий файл свойств, но у меня он есть в моем classpath как раз правильно. Чего не хватает?

Мой 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>

Ответы на вопрос(6)

classpath:idm.properties

Это довольно необычно, это означает, чтоidm.properties должен быть расположен либо на верхнем уровнеWEB-INF/classes или на верхнем уровне одной из банок внутриWEB-INF/lib, Обычно рекомендуется либо использовать выделенную папку для свойств, либо держать их близко к контекстным файлам, которые их используют.

Поэтому я предлагаю следующее: находится ли ваш файл свойств рядом с вашим контекстным файлом? Если так, это не на пути к классам (см. Этот вопрос:WEB-INF в CLASSPATH?).

classpath: префикс карты кClassPathResource, но вам, вероятно, нужноServletContextResourceи вы получите это отWebApplicationContext используя синтаксис без префикса:

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

Ссылка:

ResourceLoader
(описывает, как отличаетсяApplicationContext типы обрабатывают ресурсы без префикса)PropertyPlaceholderConfigurer механизм
(описывает<context:property-placeholder> механизм)
 blahdiblah07 мая 2011 г., 02:20
В примере Spring petclinic они помещают свойства в src / main / resources и затем ссылаются на них через classpath: app.properties.

что это связано с тем, что файл реквизита не найден к весне. Сделайте быстрый тест, передав параметры как параметры jvm. т.е.-Didm.url = ....

 mjgirl24 янв. 2011 г., 12:36
Значит, я пишу это в файл свойств
 Aravind R. Yarram24 янв. 2011 г., 15:28
@mjgirl позвольте нам сказать, что у вас есть класс "A" с основным методом. вы можете передать idm.url в "A", например, так: "java -Didm.url =abc.com А»
 mjgirl24 янв. 2011 г., 08:55
Я не знаком с JVM Params
 Sean Patrick Floyd24 янв. 2011 г., 11:39
@mjgirl это не так сложно:-Dkey=value означает установку системного свойства «ключ» на «значение»

idm.url' установлен в файле свойств и файл свойств загружен

org.springframework.beans.factory.config.PropertyPlaceholderConfigurer в вашем приложении. Попробуйте установить точку останова наsetLocations метод суперкласса и посмотреть, если он вызывается более одного раза при запуске приложения. Если есть более одногоorg.springframework.beans.factory.config.PropertyPlaceholderConfigurerможет потребоваться посмотреть на настройкуignoreUnresolvablePlaceholders свойство, так что ваше приложение будет запускаться чисто.

 forhas23 сент. 2012 г., 20:00
Я импортировал один контекст приложения из другого, и у каждого из них был свой заполнитель свойств. Мне потребовались часы, чтобы понять это (у меня было то же самое исключение), и установив ignoreUnresolvablePlaceholders в true в верхнем контексте приложения, добились цели. Спасибо за написание этого ответа!
 Mustafa Kemal05 апр. 2017 г., 12:38
У меня была та же проблема, но решение ignoreUnresolvablePlaceholder не решает мое. Да, у меня был еще один конфигуратор-заполнитель, но он был в конфигурации моего сервера, и это все еще мешало чтению файла конфигурации. Я удалил этот конфигуратор-заполнитель из конфигурации сервера и все работает нормально. Спасибо за подсказку.
 dev14 окт. 2013 г., 18:53
Та же проблема здесь, только в моем случае у меня был один PPC в XML и, очевидно, создавал другой, используя аннотацию @PropertySource в другом месте. я избавился от аннотации и передал оба файла props бину ppc в xml и альте. Спасибо за чаевые.
 Cherry29 февр. 2016 г., 04:28
Такое простое, но мощное решение для решения всех проблем с конфигами заполнителей!

что ваш файл свойств существует в каталоге classpath, но не в подпапке вашего каталога classpath. если он существует в подпапке, напишите как classpath: subfolder / idm.properties

что файл свойств не найден, поскольку в этом случае выдается другое исключение.

Убедитесь, что у вас действительно есть значение с ключомidm.url в вашейidm.properties.

 delucasvb11 авг. 2016 г., 15:48
Я скопировал параметры виртуальной машины из моего сценария запуска, так что все они были добавлены с "-D". Мне не пришло в голову проверить что-то такое очевидное ... Спасибо!

Ваш ответ на вопрос