【问题标题】:Could not open ServletContext resource [/jdbc.properties] after switch to Java 1.8-Spring 4切换到 Java 1.8-Spring 4 后无法打开 ServletContext 资源 [/jdbc.properties]
【发布时间】:2015-01-20 00:38:44
【问题描述】:

我有两个 Spring 项目,后端和前端。后端升级没有问题(Spring 4.1.2.RELEASE)。在部署前端时,我有这个异常:

org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [acn.spring.config.AppConfig]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/jdbc.properties]
    at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:489)
....
Caused by: 
java.io.FileNotFoundException: Could not open ServletContext resource [/jdbc.properties]

这是前端的 WebAppInitializer:

@Configuration
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[] { AppConfig.class };
    }
    .....

Appconfig 在后端项目中,如下所示:

@Import(DataConfig.class)
@Configuration
public class AppConfig {
   ...
}

在此处导入的 DataConfig 中使用了缺失的属性文件:

@PropertySource("jdbc.properties")
@Configuration
public class DataConfig {
   ...
}

为什么找不到属性文件?

编辑:后端的 Jar 结构:

  • 元信息
    • 清单.MF
    • 行家
  • mySourcePackages 结构
  • jdbc.properties

前端的战争结构:

  • 元信息
    • 清单.MF
    • 行家
  • 资源
  • WEB-INF
      • mySourcePackages 结构
    • jsp
      • 包括 backend.jar 在内的所有 jars

【问题讨论】:

    标签: java spring maven spring-mvc


    【解决方案1】:

    告诉配置类你的属性在类路径中。否则,它将默认在 Servlet 上下文中查找,因为它是 Web 上下文。

    @PropertySource("classpath:jdbc.properties")
    

    【讨论】:

      【解决方案2】:

      检查jdbc.properties 是否在您的类路径的根目录中。如果这不是问题,我需要有关您的问题的更多详细信息,例如您的文件夹结构是什么以及您是否将编译包编译到战争中。

      【讨论】:

      • jdbc.properties 位于后端的根目录中(直接在资源下)。它可以在后端读取。在此升级之前也可以从前端读取它。当我打包前端时,战争由 3 个文件夹 META-INF(MANIFEST.MF 和具有 pom.xml 等的 maven 文件夹)+资源(我的前端文件如css, js.. 位于 webapp 文件夹下)+ WEB-INF(类、jsp 和 lib 文件夹,lib 包含所有 jar,包括 backend.jar)。当我提取后端 jar 时,jdbc.properties 与 META-INF 等一起位于基本文件夹中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 2015-02-03
      • 2014-04-16
      • 2016-04-04
      • 2015-01-16
      • 2018-12-18
      相关资源
      最近更新 更多