全部产品
云市场

SOFABoot 教程

更新时间:2020-02-21 18:54:31

本教程以 SOFABoot Core 工程为例,示范如何进行全局配置及获取全局配置信息。其他类型的 SOFABoot 工程也是采用类似方法,不再一一赘述。

重要

Git 代码仓库因故暂无法访问。点击 下载示例工程

本教程要用的示例代码位于 middleware-v2/SOFABoot 文件夹下。

有关导入 IDE 的方法,请参考前序课程 SOFABoot 快速开始

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

全局配置

位于 service 工程目录下的 config/application.properties 是 SOFABoot 框架的全局配置文件。如果要在 SOFAStack 不同的工作空间中发布,需要进行多工作空间部署的配置,可参考 全局配置解决方案。本文重点介绍如何在用 mvn 生成的工程原型的基础上获取全局配置文件 application.properties 中的属性。

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

要获取 config/application.properties 中的配置,让需要获取配置的 Bean 通过 @Value 注解来加载对应的全局配置属性。您只要在需要获取配置的 Spring Bean 中使用 @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. }

说明

  • AppConfig 这个类需要配置成一个 Bean。如示例所示,只需为该配置类加一个 @Component 注解即可。
  • 另外,在基于 Spring Boot 的 SOFABoot 体系下,不需要再声明一个类似的标签 <context:component-scan base-package="com.alipay.APPNAME">,因为在 SOFABoot 的启动函数 com.alipay.APPNAME.Slite2SpringBootAPPNAMEApplication 中,类上加了注解 @org.springframework.boot.autoconfigure.SpringBootApplication。通过这个注解,Spring Boot 帮我们做了自动配置,其中就包括自动配置默认的包扫描路径为 com.alipay.APPNAME

如果不想通过注解的方式来自动配置,那么可以在工程的配置文件中配置这个 Bean,同时删除 @Component 这个注解,示例如下:

  1. <!-- 通过 @Value 注入 sofa-config -->
  2. <bean id="appConfig" class="com.alipay.APPNAME.configuration.AppConfig"/>

这样,com.alipay.APPNAME.configuration.AppConfig 这个 Bean 就可以获取配置信息了。我们配置在全局配置文件中的键值对为 app.config.first=FirstConfig,获取示例如下:

  1. //configed in application.properties
  2. final String expectedValue = "FirstConfig";
  3. //获取配置
  4. String annotationValue = appConfig.getAnnotationAppConfigFirst();
  5. System.out.println("FirstAppConfigByAnnotation = " + annotationValue);
  6. Assert.isTrue(annotationValue.equals(expectedValue));

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

通过自动注入 org.springframework.core.env.Environment 类型的 Bean

除上述方法外,我们还可以通过注入的方式来获取全局的配置属性。要获取 config/application.properties 中的配置,让需要获取配置的 Bean 自动注入一个 org.springframework.core.env.Environment 类型的 Bean 即可,示例如下:

  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. }

当然,需要获取配置属性的 Bean 可以通过注解或者 XML 的方式声明自己是一个 Bean。这样,AppConfig 这个 Bean 就可以获取配置信息了,获取示例如下:

  1. //configed in application.properties
  2. final String expectedValue = "FirstConfig";
  3. //get AppConfig
  4. AppConfig appConfig = applicationContext.getBean(AppConfig.class);
  5. String envValue = appConfig.getEnvFirstConfigValue();
  6. System.out.println("FirstAppConfigByEnvironment = " + envValue);
  7. Assert.isTrue(envValue.equals(expectedValue));

本地运行

  1. 在项目的根目录下执行 mvn clean install,会在 target 目录下生成一个可执行的 .jar 文件:APPNAME-service-1.0-SNAPSHOT-executable.jar
  2. 在服务器上运行 java -jar APPNAME-service-1.0-SNAPSHOT-executable.jar 或者在本地 IDE 中直接运行 main 函数即可。若控制台和 logs/APPNAME/common-error.log 没有错误输出,说明应用可以正常启动。

参见 本地编译运行

云端运行

参见 SOFABoot 发布应用

日志查看

查看 SOFABoot 启动日志,即查看日志目录 logs/APPNAME/APPNAME-default.log,内容参考如下:

  1. 2020-02-21 18:42:06.825 [main] INFO com.alipay.sofa.common.log - Sofa-Middleware-Log SLF4J : Actual logging.path is [ ./logs ]
  2. 2020-02-21 18:42:06.834 [main] INFO com.alipay.sofa.common.log - Sofa-Middleware-Log SLF4J : Actual binding is of type [ com.alipay.sofa.infra Logback ]
  3. 2020-02-21 18:42:06.877 [main] INFO com.alipay.sofa.common.log - Sofa-Middleware-Log SLF4J : Actual binding is of type [ com.alipay.sofa.rpc Logback ]
  4. 2020-02-21 18:42:06.961 [main] INFO com.alipay.sofa.common.log - Sofa-Middleware-Log SLF4J : Actual binding is of type [ com.alipay.sofa.healthcheck Logback ]

查看日志目录下的 logs/APPNAME/common-error 日志有无报错。如有报错,说明 SOFABoot 启动失败,根据错误提示解决问题直至没有报错。

参见 关于日志的更多信息