全部产品

properties-属性值获取

本教程以 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}") 注入属性值。

代码逻辑,示例如下:

@Component
public class AppConfig{

   @Value("${app.config.first}")
   private String appConfigFirst;

    public String getAnnotationAppConfigFirst(){
        return appConfigFirst;
    }
}

将类配置为 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。示例如下:

      <!--通过@Value注入 sofa-config -->
      <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 对期待信息和实际获取的信息进行比对。

代码逻辑,示例如下:

//configed in application.properties
final String expectedValue ="FirstConfig";
//get AppConfig
AppConfig appConfig = applicationContext.getBean(AppConfig.class);


//get value by annnotation
//获取配置
String annotationValue = appConfig.getAnnotationAppConfigFirst();
//控制台输出
System.out.println("FirstAppConfigByAnnotation = "+ annotationValue);
//通过 TestCase 进行测试:
TestCase.assertEquals(expectedValue,annotationValue);

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

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

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

  1. 将该类配置为一个 Bean。具体的 2 种配置方式,参见 将类配置为 Bean 的 2 种方式

  2. 注入 Environment 对象。

  3. 通过 getProperty() 方法获取属性值。

代码逻辑,示例如下:

@Component
public class AppConfig{
   @Autowired
    private Environment environment;

    public String getEnvFirstConfigValue(){
         return environment.getProperty("app.config.first");
    }
}

验证获取的配置信息

操作步骤如下:

  1. application.properties 中,配置键值对: app.config.first=FirstConfig

  2. SOFABoot_coreDemo-service 模块下启动类 src/main/java/com/alipay/APPNAME/SOFABootSpringApplication.java 中,通过示例代码,可以实现下述目标:

    • 获取配置信息。

    • 向控制台输出获取的信息。

    • 通过 TestCase 对期待信息和实际获取的信息进行比对。

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

//configed in application.properties
final String expectedValue ="FirstConfig";
//get AppConfig
AppConfig appConfig = applicationContext.getBean(AppConfig.class);


//get value by environment
String envValue = appConfig.getEnvFirstConfigValue();
//控制台输出获取到的属性
System.out.println("FirstAppConfigByEnvironment = "+ envValue);
//通过 TestCase 进行测试
TestCase.assertEquals(envValue,annotationValue);