【发布时间】:2019-04-12 17:17:08
【问题描述】:
我有一个从 Oracle AQ 读取(出列)数据的 Spring Batch 代码。
但要读取 100 行,需要 4 分钟!
这个阅读器可能有什么问题? ¿如何提高性能?
这是我的自定义阅读器中用于使数据出队的代码:
final String queueOwner = "OWNER";
final String queueName = "QUE_NAME";
try (Connection aqconn = dataSource.getConnection()) {
aqconn.setAutoCommit(false);
Class.forName("oracle.AQ.AQOracleDriver");
AQSession aqSession = AQDriverManager.createAQSession(aqconn);
AQQueue queue;
AQMessage message = null;
AQDequeueOption deqOption = new AQDequeueOption();
AQObjectPayload payload;
Data data= new Data();
queue = aqSession.getQueue(queueOwner, queueName);
message = ((AQOracleQueue) queue).dequeue(deqOption, DataAq.getORADataFactory());
payload = message.getObjectPayload();
DataAq dataAq= (DataAq) payload.getPayloadData();
--Some validation
aqconn.commit();
aqSession.close();
return saldo;
}
我已经尝试过使用 JmsItemReader,但它总是给我这个错误“必须为具有 ADT 有效负载的目的地指定有效负载工厂”,即使我设置了消息侦听器,所以我放弃了该配置。
【问题讨论】:
-
为什么每次读取都打开事务/连接并关闭?
标签: java performance spring-batch oracle-aq