SpringBoot获取配置文件属性值

SpirngBoot学习记录-1.0-获取配置文件属性的方式

  • SpringBoot学习记录
    • 1:通过原始Spring的方式获取
    • 2:通过配置Spirng配置类使用@AutoWride注入Environment获取属性值
    • 3:通过@Value("${key}")实现获取属性值
    • 4:设置另外的配置文件,如db.properties,获取其中属性值则可以通过 @ConfigurationProperties
  • 结尾

SpringBoot学习记录

最近重新开始梳理一下SpringBoot的基础一些记录,有什么问题大家可以提出问题共同参考一下。

1:通过原始Spring的方式获取

  1. 首先通过以下代码可以看出,SpringBoot的启动主要@SpringBootApplication这个注解与SpringApplication这个类调用的run方法
#我的SpringBoot配置,简单测试
logging.level.root=info
@SpringBootApplication
public class Sb01HelloworldApplication{
 	public static void main(String[] args) {
		 SpringApplication.run(Sb01HelloworldApplication.class, args);
	}
}

2.我们进入源码找到run这个方法发现他的返回值是 ConfigurableApplicationContext而这个类又继承了ApplicationContext,这里大家就应该理解其实SpirngBoot与Spring的配置无二,仔细看下面代码

	/**
	*	进入run方法查看到的源码
	*/
	...
	public static ConfigurableApplicationContext run(Class<?> primarySource, String... args) {
		return run(new Class<?>[] { primarySource }, args);
	}
	....
	/**
	*	进入ConfigurableApplicationContext类的源码
	*/
public interface ConfigurableApplicationContext extends ApplicationContext, Lifecycle, Closeable {
	......
}

3.因此我们可以直接获取 run 方法的返回值,ConfigurableApplicationContext
通过这个类的对象也就可以直接通过 context.getEnvironment().getProperty(key)
的方法获取配置文件中的属性值

public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(Sb01HelloworldApplication.class, args);
        String property = run.getEnvironment().getProperty("logging.level.root");
        System.out.println("logging.level.root === " + property);
        run.close();
    }

2:通过配置Spirng配置类使用@AutoWride注入Environment获取属性值

  1. 既然说都是Spring的方式启动,则Environment也是初始化在Ioc容器中的,则可以通过注入的方式使得可以获取对象值,因此编写一个配置类,同时让Spring注入Environment,通过Environment的getProperty(key)获取属性值
@Component
public class ThisConfig {
    @Autowired
    private Environment environment;

    public String getLoggingLeavel(){
        return environment.getProperty("logging.level.root");
    }
}

2.则可以获取该bean去打印

 public static void main(String[] args) {

        ConfigurableApplicationContext run = 
        String property = run.getBean(ThisConfig.class).getLoggingLeavel();
        System.out.println("logging.level.root === " + property);
        run.close();
    }

3:通过@Value("${key}")实现获取属性值

既然是直接获取Spring配置文件中的一些属性值,则可以之直接通过@Value("${key}"),如下列代码

@Component
public class ThisConfig {

    @Value("${logging.level.root}")
    private String loggingLevel;

    public String getLoggingLeavel(){
        return this.loggingLevel;
    }
}

这样就可以通过 getLoggingLeavel 获取配置中的属性值,直接打印就可以了

    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(Sb01HelloworldApplication.class, args);
        String property3 = run.getBean(ThisConfig.class).getLoggingLeavel3();
        System.out.println("logging.level.root === " + property);
        run.close();
    }

当然,如果需要编写配置类,一般都是用第三种方式,这种方式是日常使用的,其他两种作为了解就可以

4:设置另外的配置文件,如db.properties,获取其中属性值则可以通过 @ConfigurationProperties

  1. 在Spring很早就移除 @ConfigurationProperties 其中的 localtions 这个属性,之前 localtions 可以直接指定扫描文件,Spring觉得一个类绑定一个文件不妥,所以移除了,这里就不说明这种方法了,只是提及一下。
  2. 创建db.properties,其中属性我就简单写了一条,方便显示
#db.properties
db.username = root

3.创建db的配置类
使用了 @ConfigurationProperties设置之后会获取该配置文件中以 db 开头会通过get,set,注入该类的属性,则实现自动配置,并且获取了属性

@Component
@ConfigurationProperties(prefix = "db")
@PropertySource("classpath:db.properties")
public class DBConfig {
	private String username;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    @Override
    public String toString() {
        return "DBConfig{" +
            "username='" + username + '\'' +
            '}';
    }
}

4.获取bean打印即可

@SpringBootApplication
public class Sb01HelloworldApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(Sb01HelloworldApplication.class, args);
        DBConfig bean = run.getBean(DBConfig.class);
        System.out.println(bean);
    }
}

结尾

文章到这就结束了,对于SpringBoot获取配置文件的属性值就说这些,当然其中的很多推导对于很多人来说可能不是特别顺理成章,有点牵强吧,学习仍然尚浅,以后会继续补充,有什么问题可以共同探讨。

你可能感兴趣的:(SpringBoot,获取配置文件属性,新手,配置文件,java,SpringBoot学习记录,#,SpringBoot基础)