有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

SpringBoot是否可以在不同的Java版本(JDK1.8和JDK12)上运行一个应用程序?

我们正在开发带有支付网关(Spring Boot,Paytm)的web应用程序

我们将JDK12用于REST应用程序。在我们的应用程序中,我们集成了Paytm支付网关。如果我们在JDK12上运行我们的项目,那么除了支付网关之外,一切都正常。如果我将我的JDK版本降级到JDK1.8,那么一切都正常。但我不想降级我的JDK

是否可以在JDK1.8中运行部分代码,在JDK12中运行其他代码? 如果是,那怎么办


共 (2) 个答案

  1. # 1 楼答案

    一个JVM(以及一个web容器)不可能同时运行两个版本的Java

    以下是您的一些选择:

    • 运行两个单独的web容器(JVM),并让它们通过内部API进行通信。那可能是很多额外的工作

    • 将开发工作降级为Java8。这也可能需要大量的工作,甚至更糟。(您可能具有仅适用于Java 11+的依赖项。)

    • 尝试Java11而不是Java8。理由:

      • Java12不是Java的LTS版本,但Java11是。因此,Paytm网关软件更有可能在Java 11上运行

      • 对于您的应用程序来说,Java11和Java12之间的差异并没有那么大。看看Java12中新特性的总结,没有任何东西是你不能缺少的。。。直到下一个JavaLTS版本

    • 找出Paytm集成在更高版本的Java中不起作用的原因。在分发JAR文件的Github站点上,暗示“javakit8”版本支持java8和更高版本

      该问题可能与更高版本的Java中的SSL支持有关。也许您需要强制Java12使用较旧的TLS版本,以符合远程网关服务的期望

      你的日志文件中可能有线索;e、 g.记录消息、堆栈跟踪

    • 使用问题(?)的AoidJava绑定,并使用HttpClient或类似工具将Java代码更改为直接与Paytm Web API通信。(事实上,尝试从Java 11/12 JVM中查看是否可以做到这一点可能会帮助您解决Java绑定的问题;例如,如果这是SSL问题。

    • 联系Paytm支持

    • 寻找Paytm的替代方案,更好地支持Java 11/12

  2. # 2 楼答案

    不,这是不可能的。一个Java应用程序只能在一个Java版本上运行

    如果您真的不想降级到Java8,那么您唯一的选择就是将应用程序一分为二,并使这些应用程序通过某种API进行通信