当前位置: 首页 > 知识库问答 >
问题:

如何通过驼峰路由从bean访问SQL连接?

卫仲卿
2023-03-14

我将数据插入到多个表中,我使用mybatis组件来实现这一点。在插入数据之前,我还需要创建一个临时表。高层概述如下:

  1. 获取要插入的数据

步骤2到5应该是他们自己的单一事务,以防出现故障。我现在有这个:

from(initialEndpoint)
        .routeId("database-appender")
        .aggregate().expression(constant(true)).completionSize(100).aggregationStrategy(new LinkListAggregator())
        .transacted()
            .bean(CreateTmpLinksTable.class)
            .to("mybatis:prepareLinks?executorType=reuse&statementType=InsertList")
            .to("mybatis:insertLinks?executorType=reuse&statementType=InsertList")
            .to("mybatis:insertLinkSources?executorType=reuse&statementType=InsertList")
        .end()
        .log("Wrote at most ${body.size} links to the database")

CreateTmpLinksTable需要有权访问当前连接,这样临时表的创建就不会在不同的事务中发生(如果有关系,以PostgreSQL为目标)。

我目前有:

public class CreateTmpLinksTable {
    public void createImportTable(Exchange exchange) throws SQLException {
        final Connection conn = exchange.getIn().getHeader("TransactionConnection", Connection.class);
        try (final Statement stat = conn.createStatement()) {
            stat.execute("CREATE TEMPORARY TABLE tmp_links(" +
                    "url text, hostname text, service media, service_id bigint, user_id bigint, screen_name text, harvested_at timestamp with time zone, body text" +
                    ") ON COMMIT DROP");
        }
    }
}

我也没有设置我的交易管理器。我怀疑我必须找到交易管理器,以便正确参与交易。

问题:

>

  • 如何从常规bean中获取事务管理器?是否只需要获取上下文,然后从上下文中通过注册表获取管理器?

    有没有更好的方法来做我需要的事情?我至少可以看到一个:将所有的责任都转移到一个豆子里,在那里做工作。还有其他方法吗?

    注意:我正在学习Camel,我喜欢只使用代码。一旦我知道了一切是如何联系在一起的,我就可以把这些知识转移到Spring上。

  • 共有1个答案

    韩高峯
    2023-03-14

    Q1,如果您可以将bean实例传递到camel路由,那么您可以自己设置事务管理器,否则您必须使用注册表来查找事务管理器实例。

    问题2:如果需要管理其他资源,可以将数据库更新工作包装在一个bean中,并在camel中使用事务DSL。

     类似资料:
    • 关于ApacheCamel的简短问题。我有以下场景,其中我的服务器接收jms消息,然后转换为csv文件,然后插入DB。为此,我有两个bean: xml2csv 我使用路由像: 当"路由"一个文件从-到,它是移动像一个消息?或者把问题放在不同的地方,ApacheCamel是否获取一个文件,将其包装为消息,并将其路由到bean或组件? 我的理解是正确的还是错误的。

    • 我正在尝试以骆驼路线记录交换或尸体,如下所示: 这张照片是空白的,比如“身体:”。但是,通过传递以下参数,在同一路径中调用某些处理器: 如果要查看exchange的内容,如何从camel路由记录exchange/body?

    • 要求:我们在java应用程序中创建一个数据库连接。我们需要在整个Java应用程序上通过相同的连接运行所有语句。问题:一旦在骆驼路由中传递创建的数据源,它显然会创建一个新的连接。 我正在使用一个数据源对象来创建到Oracle数据库的连接。关于这一点,我做了几个陈述。 作为第二部分,我使用为我的骆驼路线创建的数据源 在我的路径中,我使用一个bean来创建一个查询,最终到达我的数据库。 所以在这种情况下

    • 我在运行elasticsearch的服务器上通过80代理了端口9200。我有一个骆驼路由,需要将文档索引到此服务器。 camel elasticsearch插件是否支持该功能?ie通过非9300端口访问弹性搜索? 我知道端口9300使用本机elasticsearch传输协议。 我的选择是什么?我可以通过apache代理9300吗?我不确定这是否有效。 还是camel elasticsearch插件

    • 我试图通过驼峰路由将消息放到Weblogic JMS中的队列中。 我的目标是最终配置一个Route以使用来自jms队列的消息,我将早期Route的数据发布到该队列。 这是我的配置: 我的路线如下所示: 我尝试执行此路由时遇到此异常: 我按照以下过程创建了此处提到的队列:https://blogs.oracle.com/soaproactive/entry/how_to_create_a_simpl

    • 问题内容: 我开始按照Android所没有使用的教程进行操作,并得到以下信息: 我想这可以归结为几个问题: 我没有创建自己的信任库,但是在网上搜索教程和其他内容时,不确定如何创建信任库。有没有一种方法可以创建或修改信任库以在其中存储所需的证书?(如果有任何不同,我使用的是自签名证书) 如何使SSL握手顺利进行?现在,我得到的错误是: 老实说,我真的不明白这意味着什么。 我需要在Android设备上