Eclipse中Tomcat启动项目误读取src/test/resources下application.properties
根因说明
Eclipse中Maven项目默认将src/test/resources标记为测试类路径资源,即使手动移除了普通classpath条目,Maven插件的生命周期绑定、WTP部署组件的默认配置仍可能将测试资源同步到Tomcat部署目录的类路径下,测试资源的类路径优先级高于生产资源,导致配置加载错乱。
分步操作方案
第一步:修正Eclipse项目部署配置
右键项目 → 选择【Properties】 → 进入【Deployment Assembly】配置页,删除列表中src/test/resources对应的条目,仅保留src/main/java、src/main/resources、Maven Dependencies等生产部署需要的条目,保存配置后右键项目 → 【Maven】 → 【Update Project】,勾选「Update project configuration from pom.xml」确认更新。第二步:显式指定Spring配置文件加载路径
你所使用的Spring 4.3版本默认会扫描所有类路径下的匹配配置文件,可通过显式指定加载路径锁定生产配置:
注解配置示例:@PropertySource("classpath:/application.properties")XML配置示例:
<context:property-placeholder location="classpath:/application.properties" ignore-unresolvable="true" />此处使用
classpath:前缀而非classpath*:,只会读取主类路径下的第一个匹配配置,不会扫描测试类路径的资源。第三步:调整Maven资源配置区分生产/测试资源
在pom.xml的build节点下显式声明资源目录,从构建层面隔离两类资源:<build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> </resource> </resources> <testResources> <testResource> <directory>src/test/resources</directory> </testResource> </testResources> </build>配置完成后执行一次
mvn clean install,再更新Eclipse Maven项目配置。第四步:清理缓存后重新部署
停止当前运行的Tomcat实例,右键Tomcat服务器选择【Clean】清除部署缓存,进入Tomcat的wtpwebapps目录删除对应项目的部署文件夹,重启Tomcat重新部署即可。
内容的提问来源于stack exchange,提问作者Shubham Rathi

