SpirngBoot学习记录-1.0-获取配置文件属性的方式
SpringBoot学习记录
最近重新开始梳理一下SpringBoot的基础一些记录,有什么问题大家可以提出问题共同参考一下。
1:通过原始Spring的方式获取
- 首先通过以下代码可以看出,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获取属性值
- 既然说都是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
- 在Spring很早就移除 @ConfigurationProperties 其中的 localtions 这个属性,之前 localtions 可以直接指定扫描文件,Spring觉得一个类绑定一个文件不妥,所以移除了,这里就不说明这种方法了,只是提及一下。
- 创建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获取配置文件的属性值就说这些,当然其中的很多推导对于很多人来说可能不是特别顺理成章,有点牵强吧,学习仍然尚浅,以后会继续补充,有什么问题可以共同探讨。
1万+



被折叠的 条评论
为什么被折叠?



