как распределить oracle транзакцию в java для длительного выполнения запроса - PullRequest
0 голосов
/ 05 марта 2020

У меня есть код ниже 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;
        });
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...