日期:2014-05-19  浏览次数:20820 次

Windows的记事本修改java的.properties属性文件问题
事情发生在一个乌云蔽日的下午、
原工程放在服务器(系统是:Windows Server 2003)
神马问题也木有、然后俺一不小心用记事本打开了java的.properties文件
修改了数据源的一些配置、重启后、突然给出如下错误:

信息: Initializing Spring root WebApplicationContext
2012-5-9 16:17:36 org.apache.catalina.core.StandardContext listenerStart
严重: 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 'DataSource' defined in file [D:\apache-tomcat-6.0.29\webapps\module-infobank\WEB-INF\classes\com\chinaboxun\infobank\config\applicationContext-infobank-core.xml]: Could not resolve placeholder 'jndi.name'


当时我就晕了、肿么会找不到jndi.name呢!
属性文件内容跟applicationContext-infobank-core.xml文件内容如下:
XML code

jndi.name=java:/comp/env/jdbc/infobank
jdbc.driverClassName=oracle.jdbc.OracleDriver
jdbc.url=jdbc:oracle:thin:@10.11.0.185:1521:CRM
jdbc.username=....不好说....
jdbc.password=....不好说....
dbcp.initialSize=10
dbcp.maxActive=100
dbcp.maxIdle=10
dbcp.minIdle=1
dbcp.maxWait=5000



XML code

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">          
        <property name="location" value="classpath:com/chinaboxun/infobank/config/infobank.properties"/>          
</bean>

<bean id="DataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="${jndi.name}"/>
</bean>



于是满世界的google、baidu到最后当然是木有结果了!
我说我本地又是OK的、以前服务器也是OK的!
当时就觉得是属性文件出了什么问题、难道单词错了、仔细对照、硬是没发现!
后来、直接把本地的属性文件改好复制到服务器上去、这样就没错了!


我很疑惑、希望大牛解惑!
这是什么原因呢、为什么用记事本修改过后、Tomcat6就不认识它了呢???

------解决方案--------------------
这个没关系啊、、、我刚试了、、我的tomcat就认得!~~~
你的情况 坐等大牛吧
------解决方案--------------------
是不是编码的问题,用记事本打开在保存编码就变了。。。
------解决方案--------------------
window的记事本默认保存的编码格式是ansi码 如果你的项目是utf-8, 你可以另存为 选择utf-8 无bom格式 在试试
------解决方案--------------------
properties 文件当编码不对时会出现丢内容,我遇到过。
你这应该是编码的错。

------解决方案--------------------
Properties 默认使用ISO8859-1
除非你用InputStreamReader指定具体的编码

如果不想改程序,jdk\bin下面可以找到一个native2ascii.exe
用native2ascii.exe -encoding gbk c:\11.properties c:\22.properties的形式,把原来的11.properties处理一下,再拿去部署