gpt4 book ai didi

java - 如何提高从 Oracle AQ 读取数据的 Spring Batch 的性能?

转载 作者:太空宇宙 更新时间:2023-11-04 09:43:49 25 4
gpt4 key购买 nike

我有一个 Spring Batch 代码,可以从 Oracle AQ 读取(出列)数据。

但只读取 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 有效负载的目的地指定有效负载工厂”,即使我设置了消息监听器,所以我放弃了该配置。

最佳答案

要使用 SpringBtach 从 Oracle AQ 读取数据,我使用 JmsTemplate。

这是我正在使用的配置示例:

    @Bean
public ConnectionFactory connectionFactory() throws JMSException, SQLException {
return AQjmsFactory.getQueueConnectionFactory(dataSource());
}


@Bean
public JmsTemplate jmsTemplate(ConnectionFactory connectionFactory) {
JmsTemplate jmsTemplate = new JmsTemplate();
jmsTemplate.setConnectionFactory(connectionFactory);
SimpleMessageConverter converter = new SimpleMessageConverter();
jmsTemplate.setMessageConverter(converter);
jmsTemplate.setSessionTransacted(true);
jmsTemplate.setDefaultDestinationName("YOUR_QUEUE_NAME");
return jmsTemplate;
}


@Bean
public DataSource dataSource() throws SQLException {
OracleConnectionPoolDataSource dataSource = new OracleConnectionPoolDataSource();
dataSource.setURL("jdbc:oracle:thin:@host:port:database");
dataSource.setUser("usr");
dataSource.setPassword("pwd");
return dataSource;
}

之后您可以使用 SpringBatch 中的 JmsItemReader

关于java - 如何提高从 Oracle AQ 读取数据的 Spring Batch 的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55656705/

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