SpringBoot 之加载配置项

开发项目的时候经常会用到一些配置文件的信息,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();
    }
}

点赞

Leave a Reply

Your email address will not be published. Required fields are marked *