问题标签 [camel-jdbc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1120 浏览

java - 如何在没有 Timer 的情况下使用 Camel JDBC 组件

我在我的项目中做 Apache Camel PoC。使用 Camel JDBC 组件时,我遇到了一个问题。

我可以使用 JDBC 组件从数据库中读取数据。但我需要始终使用 Timer 组件。根据 Camel 文档,JDBC 组件不能在 from() 语句中使用。我尝试在文档中给出的 from() 语句中使用 Direct 组件,但它不起作用。

下面是我的代码:

下面是控制台输出:

[main] INFO org.apache.camel.impl.DefaultCamelContext - Apache Camel 2.12.1 (CamelContext: camel-1) 正在启动 [main] INFO org.apache.camel.management.ManagedManagementStrategy - JMX 已启用 [main] INFO org .apache.camel.impl.converter.DefaultTypeConverter - 已加载 176 个类型转换器 [main] INFO org.apache.camel.impl.DefaultCamelContext - StreamCaching 未使用。如果使用流,则建议启用流缓存。在http://camel.apache.org/stream-caching.html查看更多细节[main] INFO org.apache.camel.impl.DefaultCamelContext - 路由:route1 开始并使用:Endpoint[direct://zh_ICS_Test] [main] INFO org.apache.camel.impl.DefaultCamelContext - 共有 1 条路由,其中1 开始。[main] INFO org.apache.camel.impl.DefaultCamelContext - Apache Camel 2.12.1 (CamelContext: camel-1) 在 0.798 秒内启动 [main] INFO org.apache.camel.impl.DefaultCamelContext - Apache Camel 2.12.1 ( CamelContext:camel-1) 正在关闭 [main] INFO org.apache.camel.impl.DefaultShutdownStrategy - 开始正常关闭 1 路由(超时 300 秒)[Camel (camel-1) thread #1 - ShutdownTask] INFO org. apache.camel.impl.DefaultShutdownStrategy - 路由:route1 关闭完成,从端点 [direct://zh_ICS_Test] [main] INFO org.apache.camel.impl 消费。

如果我使用 Timer 而不是 Direct 组件,则上面的代码有效。我不想总是使用 Timer,只需要执行一次我的查询。我正在使用带有 JDK7 的 Camel 2.12.1。

有人可以帮忙吗?

0 投票
1 回答
1010 浏览

apache-camel - 如何在骆驼 jdbc 端点中启用多个数据源?

我想为多个数据源启用骆驼负载均衡器。任何人请让我如何在骆驼 jdbc 端点中启用多个数据源。提前致谢!!

这是我的代码。在 defaultcamelcontext 中创建多个数据源。

我的路由构建器指向多个数据源:

我的要求是,如果数据源关闭,我的请求需要自动重定向/选择到 datasource1。请让我如何实现它。

0 投票
3 回答
840 浏览

spring - 使用准备好的语句时出现 Camel -Spring SQLException

使用 Camel 2.13.1 和 Spring 2.7.11 并在尝试使用 sql 组件运行更新查询时收到 SQL 异常。下面是如何将我的更新查询添加到路由中,并且我正在使用正文中的 java.util.Map 将输入参数值传递给该语句。

主要问题:如果我在准备好的语句中只有一个输入参数,那么它工作正常.. 如果我在下面的更新查询中有多个,那么它会因 sql 异常而失败

即使我使用骆驼JDBC也面临同样的问题

这是我一直看到的 SQL 异常..

JMS 消息侦听器的执行失败。引起:[ org.apache.camel.RuntimeCamelException - org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; 糟糕的 SQL 语法 []; 嵌套异常是 java.sql.SQLSyntaxErrorException: ORA-00942: 表或视图不存在 ]: org.apache.camel.RuntimeCamelException: org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; 糟糕的 SQL 语法 []; 嵌套异常是 java.sql.SQLSyntaxErrorException: ORA-00942: 表或视图不存在

注意:数据库连接和数据库表没有问题

0 投票
1 回答
5319 浏览

java - Camel - 使用 useMessageBodyForSql 进行骆驼 SQL 批量插入

我在这里的文档中读到

“如果批处理设置为 true,则入站消息正文的解释会略有变化——而不是参数迭代器,组件需要一个包含参数迭代器的迭代器;外部迭代器的大小决定了批量大小。”

“从 Camel 2.16 开始,您可以使用选项 useMessageBodyForSql 允许将消息体用作 SQL 语句,然后必须在带有键 SqlConstants.SQL_PARAMETERS 的标头中提供 SQL 参数。这允许 SQL 组件更动态地工作因为 SQL 查询来自消息正文。”

我有以下路线:

主体是与参数列表匹配的键/值映射。

这有效,但不如预期。

每一行都被一一插入,而不是预期的批量插入。这种选项组合甚至可能吗?

如果不可能,有什么替代方法可以做到这一点?

0 投票
2 回答
2415 浏览

apache-camel - Apache骆驼如何使用sql组件将地图值插入数据库

Apache骆驼如何使用SQL组件将地图值插入数据库

我的班级文件:


sql.properties 文件是:


Context.xml 是

问题是这只会向数据库插入一行,但文件包含 2000 行我怎么能做到这一点

0 投票
1 回答
232 浏览

jpa - Camel-JPA:没有向 JPA 组件发送命令消息的选项(如在 JDBC 组件中)

在 Camel-JDBC 组件中,我们可以将 select 语句作为主体发送到 jdbc 端点,该端点返回结果。

以下示例代码来自 Camel-JDBC 网站:

为什么 Camel-JPA 组件中不存在这样的选项?

使用 JPA 端点作为消费者将轮询数据库。但是,我想要的只是获取一次数据。

0 投票
1 回答
836 浏览

apache-camel - 骆驼jdbc内存不足异常

我正在尝试将数据从 postgres 摄取到另一个数据库,并且我正在使用 camel-jdbc 组件来执行此操作。我有一张大桌子,所以我想一次读取几行而不是整个桌子。所以我的路线如下所示(仅用于测试目的) from(fromUri).setBody("select * from table limit 10").to("jdbc://myDataSource?resetAutoCommit=false&statement.fetchSize=2").split( body()).streaming().process(test)

如上所示,出于测试目的,我一次只获取 10 行,并且我将 fetchSize 设置为 2 以一次只接收 2 行。但是,我仍然收到所有 10 行。当我从查询中删除“限制 10”时,我在 split 命令之前收到 Out of Memory 错误,它告诉我它试图将整个结果集加载到内存中。

我在这里错过了什么或者我做错了什么?

感谢帮助。

0 投票
2 回答
816 浏览

mocking - Camel isMockEndpointsAndSkip 不会跳过 jdbc 端点

我有一条在 jdbc 端点上结束的路由:

jdbc 端点是这样创建的:

在我的单元测试中,我想要“模拟并跳过”数据库:

我还尝试了其他模式:“jdbc:db”、“jdbc://db”(此字符串显示在日志中,是 toString 的输出)

但无论使用什么模式,数据库都会被调用。日志显示

最后将正确的(空)结果发送到模拟端点。并且模拟的 endpintmock:jdbc:dbmock:jdbc://db() 永远不会收到任何东西。

那么如何跳过这个 jdbc 端点呢?

以及如何获取对使用“*”等通配符创建的模拟端点的引用?

编辑

通过此设置,我还在日志中看到:

所以isMockEndpointAndSkip似乎有效?!但在我的情况下,jdbc 端点没有被跳过。

第二次编辑 - 尝试来自 Vimsha 的答案 不使用isMockEndpointAndSkip但提供 AdviceWithRouteBuilder 并没有帮助(我认为骆驼实现isMockEndpointAndSkip相同的方式)。我在日志中看到(使用建议的构建器 Vimsha):

除此之外,数据库仍然被称为模拟端点,没有看到任何交换。

这是详细的构建器:

0 投票
1 回答
1537 浏览

java - Apache Camel SQL批量插入需要很长时间

我正在使用 Apache Camel SQL 批量插入过程。

  1. 我的应用程序正在从包含大约 2000 个票证的 Active MQ 中读取票证。

  2. 我已将批次更新为 100。

  3. 我正在触发的查询如下:

    sql.subs.insertCdr= insert into subscription_logs(master_id,request_type,req_desc,msisdn,amount,status,resp_code,resp_desc,channel,transaction_id,se_mode,be_mode,sub_type,sub_timeleft,srv_name,srv_id,start_date,end_date,operator,circle,country,time_offset,retry_count,user_status,previous_state,se_reqrecvtime,se_respsenttime,be_reqsenttime,be_resprecvtime,cp_id,cp_name,sub_srvname,sub_srvid,msg_senderid,msg_text,call_back_url,call_back_resp,client_ip,se_sysIp,language,cp_callbackurlhittime,action,alert,notification_url,notification_resp) values(:#masterId, :#requestType,:#reqDesc,:#msisdnCdr,:#price,:#status,:#responseCode,:#reason,:#channel,:#transactionId,:#seMode,:#beMode,:#subType,:#subTimeLeft,:#serviceName,:#serviceId,:#subStartDate,:#cdrEndDate,:#operator,:#circle,:#country,:#timeOffset,:#retryCount,:#userStatus,:#previousState,:#seReqRecvTime,:#seRespSentTime,:#beReqSentTime,:#beRespRecvTime,:#cpId,:#cpName,:#subServiceName,:#subServiceId,:#shortCode,:#message,:#callBackUrl,:#callBackResp,:#clientIp,:#seSysIp,:#language,:#cpCallbackUrlHitTime,:#action,:#alert,:#notificationUrl,:#notificationResponse)

  4. SQL批处理路由定义如下:

    /li>
  5. 下面是我的java代码:

    /li>

现在的问题是当 ActiveMQ 中有大约 120 张票时,SQL 批处理应该已经开始将值插入到数据库中。但这需要更多的时间。当 ActiveMQ 中有大约 500 张票时,它开始插入过程。任何人都可以帮助优化插入过程吗?还是有其他方法?

0 投票
2 回答
1394 浏览

jdbc - Apache Camel JDBC 轮询和幂等性

我正在构建一个简单的骆驼路线,它应该不断地轮询一个表并将数据推送到 ActiveMQ 中。每个轮询应该只提取以前未提取的数据。我能想到的最好方法是跟踪最后成功处理的序列 id,然后选择序列 id 大于前一个的项目。

有没有标准的方法来做到这一点?