java - Rserve / R 堆栈并行处理
问题描述
我正在构建一个 Java REST 应用程序,它通过我在 Ubuntu 上运行的 Rserve 调用 R 函数。我正在调用的 R 函数通过 RJDBC 数据库调用 Oracle,收集数据等。
根据我了解的文档,如果我在 linux 系统上运行 Rserve,我不需要在不同的端口上启动单独的实例,并且运行一个 Rserve 实例就足够了。
所以我正在创建一个这样的连接:
public static synchronized RConnection getConnection() throws RserveException {
if(connection == null || !connection.isConnected()) {
connection = new RConnection(HOST);
init(connection);
}
return connection;
}
对于 1 个用户来说一切正常,但同时,我得到了错误:
Error in .jcall("java/sql/DriverManager", "Ljava/sql/Connection;", "getConnection", :
ignoring SIGPIPE signal
我应该为每个呼叫创建单独的连接还是应该在一个连接中拨打电话?
解决方案
您应该为每个请求建立新的 rjdbc 连接(我认为初始化 rjava),因为请求是在分叉中处理的。并且 db 连接现在是 fork 安全的。
推荐阅读
- ios - 构建失败并显示“命令 PrecompileSwiftBridgingHeader 失败,退出代码为非零”
- laravel - 如何在 Laravel 中使非数据库模型具有两个属性
- android - 使用 react-native init 后如何在 expo 上运行 React-Native 应用程序?
- google-apis-explorer - 如何通过 Youtube Data API 获取 Youtube 频道页面上的“关于”部分详细信息?
- ios - 在 Apple Watch 模拟器中打开网页
- corda - 如何在通过 IntelliJ 运行 cordapp 时配置公证节点
- python-3.x - openGL 和 PyQt5 的问题
- express - 对 express.js 中的中间件排序感到困惑?
- spring-boot - 找到注释@EnableCircuitBreaker,但没有实现。你忘了包括一个开胃菜吗?
- python - sklearn中的随机状态意义