FileSystemXmlApplicationContext方法的绝对路径问题

public AgentServer(Socket c,String confDir) {    this.client = c;    ApplicationContext ac = new FileSystemXmlApplicationContext(confDir);    this.atsMgr = (AtsMgr) ac.getBean("atsMgr");}

用FileSystemXmlApplicationContext方法准备去容器中取bean,在window环境下没有问题,但是放到Jenkins上面发现总是报错,说文件找不到:

/home/docker/.jenkins/jobs/ats/workspace/target/test-classes/utap-ats.xml
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from file [/home/docker/.jenkins/jobs/ats/workspace/home/docker/.jenkins/jobs/ats/workspace/target/test-classes/utap-ats.xml]; nested exception is java.io.FileNotFoundException: home/docker/.jenkins/jobs/ats/workspace/target/test-classes/utap-ats.xml (No such file or directory)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:343)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:303)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:216)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:187)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:251)
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127)
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:537)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:452)
    at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:140)
    at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:84)
    at com.newland.sri.utap.ats.AgentServer.<init>(AgentServer.java:31)
    at com.newland.sri.utap.ats.AtsTest$T1.run(AtsTest.java:57)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.FileNotFoundException: home/docker/.jenkins/jobs/ats/workspace/target/test-classes/utap-ats.xml (No such file or directory)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:195)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at org.springframework.core.io.FileSystemResource.getInputStream(FileSystemResource.java:115)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:329)
    ... 15 more

  查看源码发现,FileSystemXmlApplicationContext方法对路径进行了处理:

    protected Resource getResourceByPath(String path) {
        if(path != null && path.startsWith("/")) {
            path = path.substring(1);
        }

        return new FileSystemResource(path);
    }
}

  用绝对路径时,第一个斜杠会被去掉(也是不知道为什么,我勒个去),所以,给在代码前再加个斜杠解决问题,代码通过:

    public AgentServer(Socket c,String confDir) {
        this.client = c;
        ApplicationContext ac = new FileSystemXmlApplicationContext("/" + confDir);
        this.atsMgr = (AtsMgr) ac.getBean("atsMgr");
    }
时间: 2024-10-06 01:31:32

FileSystemXmlApplicationContext方法的绝对路径问题的相关文章

Java读取配置文件方法及文件路径注意事项

一.方法请见代码中的注释说明,需要注意的就是对于文件路径的读取方式,不同的方法,对路径的解释是不一样的. 1 package com.yard39.ProperTiesFileReader.Test; 2 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.IOException; 6 import java.io.InputStream; 7 import java

WPF 利用Process.Start()方法启动指定路径下的exe文件并传递参数接收参数

WPF 利用Process.Start()方法启动指定路径下的exe文件并传递参数接收参数 在开发中遇到这样一个需求:WPF程序A启动WPF程序B并且传递参数,WPF程序B接收参数并处理. 如何来实现这样的需求呢,网络上已经有很多的文章描述这个问题,在这里做个记录. 首先通过如下代码启动WPF客户端B: private void ActionStartClientExcute() { var address = "exe位置"; Process process = new Proces

linux开机启动服务和chkconfig使用方法(自定义服务路径启动)

服务概述在linux操作系统下,经常需要创建一些服务,这些服务被做成shell脚本,这些服务需要在系统启动的时候自动启动,关闭的时候自动关闭.将 需要自动启动的脚本/etc/rc.d/init.d目录下,然后用命令chkconfig --add filename将自动注册开机启动和关机关闭.实质就是在rc0.d-rc6.d目录下生成一些文件连接,这些连接连接到/etc/rc.d /init.d目录下指定文件的shell脚本. 在文章linux下Oracle自动启动与停止(一),linux下Ora

swift两种获取相册资源PHAsset的路径的方法(绝对路径)

方法中使用到的phasset就是我们取到的PHAsset对象 方法一: 1 let options = PHVideoRequestOptions() 2 3 options.version = PHVideoRequestOptionsVersion.current 4 5 options.deliveryMode = PHVideoRequestOptionsDeliveryMode.automatic 6 7 let manager =PHImageManager.default() 8

PHP 站点相对包含,路径的问题解决方法(include,require)

以前看了,很多框架,基本上很少使用相对路径包含.而一般很多做php web站点,喜欢用相对路径. 认为这样,无论目录放到那里. 只要跟另外目录关系一致.那么就不会出现问题.如果一个站点,一般都认为,如果用根目录,经常会改变网站地址,觉得很不方便.其实,我们从各大常见框架里面会发现,基本上都是采用是绝对路径方法. 相对路径带来问题 我们有如下结构的目录. <web>(网站根目录) ├<a>文件夹 │ │ │ └a.php ├<b>文件夹 │ │ │ └b.php └tes

eWebeditor编辑器上传图片路径错误解决方法[疑难杂症]【转,作者:unvs】

做了一个多版本的网站,后台用的编辑器是eWebeditor,NET版,后面发现上传图片或者文件之后,路径错误无法显示,必须手工修改才行.. 为了更清楚的说明问题,我下面会说的比较详细,首先是网站文件框架路径(多版本网站为实例),然后解释上传文件的文件含义,最后会根据问题说出不同的原因及解决方法: 一.网站文件框架 wootroot(网站根目录) cn(中文版文件夹) admin(后台目录) eWebeditor(后台编辑器文件夹) upload(上传处理文件夹)  default.aspx  

Path.Combine (合并两个路径字符串)方法的一些使用细节

System.IO.Path.Combine 简单来说,就是合并两个路径字符串. 比如如下调用,Path.Combine(@"C:\11","aa.txt") 返回的字符串路径如后: C:\11\aa.txt 这个方法的声明如下: public static string Combine ( string path1, string path2 ) 我们在合并一些目录的时候,它的两个参数有些特殊限制,下面我们就来依次看这些特殊限制 1.如果其中一个参数为 null

Qt 程序获取程序所在路径、用户目录路径、临时文件夹等特殊路径的方法

Qt 程序获取程序所在路径.用户目录路径.临时文件夹等特殊路径的方法 经常我们的程序中需要访问一些特殊的路径,比如程序所在的路径.用户目录路径.临时文件夹等.在 Qt 中实现这几个功能所用的方法虽然都不难,但是各不相同,每次用到时还要现去查,很不方便.因此就写了这篇博客,把这几种需求的实现方式总结了一下.算是个备忘录吧. 程序所在路径 获取程序所在路径,QCoreApplication 类里就实现了相关的功能: QString QCoreApplication::applicationDirPa

【spring 区别】ClassXmlAplicationContext和FileSystemXmlApplicationContext的区别

今天写一个简单的spring使用例子,遇到这个问题: 项目结构如下: 代码如下: 1 package com.it.sxd; 2 3 import java.nio.file.FileSystem; 4 5 import org.junit.Test; 6 import org.springframework.context.ApplicationContext; 7 import org.springframework.context.support.ClassPathXmlApplicati