首页 > 编程语言 >spring boot 项目实现调用python工程的方法

spring boot 项目实现调用python工程的方法

时间:2023-12-11 10:32:16浏览次数:38  
标签:Java ProcessBuilder python spring 代码 boot Python import new


在 Spring Boot 中调用 Python 脚本或工程,主要有以下几种方式:

1. 使用 ProcessBuilderRuntime 执行 Python 脚本

这是最直接的方法,使用 Java 的 ProcessBuilderRuntime.getRuntime().exec() 来执行 Python 脚本。

  • 优点:实现简单,无需额外依赖。
  • 缺点:处理输出和错误流可能较为繁琐,性能上不如直接在 JVM 内运行。
package com.oncloudsoft.zbznhc.ajpc.service;

import org.springframework.stereotype.Service;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

@Service
public class PythonScriptService {

	public String runPythonScript(String propertyJson) {
		try {
			ProcessBuilder processBuilder = new ProcessBuilder("python", "/home/sunyuhua/workspace/shbgit/zb-znhc/src/main/resources/python/identify_property.py", propertyJson);
			Process process = processBuilder.start();

			BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
			String line;
			StringBuilder output = new StringBuilder();
			while ((line = reader.readLine()) != null) {
				output.append(line);
			}

			int exitCode = process.waitFor();
			if (exitCode != 0) {
				// 处理非零退出代码
				return "Error executing script";
			}

			return output.toString();
		} catch (IOException | InterruptedException e) {
			e.printStackTrace();
			return "Error: " + e.getMessage();
		}
	}
}

2. Jython

Jython 是一个 Python 的 Java 实现,可以让你直接在 Java 虚拟机上运行 Python 代码。

  • 优点:可以直接在 Java 代码中运行 Python 脚本,无需创建额外的进程。
  • 缺点:Jython 只支持 Python 2.x,且不支持所有 Python 库。

3. 使用 Web 服务

将 Python 脚本或应用封装为一个 Web 服务,然后通过 HTTP 请求进行交互。

  • 优点:解耦合,Python 和 Java 应用可以独立部署和扩展。
  • 缺点:需要处理 HTTP 请求和响应,增加了网络通信的开销。

4. 使用消息队列

通过消息队列(如 RabbitMQ、Kafka)在 Java 和 Python 之间进行异步通信。

  • 优点:支持高并发,解耦合。
  • 缺点:增加了系统复杂性,需要维护消息队列。

5. 使用 gRPC 或 Thrift

使用 gRPC 或 Apache Thrift 进行跨语言的 RPC(远程过程调用)。

  • 优点:强类型,高效,适用于复杂的交互。
  • 缺点:需要定义和维护接口规范,实现相对复杂。

选择合适的方法

选择哪种方法取决于你的具体需求。对于简单的任务,直接使用 ProcessBuilderRuntime 可能就足够了。如果你的 Python 代码和 Java 代码需要频繁和紧密地交互,可能需要考虑 Jython(如果 Python 代码兼容 Python 2.x),或者实现一个 Web 服务。如果你的应用需要高并发处理能力,消息队列或 gRPC/Thrift 可能是更好的选择。


标签:Java,ProcessBuilder,python,spring,代码,boot,Python,import,new
From: https://blog.51cto.com/u_13171517/8768507

相关文章

  • SpringBootTest测试配置
    在使用SpringBootTest测试的时候,如果配置文件里面使用了属性判断,使用logback-spring.xml时,有下面的配置:<ifcondition='!property("spring.profiles.active").contains("dev")'><then><appendername="stash"class="......
  • 我用 AI 写的《JavaScript 工程师的 Python 指南》电子书发布啦!
    关于本书你好,我是luckrnx09,一名靠React恰饭的前端工程师,很高兴向你介绍我的第一本开源电子书《JavaScript工程师的Python指南》。本书的内容完全免费,开源地址:https://github.com/luckrnx09/python-guide-for-javascript-engineers为什么会有这本书2022年,ChatGPT引起了......
  • linux 开机自动启动python程序
    可以使用systemd服务来开机自动启用程序。假设要开机自动启动的python程序是:/opt/app.py可以创建一个systemd服务cd/etc/systemd/systemvimstart-python.service内容如下:[Unit]Description=PythonStartupServiceAfter=network.target[Service]ExecStart=/usr/b......
  • Python Numpy 数据分析常用数学运算
    Python的NumPy库是数据分析和科学计算的核心库之一,提供了广泛的数学运算功能,使得处理大型多维数组和矩阵运算变得简单高效。NumPy是进行数据分析和科学计算的基石,掌握其数学运算功能对于进行有效的数据处理和分析至关重要。本文主要介绍PythonNumpy中数据分析常用数学运算......
  • spring 整合 mybatis 遇到问题
    写在前面:本文章用于记录博主平时遇到的问题,步骤略粗糙,目的在于记录一边后续博主自己查找,如果能帮助到其他人更好。文章中用到的链接均为自行引入,侵删,谢谢(2I2Rc*@JY8)1、报错:Exceptioninthread"main"java.lang.IllegalArgumentException:Invalidvaluetypeforattribute'f......
  • Python 通过 akshare 轻松绘制股票中国平安K线图
    想通过Python和akshare绘制K线图,网上找了很多代码,放在Pycharm中都是无法正常运行绘制的,于是自己整理了下并调试成功。环境:python3.9(miniconda3)、Pycharm、Win10需要用的模块或者工具库:akshare(1.11.91)、pandas(2.1.1)、numpy(1.26.2)、matplotlib(3.8.2)、mplfinanc......
  • springboot031教师工作量管理系统-计算机毕业设计源码+LW文档
     摘要随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了教师工作量管理系统的开发全过程。通过分析教师工作量管理系统管理的不足,创建了一个计算机管理教师工作量管理系统的方案。文章介绍了教师工作量管理系统的系统分析部分,包括可......
  • Spring Bean的创建和初始化流程
    AbstractApplicatContext【refresh】点击到该方法中,直接看到方法最后的beanFactory.preInstantiateSingletons()方法:DefaultListableBeanFactory【preInstantiateSingletons】在 preInstantiateSingletons() 方法中,可以明显看到拿到了 beanDefinitionNames 列表,而这个......
  • 基于springboot的房屋租赁系统-计算机毕业设计源码+LW文档
    摘 要房屋是人类生活栖息的重要场所,随着城市中的流动人口的增多,人们对房屋租赁需求越来越高,为满足用户查询房屋、预约看房、房屋租赁的需求,特开发了本基于SpringBoot的房屋租赁系统。本文重点阐述了房屋租赁系统的开发过程,以实际运用为开发背景,基于SpringBoot框架,运用了Java......
  • 统信UOS/麒麟KYLINOS上安装python特定版本
    原文链接:统信UOS/麒麟KYLINOS上安装python特定版本hello,大家好啊!Python作为一种广泛使用的编程语言,其版本多样性给开发者带来了既便利又挑战的情况。不同的项目可能需要不同版本的Python,而在统信UOS/麒麟KYLINOS这样的操作系统上,如何灵活地管理和切换Python版本,就成为了一个值得探......