目录导航
开发项目的时候经常会用到一些配置文件的信息,SpringBoot提供几种加载配置文件的方式
- [ ] 通过 Environment 加载
- [ ] 通过 @Value 加载
- [ ] 通过 @ConfigurationProperties 创建配置类加载配置文件信息
@PropertySource
@PropertySource 用于加载指定配置文件,SpringBoot 默认加载缺省全局配置文件为 /resource/application.properties,通常我们不会把所有配置项都放在缺省全局配置文件里,而是根据业务逻辑分开存放配置文件,这时候需要用到 @PropertySource 加载指定配置文件
spark.properties 配置
spark.spark-home: spark-home
@PropertySource 使用方法,java代码如下:
@PropertySource(value ={"classpath:/spark.properties"})
@RestController
public class TestController {
@Value(value = "${spark.spark-home}")
private String home;
@RequestMapping("/home")
public String Home() {
return home;
}
}
Environment
Environment 是一个通用的读取应用程序运行时的环境变量的类,可以读出.properties,命令行输入参数,系统属性,操作系统环境变量等。该类的的bean会被spring自动注入。当程序要调用此类时,直接用 @Autowired 引入即可。比如我们两个配置文件 application.properties 和 spark.properties
application.properties 配置
server.name: AppDemo
server.port: 5015
spark.properties 配置
spark.spark-home: spark-home
TestController 通过 @PropertySource 加载了spark.properties,
Environment 可以通过 key-value 键值对的方式获取到application.properties 和 spark.properties 的配置文件信息,java代码如下:
@PropertySource(value ={"classpath:/spark.properties"})
@RestController
public class TestController {
@Autowired
private Environment environment;
@RequestMapping("/hello")
public String Hello() {
String name = environment.getProperty("server.name");
return "Hello world " + name;
}
@RequestMapping("/home")
public String Home() {
return environment.getProperty("spark.spark-home");;
}
}
@Value
Value 用于获取配置文件中的某个值,不过 Value 注解只能给普通变量注入值(不能给静态变量注入值)
application.properties 配置
server.name: AppDemo
server.port: 5015
spark.properties 配置
spark.name: loh
@Value 使用方法,java代码如下:
@PropertySource(value = {"classpath:/spark.properties"})
@RestController
public class TestController {
@Value(value = "${spark.name}")
private String name;
@RequestMapping("/hello")
public String Hello() {
return "Hello, " + name;
}
}
@ConfigurationProperties 配置类
@ConfigurationProperties 是 SpringBoot 新加入的注解,主要用于配置文件中的指定键值对映射到一个Spring组件上,需要注意的是,如果配置实体类上只是用这一个 @ConfigurationProperties 注解,是没有把实体类注入 Spring 容器中的,需要配合 @Component 实体类注册为组件
使用 @ConfigurationProperties 需要在 pom.xml 添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
spark.properties 配置
spark.spark-home: sparkhome
定义配置类实体
@Component("sparkConfigBean")
@PropertySource(value = {"classpath:/spark.properties"})
@ConfigurationProperties(prefix = "spark")
public class SparkConfigBean {
private String sparkHome;
public String getSparkHome() {
return sparkHome;
}
public void setSparkHome(String sparkHome) {
this.sparkHome = sparkHome;
}
}
java代码调用
public class TestController {
@Autowired
private sparkConfigBean sparkConfigBean;
@RequestMapping("/home")
public String Home() {
return sparkConfigBean.getSparkHome();
}
}