您的位置:首页 > 移动开发

记录一次mac+idea+springmvc开发的applicationContext.xml读取文件找不到异常处理

2017-09-12 15:36 786 查看
普通的springmvc项目,不过是用mac+idea开发的,然后平时我很少用main方法来测试,都是通过controller测的调用,用postman工具来测试,而不会用main()方法测试。而最近公司通过dubbo服务提供RPC的调用,我们作为提供方,自然不会去写controller来调用,而是通过暴露接口的形式给友方调用。

   然后自己在测试的时候,因为前辈们已经把applicationContext.xml放置在了WEB-INF文件夹下了,所以我就写了个main方法自测,然后一直报错文件找不到,我的现象是这样的:

配置文件所在目录:



读取配置文件代码如下:

复制文件path,绝对路径读取:

FileSystemXmlApplicationContext context = new
FileSystemXmlApplicationContext("/Users/xueqin/yooli/20170913/data-transfer/data-transfer-service/src/main/webapp/WEB-INF/applicationContext.xml");

复制文件相对路径,读取:

FileSystemXmlApplicationContext context = new
FileSystemXmlApplicationContext("WEB-INF/applicationContext.xml");
然后结果就是报错,很明显文件找不到;
问题:文件就在路径下放着,但是通过FileSystemXmlApplicationContext就是读取不到。
解决思路:我觉得这是不科学的,于是我用File+FileInputStream来读取这个配置文件:
File f = new File("/Users/xueqin/yooli/20170907/data-transfer/data-transfer-service/src/main/webapp/WEB-INF/applicationContext.xml");
FileInputStream in = new FileInputStream(f);
然后发现,文件是可以读取的,并没有报错说文件找不到。
从而可以确定在FileSystemXmlApplicationContext()中传递的参数有问题。
我们都知道如果我们是window那么我的代码应该是这么写的:
public static void main(String[] args) {
FileSystemXmlApplicationContext context = new
FileSystemXmlApplicationContext("E:\\workspace\\data-transfer\\data-transfer-service\\src\\main\\webapp\\WEB-INF\\applicationContext.xml");
说明我当前的配置文件在E盘中放置。
但是对于mac系统。那么我DEBUG调试发现f的定义和我们传递给FileSystemXmlApplicationContext的参数区别仅仅是,java根据File()生成的文件是有前缀:
file:/Users/xueqin/yooli/20170907/data-transfer/data-transfer-service/src/main/webapp/WEB-INF/applicationContext.xml;
而我们传递的时候没有加。
于是我尝试给加了file:形成file:path这样格式的字符串路径给传递,总于可以成功读取配置文件了,
最后的代码如下:
String path = "file:/Users/xueqin/yooli/20170907/data-transfer/data-transfer-service/src/main/webapp/WEB-INF/applicationContext.xml";

FileSystemXmlApplicationContext context = new
FileSystemXmlApplicationContext(path);
从而正确获得了context,然后后续的测试水到渠成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dubbo spring mvc mac idea
相关文章推荐