从技术上讲,这应该可以将两者集成到一个应用程序中,但恐怕你很快就会遇到问题。
但是让我们试一试...
参考: 概念证明GitHub
这种方法的问题:
- 在启动时启动 2 个服务器:
client 端口 8080 和 admin-server 端口 8081
- 客户端和服务器应该有单独的配置
让我们从配置开始
我们可以使用profile 分隔多个配置,这样我们就可以利用Profile Specific Files
application-client.properties
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
使用正确的配置文件启动服务器和客户端。
DemoApplication
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!";
}
}
启动应用程序,我们应该会很好......
如果您有两个单独的应用程序,那么在您的client 中,您可以通过一个进程启动admin-server。
@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();
}
}