diff --git a/content/zh/projects/sofa-boot/sofa-ark-spring-boot-demo/index.md b/content/zh/projects/sofa-boot/sofa-ark-spring-boot-demo/index.md index 0da8240e9..f2922a147 100644 --- a/content/zh/projects/sofa-boot/sofa-ark-spring-boot-demo/index.md +++ b/content/zh/projects/sofa-boot/sofa-ark-spring-boot-demo/index.md @@ -12,6 +12,8 @@ aliases: "/sofa-boot/docs/sofa-ark-spring-boot-demo" 5. 如何执行 Spring Boot 业务应用 6. 多 Host 与单 Host 模式 7. 如何动态卸载 Spring Boot 业务应用 +8. 日志配置 +9. 其它最佳实践 ## 1. 简介 @@ -53,7 +55,7 @@ aliases: "/sofa-boot/docs/sofa-ark-spring-boot-demo" spring-boot-ark-biz biz - + true @@ -86,7 +88,23 @@ aliases: "/sofa-boot/docs/sofa-ark-spring-boot-demo" ``` -### 2.2 打包 +### 2.2 修改 Spring Boot 启动类 + +由于配置了 declaredMode,需要让模块导入资源时,优先从模块里查找,因此需要配置业务应用的资源加载器,定制化启动 Spring Boot 业务应用,如下: + +```java +public static void main(String[] args) { + SpringApplicationBuilder builder = new SpringApplicationBuilder(SpringBootArkBizApplication.class).web(WebApplicationType.SERVLET); + + // set biz to use resource loader. + ResourceLoader resourceLoader = new DefaultResourceLoader(SpringBootArkBizApplication.class.getClassLoader()); + builder.resourceLoader(resourceLoader); + // run springboot application. + ConfigurableApplicationContext context = builder.build().run(args); + } +``` + +### 2.3 打包 首先,使用 maven 打包业务应用,如下: @@ -340,4 +358,24 @@ logging.file.path=./logs ## 7. 如何动态卸载 Spring Boot 业务应用 -目前 Spring boot 不支持动态卸载。如果要动态卸载,需要注册一个卸载的事件handler,请参考 sofaboot 的代码:[SofaBizUninstallEventHandler](https://github.com/sofastack/sofa-boot/blob/master/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/main/java/com/alipay/sofa/runtime/SofaBizUninstallEventHandler.java)。 \ No newline at end of file +目前 Sofa Boot 支持动态卸载,而 Spring boot 不支持动态卸载。如果要动态卸载,需要注册一个卸载的事件handler,请参考 sofaboot 的代码:[SofaBizUninstallEventHandler](https://github.com/sofastack/sofa-boot/blob/master/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/main/java/com/alipay/sofa/runtime/SofaBizUninstallEventHandler.java)。 + +同理,如果业务应用卸载时存在资源未释放情况,可以注册一个监听模块卸载事件或者 spring 上下文关闭事件,来动态释放 socket 和 定时任务以及类似的例如缓存、线程池等。 + +## 8. 日志配置 + +- logback 框架配置日志参数 + +一般而言,建议业务应用使用 application.properties 配置日志参数,**不要写在 logback-spring.xml 中**。因为业务应用使用的 LoggerContext 是宿主应用的 LoggerContext(由宿主的类加载器加载),LoggerContext 只会在初始化时读取一次宿主应用的 logback-spring.xml,所以业务应用即使配置了 logback-spring.xml 也不会被读取。 + +- 切换至 log4j2 框架 + +排除项目各项依赖中的 logback 依赖,添加 log4j2依赖。 + +- SOFAArk 容器日志 + +参考 [Ark 日志说明](../sofa-ark-ark-log) 和 [配置文档](../sofa-ark-ark-config). + +## 9. 其它最佳实践 + +建议 Spring Boot 业务应用 使用的 Spring Boot 版本和 Spring Boot 宿主应用保持一致。SofaArk 不支持业务应用和宿主应用使用启动框架的不同版本,也不建议用这种使用方式。 \ No newline at end of file