Eclipse中Spring Boot项目application.properties复制为空问题
问题描述
在Spring Boot项目中遇到以下问题:更新src/main/resources/application.properties后,生成的target/classes/application.properties被复制为空文件。
项目采用双数据源/JPA配置,核心配置代码如下:
@Configuration @EnableTransactionManagement @EnableJpaRepositories(basePackages = { PJE_BPMN_PACKAGES }, entityManagerFactoryRef = PJE_BPMN_EMF, transactionManagerRef = PJE_BPMN_TM) public class PjeBpmnDbConfig { @Autowired private Environment env; @Primary @Bean(name = PJE_BPMN_DS) @ConfigurationProperties(prefix = "pjebpmn.datasource") public DataSource createDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = PJE_BPMN_EMF) @Primary @ConfigurationProperties(prefix = "pjebpmn.jpa") public LocalContainerEntityManagerFactoryBean createEntityManager(EntityManagerFactoryBuilder entityManagerFactoryBuilder, @Qualifier(PJE_BPMN_DS) DataSource dataSource) { Map<String, String> properties = new HashMap<>(); System.out.println( "lendo pjebpmn.jpa.hibernate.ddl-auto do properties, e retornou: " + env.getProperty("pjebpmn.jpa.hibernate.ddl-auto", "NADA")); properties.put("hibernate.hbm2ddl.auto", env.getProperty("pjebpmn.jpa.hibernate.ddl-auto", "update")); properties.put("hibernate.dialect", env.getProperty("pjebpmn.jpa.properties.hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect")); return entityManagerFactoryBuilder.dataSource(dataSource).packages(PJE_BPMN_PACKAGES).persistenceUnit(PJE_BPMN_DS).properties(properties) .build(); } @Primary @Bean(name = PJE_BPMN_TM) public PlatformTransactionManager createTransactionManager(@Qualifier(PJE_BPMN_EMF) EntityManagerFactory entityManagerFactory) { JpaTransactionManager transactionManager = new JpaTransactionManager(entityManagerFactory); return transactionManager; } }
项目环境与依赖
- pom.xml由start.spring.io生成,包含依赖:
spring-boot-starter-data-jpa、spring-boot-starter-web、lombok、spring-boot-devtools、spring-boot-configuration-processor、postgresql - 环境:Mac Os Catalina、Eclipse 2022-09、Spring Boot 2.7.6
- 曾开启后关闭Eclipse设置:
Preferences > Maven > Annotation Processing > "Experimental"选项
已尝试的无效方案
- 删除Eclipse项目及相关文件(
.project、.settings等)后重新导入为“现有Maven项目” - 移除pom.xml中的
lombok和spring-boot-configuration-processor依赖
问题分析与解决方案
结合你的操作历史和环境,问题大概率出在Eclipse的Maven注解处理缓存、资源过滤配置异常或devtools缓存,以下是针对性解决步骤:
检查Maven资源过滤配置
打开pom.xml,确认<build>节点下的资源规则是否正确,错误的过滤会导致文件被清空:<build> <resources> <resource> <directory>src/main/resources</directory> <!-- 若不需要变量替换,将filtering改为false --> <filtering>true</filtering> <includes> <include>**/*.properties</include> <include>**/*.yml</include> </includes> </resource> </resources> </build>如果开启了
filtering但没有配置对应的变量替换,会导致文件内容被空值覆盖。清理Eclipse注解处理缓存
你修改过注解处理的Experimental选项,可能引发缓存异常:- 执行
Project > Clean,选择当前项目并勾选Start a build immediately - 手动删除
target目录,再执行Maven > Clean+Maven > Install - 打开
Eclipse > Preferences > Maven > Annotation Processing,确认Enable annotation processing状态,若不需要则关闭,点击Apply and Close后重启Eclipse
- 执行
排查spring-boot-devtools缓存
devtools的自动重启功能可能缓存资源文件:- 在
application.properties中临时添加spring.devtools.restart.enabled=false,重新编译查看文件是否正常 - 若正常,删除项目根目录下的
.spring-boot-devtools.properties缓存文件(若存在),再恢复重启配置
- 在
检查文件权限与终端编译验证
MacOS Catalina的权限可能导致Maven无法写入target目录:- 右键项目目录选择
Get Info,确认Sharing & Permissions有读写权限 - 用终端执行
mvn clean install,跳过Eclipse内置Maven,验证是否能生成正常的application.properties
- 右键项目目录选择
内容的提问来源于stack exchange,提问作者pedrociarlini
相关产品推荐
相关产品推荐

