打成jar包运行的时候,加载不到properties文件,spring的bean无法初始化

百越平民 发布于 2015/06/25 13:04
阅读 6K+
收藏 0

打成jar包运行的时候,

加载不到properties文件,

spring的bean无法初始化

像jdbc,如果是打成jar包后,启动后才去服务端下载jdbc.properties配置文件的话,那我的数据库无法在spring上加载成功,提示 Could not load driverClass ${jdbc.driverClass}

在debug模式,就是不打成jar包运行是没有什么问题的,是路径问题吗?

加载中
0
王瑞平
王瑞平
文件放在jar包同级目录下
0
LucEsape
LucEsape
加载不到 还是打包时没有打进去?加载不到是路径问题,打包没打进去是IDE 把非java文件过滤了
LucEsape
LucEsape
回复 @百越平民 : 加载目录对就没问题,
百越平民
百越平民
打包是没打进去,我是想利用disconf的配置,运行时从服务端下载,加载jdbc的配置,难道是加载不了jar包同级目录的配置文件导致的????
0
百越平民
百越平民

引用来自“王瑞平”的评论

文件放在jar包同级目录下

文件是下载成功了,放在了jar包的同级路径

download ok.
 
jdbc.url jdbc:postgresql://192.168.33.12:5432/masget?prepareThreshold=0&binaryTransfer=false
jdbc.username erlang
jdbc.driverClass org.postgresql.Driver
jdbc.password erlang

inject ok.


我是用了

“Tutorial 5 基于XML的分布式配置文件管理,不会自动reload”

像一般如果加载文件成功,在日志上会打印:
Loading properties file from URL xxxxxxxx

但是我如果用maven打成一个运行包,用  java -jar xxxxxxx.jar 运行的时候,下载jdbc.properties是成功的,但是加载却不显示 这个

提示错误信息:Could not load driverClass ${jdbc.driverClass}
java.lang.ClassNotFoundException: ${jdbc.driverClass}

是否由于无法加载jar包外的文件导致的???

0
南湖船老大
南湖船老大
jar包内和jar包外加载文件的方式不一样,这个是个坑
0
slimina
slimina
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="ignoreResourceNotFound" value="true" />
<property name="locations">
<list>
<!-- 标准配置 -->
<value>classpath*:application*.properties</value>
</list>
</property>

</bean>

classpath*:+配置文件

0
百越平民
百越平民

引用来自“slimina”的评论

<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="ignoreResourceNotFound" value="true" />
<property name="locations">
<list>
<!-- 标准配置 -->
<value>classpath*:application*.properties</value>
</list>
</property>

</bean>

classpath*:+配置文件

贴一下我的配置:
<!-- 使用托管方式的disconf配置(无代码侵入, 配置更改不会自动reload)-->
<bean id="configproperties_no_reloadable_disconf"
     class="com.baidu.disconf.client.addons.properties.ReloadablePropertiesFactoryBean">
   <property name="locations">
       <list>
           <value>classpath*:/jdbc.properties</value>
            <value>classpath*:/sessionpool.properties</value>
            <value>classpath*:/dubbo-provider.xml</value>
    </list>
   </property>
</bean>

<bean id="propertyConfigurerForProject1"
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
   <property name="ignoreResourceNotFound" value="true"/>
   <property name="ignoreUnresolvablePlaceholders" value="true"/>
   <property name="propertiesArray">
       <list>
           <ref bean="configproperties_no_reloadable_disconf"/>
       </list>
   </property>
</bean>
0
slimina
slimina
为什么还要使用ReloadablePropertiesFactoryBean呢。直接使用spring不就可以了
0
百越平民
百越平民

引用来自“slimina”的评论

为什么还要使用ReloadablePropertiesFactoryBean呢。直接使用spring不就可以了

这个是交给disconf去管理,应用启动的时候,自动从服务端下载最新的配置文件

0
slimina
slimina
既然都交给disconf了,为什么jar里面还有呢,在另外写一个spring配置试试
百越平民
百越平民
打成jar的时候,我已经把那三个文件从resource目录删掉了 1.如果是debug模式,是可以正常下载运行的,下载后,路径寻找没问题,因为是放在class的根目录的 2.打成jar后,他会自动下载到jar的同级目录,导致找不到properties文件,初始化不了bean
0
slimina
slimina
不清楚ReloadablePropertiesFactoryBean 的加载原理,或者你可以试试绝对路径/WEB-INF/...
百越平民
百越平民
好的,谢谢,我的是应用来的,不是web 这个是disconf:https://github.com/knightliao/disconf
返回顶部
顶部