У меня есть код ниже java, где я пытаюсь получить данные, используя запрос выбора, а затем импортировать эти данные в json формате.
Проблема в настоящее время я получаю ошибку
ORA-02063: preceding line from ABSTP
; nested exception is java.sql.SQLException:
ORA-01555: snapshot too old: rollback segment number 14 with name "_SYSSMU14_1823253467$" too small
Эта ошибка, по-моему, из-за длительного выполнения запроса. Поскольку я не очень хорош в java, я хотел бы знать, есть ли в java какой-либо другой процесс для обработки транзакций, где я могу распределить транзакцию и выполнить этот запрос, или есть какой-либо другой способ, которым я могу обрабатывать такие транзакции в java код, чтобы избежать этой проблемы?
@Service
public class InformerSupp {
public final static Logger log = LoggerFactory.getLogger(InformerSupp.class);
@Autowired
private NamedParameterJdbcTemplate NamedParameterJdbcTemplate;
@Autowired
private String queueName;
@Autowired
private JmsTemplate jmsTemplate;
private ObjectMapper mapper;
@PostConstruct
public void afterPropertiesSet() throws Exception {
mapper = new ObjectMapper();
}
public boolean transportData() {
final List<Map<String, Object>> maps = NamedParameterJdbcTemplate
.queryForList(format("select * from isi_trt c"),EMPTY_MAP);
for (Map<String, Object> entry : maps) {
String json = null;
try {
json = mapper.writeValueAsString(entry);
transportMessage(json);
} catch (JMSException e) {
log.error(String.format("Failed to create a JSON message : %s", entry), e);
return false;
} catch (JsonProcessingException e) {
log.error(String.format("Failed to transport message : %s to %s", json, queueName), e);
return false;
}
}
return true;
}
private void transportMessage(final String json) throws JMSException {
log.info(String.format("send message : %s ",json));
jmsTemplate.send(queueName, session -> {
TextMessage textMessage = session.createTextMessage();
int ccsid = _L.coalesce(((MQSession) session).getIntProperty(WMQ_QMGR_CCSID),0);
textMessage.setIntProperty(WMQ_CCSID, ccsid);
textMessage.setIntProperty(JMS_IBM_CHARACTER_SET, ccsid);
textMessage.setText(json);
return textMessage;
});
}
}