Java Spring引导-两个应用程序之间的对话

Java Spring引导-两个应用程序之间的对话,java,spring,api,spring-boot,Java,Spring,Api,Spring Boot,我猜这是非常基本的东西,但找不到任何有趣的东西 假设我有一个大型CRM/ERP Spring Boot应用程序。我将称之为“应用程序A”。它只在公司内部网上使用。出于安全原因,最好不要将其公开 现在,我想创建另一个更小的应用程序,比如博客或广告墙,称之为“应用程序B”。该应用程序的唯一目的是以博客或广告墙的形式向公众公开由a管理的一小部分数据 当然,A使用某种数据库引擎,覆盖Hibernate,并提供一些服务等等。棘手的是,我不想在应用程序B中使用Hibernate,只从应用程序A获取数据,而是

我猜这是非常基本的东西,但找不到任何有趣的东西

假设我有一个大型CRM/ERP Spring Boot应用程序。我将称之为“应用程序A”。它只在公司内部网上使用。出于安全原因,最好不要将其公开

现在,我想创建另一个更小的应用程序,比如博客或广告墙,称之为“应用程序B”。该应用程序的唯一目的是以博客或广告墙的形式向公众公开由a管理的一小部分数据

当然,A使用某种数据库引擎,覆盖Hibernate,并提供一些服务等等。棘手的是,我不想在应用程序B中使用Hibernate,只从应用程序A获取数据,而是使用应用程序A提供的服务远程获取数据(它们可以部署在具有不同域的同一台机器上)


总的来说,我的问题是;这是一个好主意吗?更重要的是,如何做到这一点?我知道Facade模式的存在,我知道您可以制作一个RESTAPI并使用json。但是有更好的办法吗?我对Java没有我想的那么深入。如有任何建议,将不胜感激

事实上,我认为这是最好的办法。而且,通过这种方式,我们可以调用第三方应用程序。只需从另一个应用程序调用一个应用程序,如下所示

假设应用程序A在本地主机端口5000中运行,应用程序B在本地主机端口8080中运行

应用程序A中的方法

@GetMapping("/call_a")
public String appA(){
    return "Superb";
}
app-B中的方法

@GetMapping("/call_b")
public String appB(){

    final String uri = "http://localhost:5000/call_a";

    RestTemplate restTemplate = new RestTemplate();
    String result = restTemplate.getForObject(uri, ResponseEntity.class);

    return result;
}

然后你调用应用程序B,它返回
Superb

的值。嘿,正如我看到的,你正在尝试在两个spring应用程序之间通话,方法如上面的答案所示,他们使用rest调用应用程序A

但你也可以尝试使用docker

并使用docker compose连接两个应用程序

例如:

version: '3'
services:
  appA:
    ports: 
      - "4001:8081"
  appB:
    ports: 
      - "4002:8082"
您需要在此处添加更多规格

现在,您可以从appB调用appA,从appA调用aapB,只需使用它们的名称即可


您可以停止外部访问。

这是一个被称为“微服务”的示例。事实上,最好的方法通常是只使用JSON REST API;Spring
@ResponseBody
/
@RestController
RestTemplate
使这种交流变得轻松。我知道,但我在想,比如通过不同的技术发送整个类,或者使用UDP是否会更好。如何保护json通信?这是一个问题还是发送和检查api令牌,或者是否有其他spring方式?搜索“spring安全和微服务”。最近有很多关于这个话题的讨论。我同意,一个只向外界公开你想要的数据(即应用程序B使用的数据)的微服务是最好的方法之一。您可以根据需要对其进行隔离和保护,而无需应用程序B直接公开应用程序A的元素