【Spring Boot】Spring Boot 配置文件详解(application.yml、application-dev.yml、application-test.yml )

本文详细介绍了SpringBoot中application.yml的基础配置,如何映射到Java对象,以及配置文件在项目中的具体作用。还讨论了配置文件的加载顺序、环境切换和不同类型的配置文件如application.properties、bootstrap.yml等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、application.yml 基础配置

是 Spring Boot 中用于配置应用程序属性的主要配置文件之一。这个文件通常用于配置应用程序的一般性属性,包括数据库连接、日志级别、端口号等。下面是一些常见的在 application.yml 中配置的示例:

# 服务器端口
server:
  port: 8080

# 数据库连接配置
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydatabase
    username: root
    password: password
    driver-class-name: com.mysql.cj.jdbc.Driver

# 日志级别
logging:
  level:
    root: INFO
    com.example.mypackage: DEBUG

# 应用程序自定义属性
myapp:
  name: My Spring Boot App
  version: 1.0

上述示例展示了一些常用的配置项,但根据应用程序的需求,你可以在 application.yml 中配置各种属性。Spring Boot 非常灵活,可以根据属性的前缀识别属性,并将其绑定到对应的 Java 对象上,以方便在代码中使用。

需要注意的是,application.yml 文件采用 YAML(YAML Ain’t Markup Language)语法,它使用缩进和冒号来表示层次关系。因此,正确的缩进对于保持文件的结构是很重要的。

二、配置文件在项目中起到的具体作用

在 Spring Boot 中,可以通过属性文件(比如 application.yml 或 application.properties)来配置应用程序的属性。这些属性可以直接映射到 Java 对象中,从而在代码中方便地使用

1、@ConfigurationProperties 注解

  • 提供了一种方便的方式,可以将配置文件中的属性映射到 Java
    对象的字段上。这样做的一个常见的方式是使用属性的前缀来进行匹配。以下是一个简单的示例:

    # application.yml myapp:   database:
        url: jdbc:mysql://localhost:3306/mydatabase
        username: root
        password: password 
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    @Component 
    @ConfigurationProperties(prefix = "myapp.database") public
    class DatabaseProperties {
        private String url;
        private String username;
        private String password;
    
        // Getters and setters
    
        // 可以在这里添加其他的业务逻辑 
    } 
    

    在这个例子中,DatabaseProperties 类的属性(urlusernamepassword)会与
    application.yml 文件中 myapp.database 下的属性相匹配。Spring Boot 会自动将这些属性值注入到
    DatabaseProperties 实例中。

    然后,你可以在其他组件中注入 DatabaseProperties,并直接使用其中的属性:

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service public class DatabaseService {
        private final DatabaseProperties databaseProperties;
    
        @Autowired
        public DatabaseService(DatabaseProperties databaseProperties) {
            this.databaseProperties = databaseProperties;
        }
    
        public void connectToDatabase() {
            String url = databaseProperties.getUrl();
            String username = databaseProperties.getUsername();
            String password = databaseProperties.getPassword();
    
            // 连接到数据库的逻辑...
        } 
    } 
    

    通过这种方式,你可以将配置文件中的属性映射到 Java
    对象上,并在代码中方便地使用这些属性。这种配置方式可以帮助你集中管理应用程序的配置,并提高代码的可维护性。

2、@Value 注解

  • 使用 @Value 注解可以直接将配置文件中的属性值注入到 Spring Bean 中的字段或方法参数上。
    @Value("${property.name}") private String
       propertyName;
    

3、Environment 对象

  • 通过 Environment 对象获取配置属性。

    @Autowired private Environment env;
       
    public void someMethod() {
       	String propertyValue = env.getProperty("property.name"); 
    }
    

4、 @PropertySource 注解引入外部属性文件

  • 使用 @PropertySource 注解可以在配置类中引入外部的属性文件。

    public class MyConfiguration {
        @Value("${custom.property}")
        private String customProperty;
    } 
    

5、@ConfigurationPropertiesScan 注解(Spring Boot 2.2+)

  • 这个注解允许在指定的包及其子包中扫描 @ConfigurationProperties 注解,无需显式声明
    @ConfigurationProperties 的 Bean。

    @ConfigurationPropertiesScan("com.example.config") 
    

这些方式都允许在应用程序中方便地访问配置文件中的属性值,开发者可以根据具体情况选择最适合的方式。

三、Spring Boot 的其他配置文件

在 Spring Boot 中,除了常见的 application.ymlapplication.properties 外,你还可以使用其他自定义的配置文件。Spring Boot 提供了以下几种常见的配置文件:

1、application.properties/application.yml

  • 默认的主配置文件,Spring Boot 应用会自动加载该文件。存放应用程序的主要配置。

2、application-{profile}.properties/application-{profile}.yml:

  • 可以根据不同的环境配置不同的属性文件,{profile} 表示环境名称。
    例如,application-dev.properties 用于开发环境,application-prod.properties
    用于生产环境。

3、bootstrap.properties/bootstrap.yml:

  • 用于 Spring Cloud 应用,是 Spring Cloud Config 服务的默认配置文件。
    存放一些启动时需要优先加载的配置,比如连接到 Config Server 的配置。

4、application-{profile}.properties/application-{profile}.yml:

  • 可以根据不同的环境配置不同的属性文件,{profile} 表示环境名称。 例如,application-dev.properties
    用于开发环境,application-prod.properties 用于生产环境。

5、application-{label}.properties/application-{label}.yml:

  • 用于 Git 和配置服务器的外部化配置,{label} 表示 Git 的标签。
    例如,application-v1.properties 用于版本 1。

这些文件命名规范允许你根据不同的环境、配置标签或者配置文件类型组织和管理你的配置信息。Spring Boot 会根据上述规则自动加载相应的配置文件。

四、多配置文件使用哪个

Spring Boot 在启动时会加载默认的主配置文件,即 application.ymlapplication.properties。如果有不同环境的配置文件,如 application-test.ymlapplication-dev.yml,Spring Boot 会根据当前激活的环境来选择加载对应的配置文件。

1、设置 spring.profiles.active 指定激活环境

你可以通过在 application.yml 或 application.properties 中设置 spring.profiles.active 属性来指定激活的环境。例如:

spring:
  profiles:
    active: dev

上述配置表示激活 dev 环境,因此 Spring Boot 会加载 application-dev.yml 文件中的配置。

如果没有设置 spring.profiles.active 属性,Spring Boot 将默认使用主配置文件的配置。

2、命令行参数指定环境

除了通过属性文件来设置激活的环境外,你还可以通过命令行参数、系统属性、环境变量等方式来指定激活的环境。例如,通过命令行参数启动时指定环境:

java -jar your-application.jar --spring.profiles.active=dev

这样就会加载 application-dev.yml 的配置。

五、Springboot中配置文件的加载顺序

application.yml、application.properties和bootStrap.yml加载顺序

以jar包发布springboot项目时
默认会先使用jar包跟目录下的application.properties来作为项目配置文件。

如果在不同的目录中存在多个配置文件,它的读取顺序是:

1、config/application.properties(项目根目录中config目录下)
2、config/application.yml
3、application.properties(项目根目录下)
4、application.yml
5、resources/config/application.properties(项目resources目录中config目录下)
6、resources/config/application.yml
7、resources/application.properties(项目的resources目录下)
8、resources/application.yml

### RT-DETRv3 网络结构分析 RT-DETRv3 是一种基于 Transformer 的实时端到端目标检测算法,其核心在于通过引入分层密集正监督方法以及一系列创新性的训练策略,解决了传统 DETR 模型收敛慢和解码器训练不足的问题。以下是 RT-DETRv3 的主要网络结构特点: #### 1. **基于 CNN 的辅助分支** 为了增强编码器的特征表示能力,RT-DETRv3 引入了一个基于卷积神经网络 (CNN) 的辅助分支[^3]。这一分支提供了密集的监督信号,能够与原始解码器协同工作,从而提升整体性能。 ```python class AuxiliaryBranch(nn.Module): def __init__(self, in_channels, out_channels): super(AuxiliaryBranch, self).__init__() self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1) self.bn = nn.BatchNorm2d(out_channels) def forward(self, x): return F.relu(self.bn(self.conv(x))) ``` 此部分的设计灵感来源于传统的 CNN 架构,例如 YOLO 系列中的 CSPNet 和 PAN 结构[^2],这些技术被用来优化特征提取效率并减少计算开销。 --- #### 2. **自注意力扰动学习策略** 为解决解码器训练不足的问题,RT-DETRv3 提出了一种名为 *self-att 扰动* 的新学习策略。这种策略通过对多个查询组中阳性样本的标签分配进行多样化处理,有效增加了阳例的数量,进而提高了模型的学习能力和泛化性能。 具体实现方式是在训练过程中动态调整注意力权重分布,确保更多的高质量查询可以与真实标注 (Ground Truth) 进行匹配。 --- #### 3. **共享权重解编码器分支** 除了上述改进外,RT-DETRv3 还引入了一个共享权重的解编码器分支,专门用于提供密集的正向监督信号。这一设计不仅简化了模型架构,还显著降低了参数量和推理时间,使其更适合实时应用需求。 ```python class SharedDecoderEncoder(nn.Module): def __init__(self, d_model, nhead, num_layers): super(SharedDecoderEncoder, self).__init__() decoder_layer = nn.TransformerDecoderLayer(d_model=d_model, nhead=nhead) self.decoder = nn.TransformerDecoder(decoder_layer, num_layers=num_layers) def forward(self, tgt, memory): return self.decoder(tgt=tgt, memory=memory) ``` 通过这种方式,RT-DETRv3 实现了高效的目标检测流程,在保持高精度的同时大幅缩短了推理延迟。 --- #### 4. **与其他模型的关系** 值得一提的是,RT-DETRv3 并未完全抛弃经典的 CNN 技术,而是将其与 Transformer 结合起来形成混合架构[^4]。例如,它采用了 YOLO 系列中的 RepNCSP 模块替代冗余的多尺度自注意力层,从而减少了不必要的计算负担。 此外,RT-DETRv3 还借鉴了 DETR 的一对一匹配策略,并在此基础上进行了优化,进一步提升了小目标检测的能力。 --- ### 总结 综上所述,RT-DETRv3 的网络结构主要包括以下几个关键组件:基于 CNN 的辅助分支、自注意力扰动学习策略、共享权重解编码器分支以及混合编码器设计。这些技术创新共同推动了实时目标检测领域的发展,使其在复杂场景下的表现更加出色。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值