全部产品
云市场
云游戏

properties-属性值获取

更新时间:2020-06-11 17:41:15

本教程以 SOFABoot Core 工程为例,示范如何获取 resources/config/application.properties 中配置的属性信息。其他类型的 SOFABoot 工程也是采用类似方法,不再一 一赘述。

前置条件

  • 点击 下载示例工程
  • 用 IDE 打开主 pom.xml 所在文件夹。用 IDE 打开工程的更多详情,可参考 SOFABoot 快速开始

    说明:一个没有引入任何中间件的 SOFABoot 工程就是一个标准的 Spring Boot 工程。关于 Spring Boot 的学习可以 参考这里

获取 properties 配置信息

通过 mvn 命令生成工程原型后,可以通过下述操作获取 properties 配置的属性:

  • 通过 @Value 注解来加载对应的配置属性。
  • 通过注入的方式来获取配置属性。

通过 @Value 注解来加载对应的配置属性

对于 application.properties 中的属性值,如果有某个类需要获取对应值,操作步骤如下:

  1. 将该类配置为一个 Bean。
  2. 通过 @Value("${属性key}") 注入属性值。

代码逻辑,示例如下:

  1. @Component
  2. public class AppConfig {
  3. @Value("${app.config.first}")
  4. private String appConfigFirst;
  5. public String getAnnotationAppConfigFirst() {
  6. return appConfigFirst;
  7. }
  8. }

将类配置为 Bean 的 2 种方式

以上述 AppConfig 为例:

  • 方式 a:在待配置类上加一个 @Component 注解即可。

    • SOFABoot 基于 Spring boot,不需要再声明包扫描标签 <context:component-scan base-package="com.alipay.APPNAME">
    • 在 SOFABoot 的启动函数 SpringBootSpringApplication 中,已添加了注解 @org.springframework.boot.autoconfigure.SpringBootApplication。通过这个注解可以自动配置包扫描路径。
  • 方式 b 操作步骤示例如下:

    1. 删除 @Component 注解。
    2. 在工程的配置文件中,例如 SOFABoot_coreDemo-service 模块下 src/main/resources/META-INF/SOFABoot_coreDemo/SOFABoot_coreDemo-service.xml 中配置这个 Bean。示例如下:
      1. <!-- 通过 @Value 注入 sofa-config -->
      2. <bean id="appConfig" class="com.alipay.APPNAME.configuration.AppConfig"/>

验证获取的配置信息

操作步骤如下:

  1. application.properties 中,配置键值对: app.config.first=FirstConfig
  2. SOFABoot_coreDemo-service 模块下 启动类 src/main/java/com/alipay/APPNAME/SOFABootSpringApplication.java 中,通过示例代码,可以实现下述目标:
    • 获取配置信息。
    • 向控制台输出获取的信息。
    • 通过 TestCase 对期待信息和实际获取的信息进行比对。

代码逻辑,示例如下:

  1. //configed in application.properties
  2. final String expectedValue = "FirstConfig";
  3. //get AppConfig
  4. AppConfig appConfig = applicationContext.getBean(AppConfig.class);
  5. //get value by annnotation
  6. //获取配置
  7. String annotationValue = appConfig.getAnnotationAppConfigFirst();
  8. //控制台输出
  9. System.out.println("FirstAppConfigByAnnotation = " + annotationValue);
  10. //通过 TestCase 进行测试:
  11. TestCase.assertEquals(expectedValue,annotationValue);

更多信息,参见 注解 @SpringBootApplicationSpring Boot 代码结构最佳实践

通过注入 Bean 来获取 properties 配置的属性值

通过注入 org.springframework.core.env.Environment 类型的 Bean 来获取 properties 配置的属性值,操作步骤如下:

  1. 将该类配置为一个 Bean。具体的 2 种配置方式,参见 将类配置为 Bean 的 2 种方式
  2. 注入 Environment 对象。
  3. 通过 getProperty() 方法获取属性值。

代码逻辑,示例如下:

  1. @Component
  2. public class AppConfig {
  3. @Autowired
  4. private Environment environment;
  5. public String getEnvFirstConfigValue() {
  6. return environment.getProperty("app.config.first");
  7. }
  8. }

验证获取的配置信息

操作步骤如下:

  1. application.properties 中,配置键值对: app.config.first=FirstConfig
  2. SOFABoot_coreDemo-service 模块下 启动类 src/main/java/com/alipay/APPNAME/SOFABootSpringApplication.java 中,通过示例代码,可以实现下述目标:
    • 获取配置信息。
    • 向控制台输出获取的信息。
    • 通过 TestCase 对期待信息和实际获取的信息进行比对。

获取配置信息的代码逻辑,示例如下:

  1. //configed in application.properties
  2. final String expectedValue = "FirstConfig";
  3. //get AppConfig
  4. AppConfig appConfig = applicationContext.getBean(AppConfig.class);
  5. //get value by environment
  6. String envValue = appConfig.getEnvFirstConfigValue();
  7. //控制台输出获取到的属性
  8. System.out.println("FirstAppConfigByEnvironment = " + envValue);
  9. //通过 TestCase 进行测试
  10. TestCase.assertEquals(envValue,annotationValue);