java - 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,...)。重用单个连接,你会遇到很多问题——连接对象不是线程安全的,连接超时等。
推荐阅读
- javascript - 查找一个国家/州的所有城市或从 JSON 数据中查找给定城市的州/国家
- qt - QML - 防止 MouseArea 的 positionChanged 信号在 ScrollView 中传播
- firebase - 如果我从存储中加载带有 url 的节点但我没有在 UI 上加载图像,Firebase 会收费吗?
- javascript - JS Regexp 在 url 中排除 .com 之后的正斜杠
- c# - 捕获直接写入 Windows 控制台的输出
- uitableview - tvOS 和分层 UITableView
- python - 声明的变量出现名称错误
- sql - OVER 子句在 SQL 逻辑处理顺序中的位置是什么?
- c - yacc定义的结构
- python - python,turtle,“onkeypress”不起作用