弹簧context.xml中的位置弹簧context.xml中的位置(Location of spr

2019-05-13 17:40发布

当我在Tomcat上运行我的应用程序的弹簧context.xml文件位于

/WEB-inf/spring-context.xml

还行吧。 但在运行JUnit测试我对像这样我的弹簧试验context.xml中的位置,里面提供:

@ContextConfiguration(locations={"classpath:/spring-test-context.xml"})

这个作品的唯一方法是,如果该文件位于

/src/spring-context.xml

我怎样才能让我的应用程序,以找到在同一位置我的春天上下文文件? 因此,它的工作原理与JUnit的睾丸和部署在tomcat的?

我想这和它给了我很多关于没有发现任何错误豆的,但它并没有说这是不可能找到的文件..

classpath:/WEB-INF/spring-test-context.xml

Answer 1:

正如duffymo暗示,那么Spring TestContext框架(TCF)假定字符串位置是在默认情况下classpath中。 有关详细信息,请参阅的JavaDoc ContextConfiguration 。

但是请注意,您可以在任何具有绝对或相对路径的文件系统中使用Spring的资源抽象(即通过使用“文件:”前缀),也可以指定资源。 你可以找到在JavaDoc在对细节modifyLocations()在Spring的方法AbstractContextLoader

因此,举例来说,如果你的XML配置文件位于"src/main/webapp/WEB-INF/spring-config.xml"在项目文件夹,你可以按如下方式指定位置为相对文件系统路径:

@ContextConfiguration("file:src/main/webapp/WEB-INF/spring-config.xml")

作为替代方案,你可以存储你的Spring配置文件在类路径(例如, src/main/resources ),然后通过在Spring MVC配置classpath中引用它们-例如:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:/spring-config.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

通过这种方法,您的测试配置只会是这样的(注意,表示该资源在类路径的根斜线):

@ContextConfiguration("/spring-config.xml")

你也可以找到与XML资源Context配置有用的参考手册的部分。

问候,

山姆

(Spring的TestContext框架的作者)



Answer 2:

问题是,/ WEB-INF是不是在CLASSPATH的Web应用程序。 然而,/ WEB-INF / classes中是。

您与测试的问题是,你是不是在应用服务器上运行,所以WEB-INF / classes中是不是默认CLASSPATH的一部分。 我建议设置你的测试,这样,要么WEB-INF / classes中处于测试CLASSPATH或使用相对或绝对文件路径找到他们。



文章来源: Location of spring-context.xml