您的位置:首页 > 编程语言 > Java开发

使用Spring+Mybatis写一个jar项目,将项目打包后外部配置文件properties无法读取的问题

2019-01-15 18:24 1361 查看

使用Spring+Mybatis写了一个jar项目,使用GUI作为前台页面,将项目打包为jar,依赖包放到jar文件同目录下的libs文件中,配置文件xml和properties放到jar文件同目录下的config文件中,同时生成logs文件夹放置日志文件。文件目录如下图

刚开始打包之后出现无法读取配置文件的情况,错误为FileNotFoundException,将application.xml的读取路径改为绝对路径后可以读取xml文件

[code]String path = System.getProperty("java.class.path");
int firstIndex = path.lastIndexOf(System.getProperty("path.separator")) + 1;
int lastIndex = path.lastIndexOf(File.separator) + 1;
path = path.substring(firstIndex, lastIndex);

ApplicationContext ac = new ClassPathXmlApplicationContext("file:" + path + "applicationcontext.xml");

但是xml中的数据库配置文件db.properties文件无法读取,同样为FileNotFound

[code]<context:property-placeholder location="classpath:db.properties"/>
<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource">
<property name="driverClassName" value="${oracle.driverClassName}"></property>
<property name="url" value="${oracle.url}"></property>
<property name="username" value="${oracle.username}"></property>
<property name="password" value="${oracle.password}"></property>
</bean>

将代码中的classpath换为classpath*之后,程序执行不报错了,但是bean中的占位符${}直接按照字符串输出,应该也是没有读取到文件导致的

后来从百度了各种方法都没有解决问题,直到看到了这篇博客  Spring 中注入bean的properties配置文件位置问题解决  ,按照其中的方法对xml中的配置进行更改后问题成功解决

更改后的代码

[code]<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
<property name="location" value="file:${user.dir}/config/db.properties"/>
</bean>
<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource">
<property name="driverClassName" value="${oracle.driverClassName}"></property>
<property name="url" value="${oracle.url}"></property>
<property name="username" value="${oracle.username}"></property>
<property name="password" value="${oracle.password}"></property>
</bean>

其中systemPropertiesModeName的值SYSTEM_PROPERTIES_MODE_OVERRIDE是指可以从JVM的数据中获取信息,当加上这个属性的设置之后${user.dir}就会获取到当前执行的jar文件的路径。

至此问题成功解决

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: