You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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缓存,以下是针对性解决步骤:

  1. 检查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但没有配置对应的变量替换,会导致文件内容被空值覆盖。

  2. 清理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
  3. 排查spring-boot-devtools缓存
    devtools的自动重启功能可能缓存资源文件:

    • 在application.properties中临时添加spring.devtools.restart.enabled=false,重新编译查看文件是否正常
    • 若正常,删除项目根目录下的.spring-boot-devtools.properties缓存文件(若存在),再恢复重启配置
  4. 检查文件权限与终端编译验证
    MacOS Catalina的权限可能导致Maven无法写入target目录:

    • 右键项目目录选择Get Info,确认Sharing & Permissions有读写权限
    • 用终端执行mvn clean install,跳过Eclipse内置Maven,验证是否能生成正常的application.properties

内容的提问来源于stack exchange,提问作者pedrociarlini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 02:15:41