gpt4 book ai didi

java - Camel - 在处理器内保留数据库连接

转载 作者:行者123 更新时间:2023-12-02 09:37:04 25 4
gpt4 key购买 nike

我想在整个 Camel route 保持数据库连接。我在路线上定义了名为“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,...)。重用单个连接时,您会遇到很多问题 - Connection 对象不是线程安全的,Connection 超时等。

关于java - Camel - 在处理器内保留数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57418795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com