Spring——PropertySource详解

在Spring中,PropertySource通常用来加载外部配置文件中的属性,比如application.properties或者其他自定义的属性文件。PropertySource可以被Environment对象加载,并通过Environment来获取属性值。

Spring提供了多种实现PropertySource的方式,包括:

  • ResourcePropertySource:从资源文件中加载属性。
  • MapPropertySource:基于Map的属性源。
  • SystemEnvironmentPropertySource:从系统环境变量中加载属性。
  • SystemPropertiesPropertySource:从系统属性中加载属性。

代码如下:

首先,在application.properties配置文件中定义一些属性:

app.name=MyApp
app.version=1.0

然后,在Spring配置类中加载PropertySource:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.io.ClassPathResource;

@Configuration
public class AppConfig {

    @Bean
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
        PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
        configurer.setLocation(new ClassPathResource("application.properties"));
        return configurer;
    }
}

接下来,在应用程序中使用@Value注解来注入属性值:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class MyBean {

    @Value("${app.name}")
    private String appName;

    @Value("${app.version}")
    private String appVersion;

    public void displayProperties() {
        System.out.println("App Name: " + appName);
        System.out.println("App Version: " + appVersion);
    }
}

通过PropertySourcesPlaceholderConfigurer类加载了application.properties文件作为PropertySource,然后通过@Value注解将属性值注入到MyBean类中。

### Spring Boot Bootstrap 配置和启动流程详解 #### 1. 启动准备阶段 在Spring Boot应用程序启动过程中,`SpringApplication`类扮演着至关重要的角色。当创建`SpringApplication`实例时,会执行一系列初始化操作,包括设置默认属性、解析命令行参数以及注册监听器等[^1]。 ```java public static void main(String[] args) { SpringApplication app = new SpringApplication(MyApp.class); app.run(args); } ``` #### 2. 配置加载阶段 对于配置文件而言,在标准的Spring Boot应用中主要依赖于`application.properties`或`application.yml`来进行配置管理;而在基于Spring Cloud的应用场景下,则引入了`bootstrap.yml`作为早期加载机制的一部分[^4]。这使得某些关键性的全局配置可以在更早的时间点被读取并应用于后续的服务构建之中。 - **Bootstrap Configuration** `bootstrap.yml`主要用于微服务架构下的特殊需求处理,比如连接到远程配置中心(如Spring Config Server)、启用加密解密功能或是进行服务发现等工作。由于这类配置通常需要先于常规的应用程序上下文建立之前完成,因此它们会被优先加载,并且其内容不会受到本地`application.yml/properties`的影响。 - **Configuration Loading Order** 当涉及到多个配置源时,存在一个明确的加载顺序以决定最终生效的是哪一个版本的数据: 1. 默认值; 2. 来自外部系统的环境变量; 3. JVM系统属性; 4. 命令行参数; 5. `SPRING_APPLICATION_JSON`中的内联JSON数据; 6. ServletConfig初始化参数; 7. ServletContext初始化参数; 8. Java编程方式指定的位置上的配置文件(`@PropertySource`); 9. 包含在jar包内的`application-{profile}.properties/yml`; 10. 文件系统根目录下的`application-{profile}.properties/yml`; 11. 用户主目录下的`.config/spring-boot/appName/application-{profile}.yml`; 12. 类路径外的`application.properties/yml`; 13. 类路径内部的`application.properties/yml`; 上述列表越靠后的条目具有更高的优先级,意味着如果同一键名存在于不同的位置上,那么只有最靠近顶部的那个才会真正起作用[^3]。 #### 3. 应用运行阶段 一旦所有的准备工作都已完成——即所有必要的资源和服务都已经就绪之后,便会触发真正的业务逻辑执行环节。此时,由开发者编写的各类组件将会参与到具体的事务当中去,而这一切都是建立在一个已经完全准备好并且处于良好状态的基础之上了[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值