Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 驼峰-在处理器内持久化数据库连接_Java_Apache Camel - Fatal编程技术网

Java 驼峰-在处理器内持久化数据库连接

Java 驼峰-在处理器内持久化数据库连接,java,apache-camel,Java,Apache Camel,我希望在整个camel路由中保持数据库连接。我已经在路由上定义了名为stageDataSource的数据源。如何在处理器MyDBStageProcessor中使用相同的数据源或更确切地说是相同的数据库连接 我在MyDBStageProcessor中创建了一个新连接并将其关闭。但是,这会让我在Postgres中的连接变得最繁忙。因此,我想在整个路线上使用一个连接 我可以从Exchange对象获取数据库连接吗 .to("sql:select t.id, vsts_project_id

我希望在整个camel路由中保持数据库连接。我已经在路由上定义了名为stageDataSource的数据源。如何在处理器MyDBStageProcessor中使用相同的数据源或更确切地说是相同的数据库连接

我在MyDBStageProcessor中创建了一个新连接并将其关闭。但是,这会让我在Postgres中的连接变得最繁忙。因此,我想在整个路线上使用一个连接

我可以从Exchange对象获取数据库连接吗

        .to("sql:select t.id, vsts_project_id from table_name ?dataSource=stageDataSource")
        .to("log:?level=INFO&showBody=true")
        .split(body())
            .setHeader(Exchange.HTTP_METHOD, constant("GET"))
            .setHeader("Authorization", simple("Basic "+encodedToken))
            .setHeader("Content-Type", simple("application/json"))
            .setHeader("Accept", simple("application/json"))
            .setHeader("project_id",simple("${body[vsts_project_id]}"))
            .setHeader("team_id",simple("${body[id]}"))
            .setBody().simple("${body[vsts_project_id]}/${body[id]}")
            .setHeader(Exchange.HTTP_URI, simple(vstsServerURL + "/" + vstsCollectionName + "/${body}/_apis/work/teamsettings/iterations?api-version=5.0"))
            .to(vstsServerURL + "/" + vstsCollectionName + "/${body}/_apis/work/teamsettings/iterations?api-version=5.0").convertBodyTo(String.class)
            //.to("log:?level=INFO&showBody=true")
            .process(new MyDBStageProcessor())          
        .end()
        .to("log:?level=INFO&showBody=true");
---------------------------------------------------------------------------
public class MyDBStageProcessor implements Processor {
    @Override
    public void process(Exchange exchange) throws Exception {
        System.out.println("Inside MyDBStageProcessor");
        String input = (String) exchange.getIn().getBody().toString();
        //JSONObject jsonObject = new JSONObject(exchange.getIn().getBody());
        System.out.println("Body: " + input);
        JSONObject jsonObject = new JSONObject(input);
        DataSource dataSource = DBCPDataSourceFactory.getDataSource(); 
        Connection dbconn = dataSource.getConnection(); //how to use the same connection from the Camel route?
        try {
         // do some db work
        }
        catch(SQLException sqle) {
            sqle.printStackTrace();
        }
        finally {
            dbconn.close();
        }
    }
}



不要这样做,最好使用连接池hikari、c3p0等。。。。如果重用单个连接,您将遇到许多问题-连接对象不是线程安全的,连接超时等。

如果不这样做,最好使用连接池hikari、c3p0等。。。。重复使用单个连接时,您将遇到许多问题-连接对象不是线程安全的,连接超时等…谢谢,@Bedla!我已经将代码更改为使用hikari连接池,它似乎已经解决了这个问题。请将其添加为答案,以便接受。。