You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Spring Boot如何使用自定义properties文件?替代application.properties

在Spring Boot中使用自定义.properties文件并排除默认属性的方案

Hey,刚好对这块熟,我给你捋清楚怎么在Spring Boot里用自定义.properties,还能搞定排除默认属性的需求:

一、指定自定义.properties文件的常用方式

1. 用@PropertySource注解硬编码指定

直接在你的启动类或者配置类上加上这个注解,就能让Spring Boot加载你指定的配置文件:

@SpringBootApplication
@PropertySource(value = "classpath:my-custom.properties")
public class MyBootApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyBootApplication.class, args);
    }
}

如果有多个自定义文件,直接传数组就行:@PropertySource(value = {"classpath:db-config.properties", "classpath:redis-config.properties"})。要是文件不在项目的classpath里(比如服务器上的外部配置),可以用绝对路径:file:/opt/app-config/my-custom.properties

2. 通过启动参数动态指定

不想把配置文件路径写死在代码里?启动Jar包的时候加参数就行:

# 只指定配置文件名称(默认找classpath下的my-custom.properties)
java -jar my-app.jar --spring.config.name=my-custom

# 指定完整路径,支持多个路径用逗号分隔
java -jar my-app.jar --spring.config.location=classpath:/my-custom.properties,file:/opt/config/extra.properties

用这个方式的话,Spring Boot会优先加载你指定的配置,不再默认加载application.properties(除非你特意把它加到spring.config.location里)。

二、排除默认application.properties的部分属性

如果你不想完全抛弃默认配置,只是想屏蔽其中某些属性,或者让自定义配置覆盖特定属性,有这几个思路:

1. 利用配置优先级自动覆盖

Spring Boot的配置是有优先级的:命令行参数 > 自定义配置文件 > application.properties。所以只要你在自定义文件里写和默认文件相同的key,自定义的属性值就会自动覆盖默认的。比如默认文件里有server.port=8080,你在自定义文件里写server.port=9090,启动后服务就会用9090端口。

2. 用@ConfigurationProperties限定绑定范围

如果只想让自定义配置类加载特定前缀的属性,完全不关心默认文件里的其他内容,可以这么做:

@Configuration
@PropertySource("classpath:my-custom.properties")
@ConfigurationProperties(prefix = "my.app")
public class MyCustomConfig {
    private String appName;
    private int maxRequestCount;

    // 别忘了写getter和setter
    public String getAppName() { return appName; }
    public void setAppName(String appName) { this.appName = appName; }
    public int getMaxRequestCount() { return maxRequestCount; }
    public void setMaxRequestCount(int maxRequestCount) { this.maxRequestCount = maxRequestCount; }
}

这样这个配置类只会绑定my.app开头的属性,默认application.properties里的其他属性根本不会影响它。

3. 排除特定自动配置类

如果是某些Spring Boot自动配置类用到了默认属性,你不想让这些配置生效,可以直接排除对应的自动配置类。比如不想用默认的数据源配置,就排除DataSourceAutoConfiguration

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class MyBootApplication {
    // ...
}

这样默认的数据库相关属性(比如spring.datasource.*)就不会被加载和生效了。

三、几个关键注意点

  • 如果你同时保留application.properties和自定义文件,两者的不同key会自动合并,相同key则自定义文件的优先级更高。
  • 要是想完全禁用默认的application.properties,直接用启动参数--spring.config.name=你的自定义文件名就行,Spring Boot就只会加载你指定的文件。
  • @PropertySource加载的属性会和默认配置合并,所以如果要完全替换,优先用启动参数的方式更灵活。

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

火山引擎 最新活动