如何使用 Spring Boot 微服务 Extern log4j.properties 文件并将其作为 Linux 服务运行?
Posted
技术标签:
【中文标题】如何使用 Spring Boot 微服务 Extern log4j.properties 文件并将其作为 Linux 服务运行?【英文标题】:How to Extern log4j.properties file with Spring Boot Microservice and Run It As a Linux Service? 【发布时间】:2018-02-21 09:18:35 【问题描述】:有一个基于 Spring Boot (1.5.4.RELEASE) 的微服务,我将一个 jar 部署到 AWS EC 实例(Linux 环境)。现在,我还部署了一个外部 log4j.properties 文件,所以我必须像这样启动微服务:
java -jar myapp.jar -Dlogging.config=/path/to/log4j.properties
如何将此 Spring Boot 微服务配置为 Linux 服务,我可以使用这些标志启动和停止它:
sudo service myapp start | stop | status | restart
非常感谢。
【问题讨论】:
你需要编写一个java服务包装器。这个例子可能很有用。 jcgonzalez.com/linux-java-service-wrapper-example 这在docs.spring.io/spring-boot/docs/current/reference/html/…的官方文档中得到了很好的解释 希望你能在这里得到答案***.com/questions/21503883/… 您的问题是关于在 Linux 上停止和启动它、外部化属性还是两者兼而有之? 【参考方案1】:使用指向您的 springboot 应用程序的符号链接,您可以将其作为服务进行控制...
sudo ln -s /var/myapp/myapp.jar /etc/init.d/myapp
将application.properties
放入您的 myapp 文件夹中,您可以覆盖应用中捆绑的那个。这样您就不需要使用命令行开关。只需将日志配置的路径指定为属性键 logging.config
的值。
但请注意,此解决方案并不是真正的最佳实践。一旦您在生产环境中运行了一大堆服务,您可能更愿意采用类似于spring cloud config 的方式来进行外部化配置,并且您可能还希望将您的日志汇总到一个集中式服务中,以便对所有服务进行概览您的服务的日志在一个地方。
【讨论】:
请写一些解释。 @Jörg,但是我该如何写这部分(发出符号链接时):-Dlogging.config=/path/to/log4j.properties @PacificNW_Lover 感谢您再次耐心询问 - 请参阅我的更新【参考方案2】:根据spring-boot deployment,
完全可执行的 jar 可以像任何其他可执行二进制文件一样执行,也可以使用
init.d
或systemd
注册
确保您使用以下插件构建您的应用程序(共享链接中的 gradle 版本):
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
如 Jörg 所示,在 init.d 中创建一个符号链接:
sudo ln -s /var/myapp/myapp.jar /etc/init.d/myapp
那是简化版:)
对于您的问题,您需要自定义 init,这可以通过 conf
文件完成 - 全部在文档中指定。
除
JARFILE
和APP_NAME
外,可以设置 使用 .conf 文件配置。该文件应在 jar 旁边 文件并具有相同的名称,但后缀为 .conf 而不是 .jar。 例如,名为 /var/myapp/myapp.jar 的 jar 将使用 名为 /var/myapp/myapp.conf 的配置文件。
例如: myapp.conf
JAVA_OPTS=-Xmx1024M
LOG_FOLDER=/custom/log/folder
【讨论】:
以上是关于如何使用 Spring Boot 微服务 Extern log4j.properties 文件并将其作为 Linux 服务运行?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 OAuth2 保护 2 个 Spring Boot 微服务之间的通信?