spring boot的配置修改

在 Spring Boot 中,约定大于配置的核心是减少手动配置,但同时也允许开发者通过灵活的方式覆盖默认行为。修改配置的两种主要方式是 application.properties(或 application.yml推荐)@Configuration 注解的配置类。它们的区别主要体现在 配置方式、灵活性、适用场景优先级 上,下面详细对比:


一、两种配置方式的区别

维度application.properties/application.yml(推荐)@Configuration 配置类
配置形式键值对(外部化配置)Java 代码(编程式配置)
适用场景简单参数调整(如端口、数据库连接、开关功能)复杂逻辑配置(如自定义 Bean、条件化加载组件、覆盖自动配置类)
灵活性只能覆盖预定义的配置项可完全自定义组件行为(如重写 DataSource、拦截器等)
优先级更高(外部属性文件中的配置会覆盖代码中的默认值)较低(除非显式覆盖自动配置类)
动态性支持多环境配置(application-{profile}.properties可通过 @Profile 实现环境隔离
维护性集中管理配置,适合运维人员修改代码与配置结合,适合开发者维护
典型用例修改服务器端口、数据源 URL、日志级别自定义数据源、添加拦截器、整合第三方库

二、具体使用方式与示例

1. 通过 application.properties 修改配置

作用:覆盖 Spring Boot 的默认约定,调整预定义的配置参数。
特点
• 无需编写代码,修改后重启生效(若需热更新需结合 @RefreshScope 等)。
• 配置项需符合 Spring Boot 的约定命名(如 server.portspring.datasource.url)。

示例:修改服务器端口和数据库连接

# application.properties
server.port=9090  # 覆盖默认端口 8080
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=admin
spring.datasource.password=secret
2. 通过 @Configuration 类自定义配置

作用:完全自定义组件行为,或覆盖自动配置类,通过一些注解(Auto-Configuration)。
特点
• 需要编写 Java 代码,适合复杂逻辑(如条件化创建 Bean)。
• 可结合 @Bean@Conditional 等注解实现精细控制。

示例:自定义数据源并禁用自动配置

@Configuration
public class DataSourceConfig {

    @Bean
    @ConfigurationProperties(prefix = "app.datasource")  // 绑定自定义配置前缀
    public DataSource customDataSource() {
        return new HikariDataSource();  // 使用 HikariCP 连接池
    }
}

application.properties 中配置自定义参数:

# application.properties
app.datasource.jdbc-url=jdbc:mysql://localhost:3306/mydb
app.datasource.username=admin
app.datasource.password=secret

三、优先级与覆盖规则

1. 配置优先级顺序

Spring Boot 的配置加载遵循以下优先级(从高到低):

  1. 命令行参数(如 --server.port=9000
  2. application.properties/application.yml
  3. @Configuration 类中的 @Bean 定义
  4. Spring Boot 自动配置(Auto-Configuration)
2. 如何覆盖自动配置?

通过属性文件:直接覆盖自动配置暴露的参数(如 server.port)。
通过 @Configuration
• 定义同名 Bean 来替换自动配置的 Bean(需禁用自动配置)。
• 使用 @ConditionalOnMissingBean 确保仅在无自定义 Bean 时启用自动配置。

示例:禁用 Spring Security 自动配置

# application.properties
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration

四、适用场景与最佳实践

1. 使用 application.properties 的场景

简单参数调整:如端口、超时时间、日志级别。
环境差异化配置:通过 application-{profile}.properties 区分开发、测试、生产环境。
开关功能:启用或禁用某些模块(如 spring.main.web-application-type=none)。

2. 使用 @Configuration 类的场景

自定义组件:如数据源、线程池、拦截器。
整合第三方库:如手动配置 MyBatis 的 SqlSessionFactory
覆盖自动配置:当默认行为不满足需求时(如更换 JSON 序列化库)。

3. 最佳实践

优先使用属性文件:保持配置集中化,便于维护。
复杂逻辑用代码配置:当需要编程逻辑(如条件分支)时,选择 @Configuration
避免重复配置:若属性文件已提供参数,无需在代码中硬编码。


五、总结

application.properties:适合简单、静态的配置调整,遵循约定命名,无需编码。
@Configuration:适合动态、复杂的逻辑配置,通过代码实现完全控制。
二者协作:属性文件用于参数化,配置类用于定制化,共同实现灵活性与简洁性的平衡。

理解这两种方式的关系,能帮助你在 Spring Boot 项目中高效管理配置,既享受“约定大于配置”的便利,又能应对复杂需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值