全部产品
云市场

工程说明

更新时间:2020-03-30 11:21:51

框架背景

SOFABoot 基于 Spring Boot 框架开发,并依赖 Apache Maven 进行构建。SOFABoot 和 Spring Boot 版本对应关系,以及 JDK 和 Maven 版本要求如下:

SOFABoot 版本 Spring Boot 版本 JDK 版本 Maven 版本
3.x 2.0.3.RELEASE JDK 8+ 3.2.5 +

工程类型

SOFABoot 使用 Maven 作为构建工具来创建和管理工程,支持创建以下两种类型的工程:

  • SOFABoot Web:基于 Spring Boot 进行扩展的 Web 工程,通常用于需要 Web 页面展现的应用。另外,结合中间件 SOFAREST 服务,可提供基于 JAX-RS(Java API for RESTful Web Services) 标准的前后端分离解决方案。
  • SOFABoot Core:基于 Spring Boot 进行扩展的 Java 工程,通常用于实现无页面展现的后端服务。

工程结构

在开始使用 SOFABoot 之前,您可以通过本文先了解 SOFABoot 两种工程类型的目录结构:

为了更好的理解目录结构,本文将以 groupId=com.alipay.sofaartifactId=APPNAME 为例,在实际工程中,APPNAME 应为实际的应用名称。

Web 工程原型目录

Web 工程模型默认生成 endpointweb 两个模块:

  • endpoint 模块:SOFAREST 的服务模块,对外提供 SOFAREST 服务。
  • web 模块:包含 main 函数的启动模块,可以直接运行。另外,还包含全局配置文件、测试模块和静态资源等。

groupId=com.alipay.sofaartifactId=APPNAME 为例,使用 Maven 命令创建的 Web 工程目录结构如下:

  1. ├── app
  2. ├── endpoint
  3. ├── pom.xml
  4. └── src
  5. └── main
  6. ├── java
  7. └── com
  8. └── alipay
  9. └── APPNAME
  10. └── endpoint => SOFAREST 实践代码
  11. ├── constants
  12. ├── RestConstants.java
  13. └── URLConstants.java
  14. ├── exception
  15. ├── CommonException.java
  16. └── SofaRestExceptionHandler.java
  17. ├── facade
  18. └── SampleRestFacade.java
  19. ├── filter
  20. └── CommonContainerResponseFilter.java
  21. ├── impl
  22. └── SampleRestFacadeRestImpl.java
  23. ├── model
  24. └── DemoUserModel.java
  25. └── response
  26. ├── AbstractFacadeResp.java
  27. └── RestSampleFacadeResp.java
  28. └── resources
  29. └── META-INF
  30. └── APPNAME
  31. └── APPNAME-endpoint.xml
  32. └── web
  33. ├── pom.xml
  34. └── src
  35. ├── main
  36. ├── java
  37. └── com
  38. └── alipay
  39. └── APPNAME
  40. └── Slite2WebSpringBootApplication.java => 启动函数
  41. └── resources
  42. ├── META-INF
  43. └── APPNAME => Spring 配置文件存放处,放到指定的 APPNAME 目录下
  44. └── APPNAME-web.xml
  45. ├── config => 配置目录,详见「配置解决方案」
  46. └── application.properties => 应用的日志配置文件
  47. └── application-dev.properties
  48. └── application-test.properties
  49. ├── logback-spring.xml => 应用的日志配置文件
  50. └── static => WEB 工程的静态页面存放处
  51. └── index.html
  52. └── test => 应用的测试模块,内置启动了 Spring Boot,方便业务测试
  53. └── java
  54. └── com
  55. └── alipay
  56. └── APPNAME
  57. └── web
  58. └── test
  59. ├── base
  60. └── AbstractTestBase.java
  61. └── usercases
  62. └── SofaRestServiceTest.java
  63. └── pom.xml => 应用的 Maven 配置文件

说明:

  • 默认情况下,静态页面都存放至 src/main/resources/static 目录下以进行统一管理。
  • SOFABoot 的全局属性配置解决方案和日志配置解决方案,请参考 SOFABoot 技术栈的 配置解决方案
  • 应用的测试模块,在 web 模块的 src/test/java 目录下,测试用例包含一个测试基类(base)和一个测试类(usercases),测试类中启动了 Spring Boot 进行 SOFAREST 的简单功能测试。

Core 工程原型目录

根据实际应用名称,Core 工程模型会默认生成 {APPNAME}-facade{APPNAME}-service 两个模块:

  • facade 模块:定义应用的接口依赖包。
  • service 模块:包含 main 函数的启动模块,可以直接运行。另外,还包含全局配置文件和测试模块。以 groupId=com.alipay.sofaartifactId=APPNAME 为例,使用 Maven 命令创建的 Core 工程目录结构如下:
  1. ├── APPNAME-facade
  2. ├── pom.xml
  3. └── src => 当前应用用于分发给其他应用的接口依赖包
  4. └── main
  5. └── java
  6. └── com
  7. └── alipay
  8. └── APPNAME
  9. └── facade
  10. └── SampleService.java
  11. ├── APPNAME-service
  12. ├── pom.xml
  13. └── src
  14. ├── main
  15. ├── java
  16. └── com
  17. └── alipay
  18. └── APPNAME
  19. ├── Slite2SpringBootAPPNAMEApplication.java => 启动函数
  20. └── service
  21. └── SampleServiceImpl.java
  22. └── resources
  23. ├── META-INF
  24. └── APPNAME => Spring 配置文件存放处,放到指定的 APPNAME 目录下
  25. └── APPNAME-service.xml
  26. ├── config => 配置目录,详见「配置解决方案」
  27. ├── application-dev.properties
  28. ├── application-test.properties
  29. └── application.properties
  30. └── logback-spring.xml => 应用的日志配置文件
  31. └── test => 应用的测试模块,内置启动了 Spring Boot 方便业务测试
  32. ├── java
  33. └── com
  34. └── alipay
  35. └── APPNAME
  36. └── test
  37. ├── base
  38. └── AbstractTestBase.java
  39. └── usercases
  40. └── BeanTest.java
  41. └── resources
  42. └── test
  43. └── META-INF
  44. └── APPNAME
  45. └── test.xml
  46. └── pom.xml => 应用的 Maven 配置文件

说明

  • SOFABoot 的全局属性配置解决方案和日志配置解决方案,请参考 SOFABoot 技术栈的 配置解决方案
  • 应用的测试模块,在 service 模块的 src/test/java 目录下,测试用例包含一个测试基类(base)和一个测试类(usercases)。测试类中启动了 Spring Boot 进行 bean 的简单功能测试。

工程日志

默认情况下,SOFABoot 使用 SLF4J 作为日志门面,Logback 作为日志实现。本文将介绍日志的存放目录、中间件服务日志、应用日志,以及如何配置日志兼容性。

日志存放目录

对于 SOFABoot 框架,通过 config/application.properties 配置文件中的 logging.path 属性来配置日志输出位置。

  • SOFABoot 应用的默认日志输出位置为 ./logs
  • 在本地 IDE 运行时,日志文件输出在当前工程根目录的 logs 文件夹中。
  • 当应用发布部署到 SOFAStack 平台时,技术栈会在 /home/admin 目录下运行上传的 fat Jar 文件,此时日志文件输出在 /home/admin/logs 目录下。

说明:如无特殊需求,不建议修改日志目录的输出配置。

中间件日志

关于各个中间件的日志详细信息,参见 中间件日志

应用日志

假设用工程原型创建的工程, groupIdcom.alipay.sofaartifactIdAPPNAME,那么:

  • 输入的 artifactId 将会作为该应用的应用名即 APPNAME
  • 工程创建时自动生成的 logback-spring.xml 配置文件是当前应用的日志配置文件,当前应用的日志目录为 ./logs/APPNAME
  • 配置文件中默认配置了 common-default.logcommon-error.log 两个日志文件,分别对应当前应用的默认日志输出目录和错误日志输出目录。

关于应用的日志配置解决方案,可以参考 日志配置 文档。

日志兼容性

虽然 SOFABoot 默认使用 SLF4J + Logback 日志框架,但也支持使用 SLF4J + Log4j 2(推荐)或 SLF4J + Log4j。

Servlet 容器

SOFABoot 内嵌以下容器,开箱即用:

容器名称 Servlet 版本 Java 版本
Tomcat 9 4.0 Java 8+
Tomcat 8 3.1 Java 7+
Tomcat 7 3.0 Java 6+
Jetty 9.3 3.1 Java 8+
Jetty 9.2 3.1 Java 7+
Jetty 8 3.0 Java 6+
Undertow 1.3 3.1 Java 7+