SpringBoot获取运行环境 获取静态配置 SpringBoot获取配置文件和属性值 springboot获取配置文件

本文介绍了如何在SpringBoot应用中使用Environment接口获取配置文件值,如server.port和spring.profiles.active,以及如何通过SpringApplication运行应用并获取ApplicationContext和Environment实例。

SpringBoot获取运行环境 获取静态配置 SpringBoot获取配置文件和属性值 springboot获取配置文件

使用 Environment 接口获取

使用 Environment.getProperty() 配置文件值

例如 获取当前 系统端口号的配置文件值 server.port

Environment 接口需要 获取Bean方式使用

final Environment environment = applicationContext.getBean(Environment.class);
		
// 服务端口
final String port = environment.getProperty("server.port");

Sysout.out.println(String.format("端口号:%s", port))

更多示例

import org.apache.commons.lang3.StringUtils;
import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ImportResource;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Repository;

import java.time.LocalDateTime;

@SpringBootApplication
public class Application{
    public static void main( String[] args ) {
	    
	    
	    final ConfigurableApplicationContext applicationContext = SpringApplication.run(Application.class, args);
		
	    final Environment environment = applicationContext.getBean(Environment.class);
		
	    final String profilesActive = environment.getProperty("spring.profiles.active");
		
		
	    // 服务端口
	    final String port = environment.getProperty("server.port");
		
	    // 服务访问路径
	    final String contextPath = environment.getProperty("server.servlet.context-path");

		
    }

  }

<think>好的,我现在需要解决用户的问题:如何在Spring Boot的启动类中读取yml配置文件的内容。用户希望得到具体的实现方式或示例。让我先回顾一下用户提供的引用内容,看看有没有相关的信息可以利用。 首先,用户提供的引用[1][2]提到,Spring Boot通过自动配置YamlPropertySourceLoader来加载application.yml文件到Environment中。这可能意味着可以通过Environment对象来访问配置属性。 引用[3][4]讨论了如何在静态方法中读取yml配置,其中提到了使用@EnableConfigurationPropertiesCommandLineRunner来将配置属性设置到系统属性中。这可能是一个可行的方法,尤其是在启动类中需要静态访问配置的情况。 引用[5]列出了几种加载自定义yml配置文件的方式,包括使用YamlPropertiesFactoryBean、YamlMapFactoryBean以及PropertySourceLoader。不过用户的问题是关于启动类读取主配置文件application.yml,所以可能不需要自定义的加载方式,但其中提到的@PropertySource可能不适用,因为它不支持yml文件。 现在,用户的具体需求是在启动类中获取yml配置的内容。可能的实现方式包括: 1. 使用Environment对象直接注入,然后在main方法中访问。但main方法是静态的,常规的依赖注入可能无法直接使用,需要考虑如何在静态上下文中获取Bean。 2. 通过CommandLineRunner或ApplicationRunner接口,在启动时执行代码,这时候可以获取到ApplicationContext,进而访问Environment或者配置Bean。 3. 使用@Value注解注入配置值到Spring管理的Bean中,但启动类本身的main方法是静态的,不能直接使用@Value,所以可能需要结合其他方法。 比如,用户引用[3]中的例子,通过CommandLineRunner将配置属性设置到系统属性中,然后在静态方法中使用System.getProperty()来获取。这可能是一个可行的方法。 另外,用户引用[4]中展示了一个示例,在main方法中调用ResourceBundleUtil.getYmlStringForActive方法来读取yml属性。但这个方法的具体实现可能需要自定义工具类,可能涉及到读取文件或使用Spring的Environment。 需要确认的是,在启动类的main方法执行时,Spring上下文是否已经初始化完成。因为SpringApplication.run()会启动上下文,所以在run之后,可以获取到ApplicationContext,进而获取Environment或者配置Bean。 例如,在main方法中,可以这样做: ```java public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(AppApplication.class, args); Environment env = context.getEnvironment(); String property = env.getProperty("some.property"); System.out.println(property); } ``` 这样可以直接在启动类中读取配置属性。或者,如果需要在static上下文中使用,可能需要将属性存储在静态变量中,比如在CommandLineRunner中设置: ```java @Bean public CommandLineRunner commandLineRunner(Environment env) { return args -> { String value = env.getProperty("key"); System.setProperty("key", value); }; } ``` 然后其他地方通过System.getProperty("key")获取。 不过用户可能更希望的是在启动类中直接获取,而不是通过静态变量。因此,综合来看,有两种主要方法: 1. 在main方法中,通过获取ApplicationContext后,直接读取Environment中的属性。 2. 使用CommandLineRunner或ApplicationRunner接口,在启动时执行代码获取配置。 此外,还可以使用@ConfigurationProperties将配置绑定到一个Bean,然后在启动类中注入该Bean。例如,定义一个配置类: ```java @ConfigurationProperties(prefix = "myapp") public class MyConfig { private String property; // getter and setter } ``` 然后在启动类中通过context.getBean(MyConfig.class)来获取配置值。 需要注意的是,启动类本身是一个配置类,所以可能需要使用@EnableConfigurationProperties来启用配置属性。 现在,需要将这些思路整理成一个清晰的步骤,并给出示例代码。同时,用户可能需要不同的实现方式,比如直接读取、通过配置类、或者在静态方法中使用。 可能还需要考虑如何确保在SpringApplication.run之后,Environment已经加载完毕,属性可用。此外,如果用户有自定义的yml文件,可能需要额外的配置,但根据问题描述,用户关注的是主配置文件application.yml。 最后,需要确保代码示例正确,比如正确使用@SpringBootApplication、@EnableConfigurationProperties,以及正确获取Bean或Environment。 总结可能的实现步骤: 方法一:在main方法中通过ApplicationContext获取Environment ```java @SpringBootApplication public class AppApplication { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(AppApplication.class, args); Environment env = context.getEnvironment(); String value = env.getProperty("my.property"); System.out.println("读取到的配置值:" + value); } } ``` 方法二:使用CommandLineRunner ```java @SpringBootApplication @EnableConfigurationProperties(MyConfig.class) public class AppApplication { public static void main(String[] args) { SpringApplication.run(AppApplication.class, args); } @Bean public CommandLineRunner runner(MyConfig config) { return args -> { System.out.println("配置属性:" + config.getProperty()); }; } } @ConfigurationProperties(prefix = "my") public class MyConfig { private String property; // getter and setter } ``` 方法三:将配置属性设置为系统属性,供静态方法使用 参考引用[3],在CommandLineRunner中设置系统属性: ```java @SpringBootApplication @EnableConfigurationProperties(MyConfig.class) public class AppApplication { public static void main(String[] args) { SpringApplication.run(AppApplication.class, args); String value = System.getProperty("my.property"); System.out.println("静态方法读取:" + value); } @Bean public CommandLineRunner running(MyConfig config) { return args -> { System.setProperty("my.property", config.getProperty()); }; } } ``` 需要注意的是,方法三中的System.setProperty需要在CommandLineRunner执行后才能生效,而main方法中的代码在SpringApplication.run之后执行,此时CommandLineRunner已经运行,所以可以获取到值。 此外,用户可能需要处理不同的环境配置,比如根据active profile读取不同的属性,这时候可以通过Environment的getActiveProfiles()方法来判断,但具体实现可能需要更复杂的逻辑。 最后,确保示例代码正确,包括注解的使用Bean的配置。同时,回答问题时要结构清晰,分点说明不同的方法,并给出代码示例。</think>在Spring Boot启动类中读取YML配置文件的常用方法有以下三种实现方式,以下将详细说明并附示例代码: --- ### 方法一:通过ApplicationContext直接获取Environment 在`main`方法中启动Spring Boot应用后,通过`ConfigurableApplicationContext`获取`Environment`对象直接读取配置: ```java @SpringBootApplication public class AppApplication { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(AppApplication.class, args); Environment env = context.getEnvironment(); String serverPort = env.getProperty("server.port"); String dbUrl = env.getProperty("spring.datasource.url"); System.out.println("服务端口:" + serverPort); System.out.println("数据库地址:" + dbUrl); } } ``` **适用场景**:需要快速读取少量配置项且无需复用的情况[^1]。 --- ### 方法二:通过@ConfigurationProperties绑定配置类 1. 定义配置类绑定YML中的配置项: ```java @ConfigurationProperties(prefix = "app") public class AppConfig { private String name; private String version; // 省略Getter/Setter } ``` 2. 在启动类中注入配置类并读取: ```java @SpringBootApplication @EnableConfigurationProperties(AppConfig.class) // 启用配置类 public class AppApplication { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(AppApplication.class, args); AppConfig appConfig = context.getBean(AppConfig.class); System.out.println("应用名称:" + appConfig.getName()); System.out.println("版本号:" + appConfig.getVersion()); } } ``` **YML配置示例**: ```yaml app: name: "MyApp" version: "1.0.0" ``` **优势**:类型安全,适合需要复用配置项的复杂场景[^3]。 --- ### 方法三:通过CommandLineRunner设置全局静态变量 若需在**静态方法**中访问配置,可通过`CommandLineRunner`将配置注入系统属性: ```java @SpringBootApplication @EnableConfigurationProperties(AppConfig.class) public class AppApplication { public static void main(String[] args) { SpringApplication.run(AppApplication.class, args); // 静态方法中读取系统属性 String staticName = System.getProperty("app.name"); System.out.println("静态变量读取:" + staticName); } @Bean public CommandLineRunner initStaticConfig(AppConfig appConfig) { return args -> { System.setProperty("app.name", appConfig.getName()); System.setProperty("app.version", appConfig.getVersion()); }; } } ``` **注意事项**:需确保`CommandLineRunner`在静态代码之前执行[^4]。 --- ### 配置加载流程说明 1. **启动阶段**:Spring Boot通过`YamlPropertySourceLoader`加载`application.yml`到`Environment`[^1]。 2. **绑定配置**:`@ConfigurationProperties`将配置内容映射到Java对象[^3]。 3. **动态读取**:通过`Environment`或`@Value`注解实时获取最新配置(支持动态刷新)。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值