我使用SpringBootAdmin来监视我的springboot应用程序,它非常好。但我需要先启动SpringBoot管理服务器,然后启动包含SpringBoot客户端的应用程序。
有没有办法将Spring Boot服务器包含到我的Spring Boot应用程序中,使它们看起来像一个应用程序,这样我就可以启动我的应用程序,然后服务器启动,客户端注册到服务器。最终目的是我的应用程序在端口8080上运行,而spring boot admin在端口8081上运行。
我已经检查了这个线程:如何在同一个应用程序中运行SpringBootAdmin客户端和服务器,但它不包含任何细节,我无法用可能的解决方案实现。
PS:我知道我可以打包spring boot管理服务器,然后编写开始代码。先启动服务器,然后启动我的应用程序,但这不是一个很好的解决方案。
有人能帮忙吗?
SpringBoot版本:2.3.4。发布Spring启动管理版本:2.3.0
从技术上讲,这应该可以将两者集成到一个应用程序中,但恐怕您很快就会遇到问题。
但是让我们试试看。。。
参考:概念证明GitHub
这种方法的问题:
8080
上的客户端,端口8081上的管理服务器
我们可以使用
配置文件
来分离多个配置文件,以便利用特定于配置文件的文件
应用程序客户端。性质
server.address=localhost
spring.boot.admin.client.url = http://localhost:8081/
management.endpoints.web.exposure.include = *
management.endpoint.health.show-details= always
spring.application.name=client-app
spring.boot.admin.client.instance.name=client-app
application-admin.properties
server.address=localhost
server.port=8081
人口应用
public class DemoApplication {
public static void main(String[] args) throws Exception {
SpringApplication admin = new SpringApplication(DemoAdminServer.class);
admin.setAdditionalProfiles("admin");
admin.run(args);
SpringApplication client = new SpringApplication(DemoClient.class);
client.setAdditionalProfiles("client");
client.run(args);
}
}
@EnableAdminServer
@Configuration
@EnableAutoConfiguration
@Profile("admin")
class DemoAdminServer {
}
@SpringBootApplication
@RestController
@Profile("client")
class DemoClient {
@GetMapping
public String hello(){
return "Hello world!";
}
}
启动应用程序,我们应该很好。。。
客户端
- 管理服务器
如果您有两个独立的应用程序,那么在
客户端
中,您可以通过一个进程启动管理服务器
。
@SpringBootApplication
public class ClientApplication {
public static void main(String[] args) throws Exception{
startAdminServer();
SpringApplication.run(DemoApplication.class, args);
}
static void startAdminServer() throws Exception {
new ProcessBuilder()
.redirectErrorStream(true)
.command("cmd.exe",
"/c",
"java -jar path_to_your_admin_server.jar")
.start();
}
}
一个更简单的解决方案是让应用程序在容器中运行,最好将它们隔离,而不是将它们变成一个整体。
您可以使用docker构建应用程序(https://spring.io/guides/gs/spring-boot-docker/)
基本上,每个应用程序都有一个docker文件,如下所示:
FROM openjdk:8-jdk-alpine
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
并使用docker compose启动它们
version: '3.7'
services:
spring-boot-admin:
image: spring-boot-admin-image
container_name: spring-boot-admin
ports:
- 8081:8081
healthcheck:
test: "curl --fail --silent localhost:8081/actuator/health | grep UP || exit 1"
interval: 20s
timeout: 5s
retries: 5
start_period: 40s
spring-boot-client:
image: spring-boot-client-image
container_name: spring-boot-client
ports:
- 8080:8080
depends_on:
- spring-boot-admin
Dependes_on将确保您的spring boot客户端在spring boot admin运行正常后启动
探索spring多模块特性以解决您的用例。
将Spring Boot服务器作为父项目,并将所有Spring Boot客户端项目添加为单个模块。所有这些单独的模块都只是一个Spring Boot应用程序。您可以在任何不同的端口上打包和部署这些单独的模块。
我正在使用spring boot 2.5.1和Java 11。 我试图在同一个应用程序中创建SpringBoot管理服务器和客户端,但是当我启动它时,控制台中出现以下错误。 裁判:https://github.com/codecentric/spring-boot-admin 错误 未能将应用程序注册为Spring-boot-admin([http://localhost:8085/instanc
我正在探索将java web应用程序移动到Azure应用程序服务的可能性。应用程序on prem在启动时读取属性文件。 是否有可能将属性文件传递或放置到应用服务?如果没有,建议将此类遗留应用程序移动到Azure应用服务?
我想同步2个集合。如果服务器端有什么变化,连接的客户端就会更新。我有一个非常基本的问题。我现在需要复制我的java项目,并在一个项目中编程服务器,在另一个项目中编程客户端吗?但这听起来像是相当多不必要的工作。我不能在一个项目中实现这一切,然后在一个主项目中启动服务器和客户端吗?我需要线程吗?我有点纠结于最好的方法是什么。提前谢谢。
我想把我的项目换成基于spring的产品。 我的第一步是将我的java web应用程序从一个生成的WAR文件转换成一个独立的可执行jar,它由Spring引导驱动。 让我们从GITHUB获取一个开源Web应用示例。vaadinspringweb应用程序 网络。xml文件可以在这里找到。 根上下文文件可以在这里找到。 我希望有一些指导我执行转换。 我还提交了Spring启动项目中的一个问题。
我已经尝试了这篇简单的教程https://spring.io/guides/gs/consource-web-service/,它起作用了。 然后尝试连接到另一个SOAP服务,使用一个附加的和扩展的客户端类。似乎这两个客户机类都使用了相同的-class,这使得我首先添加的一个失败(未知的jaxb-context等)。如何确保客户端类使用正确的-class?
本文向大家介绍Rust 一个简单的TCP客户端和服务器应用程序:echo,包括了Rust 一个简单的TCP客户端和服务器应用程序:echo的使用技巧和注意事项,需要的朋友参考一下 示例 以下代码基于std :: net :: TcpListener上的文档提供的示例。该服务器应用程序将侦听传入的请求并发送回所有传入的数据,从而充当“回显”服务器。客户端应用程序将发送一条小消息,并期望包含相同内容的