如何使用 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.dsystemd 注册

确保您使用以下插件构建您的应用程序(共享链接中的 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 文件完成 - 全部在文档中指定。

JARFILEAPP_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 微服务之间的通信?

如何构建 Spring Boot 微服务

Spring Boot - 如何在微服务之间进行通信?

如何使用Spring Boot/Spring Cloud 实现微服务应用

如何监视所有Spring Boot 微服务?

如何从 IntelliJ 运行/部署 Spring Boot 微服务到本地 Kubernetes 集群?