【问题标题】:ClassPathXmlApplicationContext error, Spring frameworkClassPathXmlApplicationContext 错误,Spring 框架
【发布时间】:2016-10-01 22:11:58
【问题描述】:

我在使用Springs框架的时候遇到了一个问题,导致服务器和数据库的通信不通。

我创建的项目是一个 Spring 项目,然后重构为 Maven。

在代码的这一行: ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("projectName/spring.xml");

我收到此错误: Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [projectName/spring.xml]; nested exception is java.io.FileNotFoundException: class path resource [projectName/spring.xml] cannot be opened because it does not exist

但它确实存在。我已经尝试过解决这个问题的方法,比如改写ClassPathXmlApplicationContext("spring.xml")。然而这并没有帮助,因为那时 Spring 会自动在文件夹 src/main/resources 中查找。这对我不起作用,因为我的项目结构不允许我添加此文件夹并将 XML 文件放入其中。如果我尝试创建此文件夹,它会自动放入 Java-resources 文件夹中,并且 Eclipse 不允许我将 XML 放入其中。

这是我的项目的外观: enter image description here

有没有办法让我声明 Spring 应该在哪里寻找这个 spring.xml 文件?

【问题讨论】:

    标签: java mysql spring hibernate maven


    【解决方案1】:
    new ClassPathXmlApplicationContext(this.getClass().getResource("/spring.xml").getPath())
    

    试试上面的代码

    希望有所帮助

    【讨论】:

    • 谢谢!将其更改为new ClassPathXmlApplicationContext(ClassName.class.getResource("/spring.xml").getPath());,因为它是在静态方法中。
    【解决方案2】:

    ClassPathXmlApplicationContext 假定文件在您的类路径中(Javy 描述了如何从您的类路径中加载资源)。​​

    如果您想从您的文件系统加载配置(正如您所做的那样),您可能需要考虑改用 FileSystemXmlApplicationContext。使用这种机制来加载您的上下文,您可以像当前一样传递文件系统位置。

    【讨论】:

    • 谢谢,但我应该避免精确定位文件位置,因为我希望以后能够移动服务器。
    • 当然,这取决于您的用例。但是为了“让它发挥作用”,我认为这可能会对你有所帮助。
    【解决方案3】:

    Spring 不查看 src/main/resources,它查看类路径。

    如果您写projectName/spring.xml,您需要在bin/projectName/spring.xmlbuild/projectName/spring.xml 中有这个文件。 binbuild 您的构建文件夹在哪里。

    如果你构建一个jar,这个文件应该在jar!projectName/spring.xml

    对于网络应用程序,此文件应位于WEB-INF/classes/projectName/spring.xml 中。

    如果您在类路径中添加src/main/resources,则此文件夹的内容将在构建文件夹中。 Maven 会自动在类路径中添加src/main/resources

    有时您应该在 IDE 中重新构建(清理)您的项目,以便在构建文件夹中包含此类文件。

    【讨论】:

    • 好吧,我可能误解了 Spring 从回答到类似问题的角度。
    【解决方案4】:

    使用“FileSystemXmlApplicationContext”作为

    ApplicationContext  context =  new FileSystemXmlApplicationContext("spring.xml");
    

    【讨论】:

      猜你喜欢
      • 2014-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多