2015-06-15 3 views
1

Я хочу получить значение свойства в файле email.properties для ввода в springConfig.xml. но произошла ошибка.Как получить значение из файла свойств для ввода в springConfig.xml

вот мой код ниже

springConfig.xml

<bean class="org.springframework.mail.javamail.JavaMailSenderImpl" 
    id="mailSender"> 
    <property name="host" value="${email.host}" /> 
    <property name="protocol" value="${email.protocol}" /> 
    <property name="port" value="${email.port}" /> 
    <property name="username" value="${email.username}"/> 
    <property name="password" value="${email.password}" /> 
    <property name="javaMailProperties"> 
     <props> 
      <prop key="mail.smtp.auth">true</prop> 
      <prop key="mail.smtp.starttls.enable">true</prop> 
      <prop key="mail.smtp.ssl.trust">smtp.gmail.com</prop> 
     </props> 
    </property> 
</bean> 

здесь файл свойств

email.host=stmp.gmail.com 
email.port=465 
email.protocol=smtp 
[email protected] 
email.password=xxxxxxxx 

здесь след ошибка

Jun 15, 2015 10:46:17 AM org.apache.catalina.core.StandardContext listenerStart 
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mailSender' defined in class path resource [springConfig.xml]: Initialization of bean failed; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert property value of type 'java.lang.String' to required type 'int' for property 'port'; nested exception is java.lang.NumberFormatException: For input string: "${email.port}" 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:700) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482) 
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4751) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5175) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.springframework.beans.TypeMismatchException: Failed to convert property value of type 'java.lang.String' to required type 'int' for property 'port'; nested exception is java.lang.NumberFormatException: For input string: "${email.port}" 
    at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:479) 
    at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:511) 
    at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:505) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1502) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1461) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1197) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537) 
    ... 20 more 
Caused by: java.lang.NumberFormatException: For input string: "${email.port}" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Integer.parseInt(Integer.java:569) 
    at java.lang.Integer.valueOf(Integer.java:766) 
    at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:155) 
    at org.springframework.beans.propertyeditors.CustomNumberEditor.setAsText(CustomNumberEditor.java:113) 
    at org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:430) 
    at org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:403) 
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:181) 
    at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:459) 
    ... 26 more 

Jun 15, 2015 10:46:17 AM org.apache.catalina.core.StandardContext listenerStart 
SEVERE: Exception sending context initialized event to listener instance of class kh.com.gfam.rsos.listener.InitializeApplicationListner 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mailSender' defined in class path resource [springConfig.xml]: Initialization of bean failed; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert property value of type 'java.lang.String' to required type 'int' for property 'port'; nested exception is java.lang.NumberFormatException: For input string: "${email.port}" 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:700) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482) 
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4751) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5175) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.springframework.beans.TypeMismatchException: Failed to convert property value of type 'java.lang.String' to required type 'int' for property 'port'; nested exception is java.lang.NumberFormatException: For input string: "${email.port}" 
    at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:479) 
    at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:511) 
    at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:505) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1502) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1461) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1197) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537) 
    ... 20 more 
Caused by: java.lang.NumberFormatException: For input string: "${email.port}" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Integer.parseInt(Integer.java:569) 
    at java.lang.Integer.valueOf(Integer.java:766) 
    at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:155) 
    at org.springframework.beans.propertyeditors.CustomNumberEditor.setAsText(CustomNumberEditor.java:113) 
    at org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:430) 
    at org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:403) 
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:181) 
    at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:459) 
    ... 26 more 

Jun 15, 2015 10:46:17 AM org.apache.catalina.core.ApplicationContext log 
INFO: Set web app root system property: 'webapp.root' = [D:\Sample Project 2 (RSOS)\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\rsos] 
Jun 15, 2015 10:46:17 AM org.apache.catalina.core.ApplicationContext log 
INFO: Initializing log4j from [D:\Sample Project 2 (RSOS)\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\rsos\WEB-INF\resources\log4j.xml] 
log4j:ERROR Could not parse url [file:/D:/Sample%20Project%202%20(RSOS)/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/rsos/WEB-INF/resources/log4j.xml]. 
java.io.FileNotFoundException: D:\Sample Project 2 (RSOS)\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\rsos\WEB-INF\resources\log4j.xml (The system cannot find the path specified) 
    at java.io.FileInputStream.open(Native Method) 
    at java.io.FileInputStream.<init>(FileInputStream.java:131) 
    at java.io.FileInputStream.<init>(FileInputStream.java:87) 
    at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90) 
    at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188) 
    at org.apache.log4j.xml.DOMConfigurator$2.parse(DOMConfigurator.java:765) 
    at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:871) 
    at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:778) 
    at org.apache.log4j.xml.DOMConfigurator.configure(DOMConfigurator.java:906) 
    at org.springframework.util.Log4jConfigurer.initLogging(Log4jConfigurer.java:69) 
    at org.springframework.web.util.Log4jWebConfigurer.initLogging(Log4jWebConfigurer.java:152) 
    at org.springframework.web.util.Log4jConfigListener.contextInitialized(Log4jConfigListener.java:46) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4751) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5175) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
+0

где находится логика/код, который принимает значения из файла свойств в файл springConfig.xml? –

ответ

3

Посмотрите на эту линию вашей трассировки стека:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mailSender' defined in class path resource [springConfig.xml]: Initialization of bean failed; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert property value of type 'java.lang.String' to required type 'int' for property 'port'; nested exception is java.lang.NumberFormatException: For input string: "${email.port}" 

Он говорит, что ваша переменная port должны быть int и вы пытаетесь сохранить его как String так что вам придется поставить его, как это :

<property name="port">${email.port}</property> 

Ожидаю, это будет полезно для вас!

2

Я думаю, что вы не объявили property placeholder в вашем файле конфигурации x Spring.

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 

     <property name="location"> 
      <value>email.properties</value> //location of email.properties file 
     </property> 
</bean> 

Если вы работаете на Spring 3.1 или выше только обеспечивают

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

Файл email.properties должен быть помещен в/SRC/основные/ресурсы так, что он будет доступен на пути к классам в во время выполнения.

This is a nice article on property configuration.

+0

Я положил оба файла springConfig.xml и email.properties в папку resouce, поэтому !! как я могу написать местоположение? –

1

Вы забыли настроить PropertyPlaceholderConfigurer, как указано выше. Ваш файл свойств, похоже, находится в пути к классам (папке ресурсов), поэтому просто добавьте «classpath:» - «classpath: email.properties».

3

Я думаю, вам нужно попробовать вот так. Создайте файл свойств по пути class, а затем дайте ссылку на application-context.xml.

<!-- App Properties --> 
<beans:bean id="propertyConfigurer" 
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="properties" ref="appProperties" /> 
</beans:bean> 

<bean id="appProperties" 
    class="org.springframework.beans.factory.config.PropertiesFactoryBean"> 
    <property name="singleton" value="true" /> 
    <property name="ignoreResourceNotFound" value="true" /> 
    <property name="locations"> 
     <!-- Note: Properties defined in later files will override properties 
      defined earlier files, in case of overlapping keys. Hence, make sure that 
      the most specific files are the last ones in the given list of locations. --> 
     <list> 
      <value>classpath:properties/email.properties</value> 
     </list> 
    </property> 
</bean> 
<!-- App Properties End --> 

Надежды, описанные выше, помогут вам. :) Позвольте мне знать любой запрос.

Смежные вопросы