最近重新开始梳理一下SpringBoot的基础一些记录,有什么问题大家可以提出问题共同参考一下。
#我的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();
}
@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();
}
既然是直接获取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();
}
当然,如果需要编写配置类,一般都是用第三种方式,这种方式是日常使用的,其他两种作为了解就可以
#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获取配置文件的属性值就说这些,当然其中的很多推导对于很多人来说可能不是特别顺理成章,有点牵强吧,学习仍然尚浅,以后会继续补充,有什么问题可以共同探讨。