带Swing客户端的Spring Boot后端

时间:2019-10-08 09:44:36

标签: java spring swing spring-boot

我有一个设计问题:我在服务器中使用DB + Hibernate + SpringBoot作为后端,并在台式机上使用Swing客户端。

我正在为一个新项目考虑以下架构:

后端(可能在单独的服务器中):

  • SQL数据库
  • Spring Boot + Hibernate Java应用程序

前端:

  • Swing Java应用程序
  • 后来:移动应用;浏览器

我进行了一些搜索,但仍然有一些疑问,觉得我缺少一些东西。我最初考虑使用React作为前端。但这对我来说将花费太长时间,并且我已经优化了很多Swing组件(并且我的应用程序倾向于使用很多带有“适当”编辑的网格)

我搜索了Spring + Swing,但是发现的是关于在同一个JVM上运行所有内容。我认为分离它们可以使我(以后)使用相同的后端构建Mobile或Web前端。

总结一下:

  1. 在SQL db之上使用spring boot + hibernate创建后端服务

  2. 创建使用这些服务的Swing前端

  3. (后期)移动应用使用这些相同的服务

问题:

  1. 这是一个好方法吗?我看错了吗

  2. 如何在后端和前端之间“共享” POJO? (考虑将模型放在单独的库中);我不是说如何运输它们,而是要在两个项目中重复使用它们。

2 个答案:

答案 0 :(得分:2)

这是可能的。

  1. 我将使用Spring Boot创建后端应用程序,并使用Spring DATA访问数据存储。我会通过REST来提供服务。
  2. 要从您的Swing客户端访问REST,您必须使用某种REST客户端。我会推荐Spring RestTemplate,但有很多选择。
  

同步客户端执行HTTP请求,公开了一个简单的,   底层HTTP客户端库(例如)上的模板方法API   JDK HttpURLConnection,Apache HttpComponents等。

  1. 由于您将来需要移动支持,因此可以考虑创建一个Web客户端并使其跨平台(仅限浏览器)。

回答两个问题:

  1. 关于后端,因为Spring Boot是一个不错的选择,所以您会很好的。至于客户端,我个人今天不会选择Swing,因为它已经很老了,如果可以选择,则选择JavaFX 2或Web客户端。如果您是唯一的开发人员,并且由于自己精通,那么这可能是一个不错的解决方案。
  2. 您可以从服务器中为客户端共享POJO,作为包含为依赖项的api。但是,通常not recommended是共享POJO,而是在客户端生成它或只键入它们。在您的情况下,如果这是一个小项目,则可能没问题。做对您来说最容易的事情。

如果您还没有的话,我建议您开始使用Maven作为构建工具。

祝你好运。

答案 1 :(得分:1)

您的请求是完全有效的,因为您是Swing开发人员,并且您的方法绝对正确。

因此,让我们大致了解一下:您正在构建后端/前端产品/软件。

后端

您的后端将是将在服务器上运行的Spring应用程序,例如http://localhost:8080,用于向客户端提供请求。

您可能想在http://localhost:8080/api/上创建一个@RestController,以便将功能公开给您的Swing客户端。

摇摆客户

您的客户端将是在桌面上运行的Swing应用程序。

要将客户端连接到Spring应用程序,您现在需要在Swing应用程序中实现一项服务,该服务将调用Spring Web服务器并从中获取资源。

要实现此目标,可能存在以下选择:

  1. 为什么不使用普通Java?使用此tutorial来调用您的Spring服务。

  2. 来自Apache
  3. Http组件很常见。

  4. 启动您的应用程序! Spring API包括RestTemplate,您可以在Swing应用程序中使用该API来调用Spring后端并为桌面应用程序获取资源。

如您所见,这与React中的网站完全一样:

  • 您的网页是JFrame
  • 您在React中的JSX组件就是您的JPanels和组件
  • 您要将组件(JComboBox,JButton)上的动作侦听器连接到调用您的Spring后端的服务。
  • 然后,您将使用从Spring服务器获取的资源来更新应用程序状态。
  • 修剪并重复

因此,请放心,您的方法是正确的。您会发现人们选择了一种过时的技术,而对您感到愤怒,但实际上,谁在乎?

(我想补充一点,您比现在面对着将Javafx库与核心Java分离的JavaFX家伙要聪明得多)

一如既往...编码愉快!