J'ai deux applications Java: l'une d'entre elles insère des enregistrements dans Table1. La deuxième application lit les N premiers éléments et les supprime. Lorsque la 1ère application insère des données intensives, la 2ème échoue lorsque j'essaie de supprimer des lignes avec CannotSerializeTransactionException. Je ne vois aucun problème: les éléments insérés sont visibles dans select/delete uniquement lorsque la transaction d'insertion est terminée. Comment puis-je le réparer? Merci.Les suppressions de base de données ont échoué pendant les insertions
TransactionTemplate tt = new TransactionTemplate(platformTransactionManager);
tt.setIsolationLevel(Connection.TRANSACTION_SERIALIZABLE);
tt.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus status) {
List<Record> records = getRecords(); // jdbc select
if (!records.isEmpty()) {
try {
processRecords(records); // no database
removeRecords(records); // jdbc delete - exception here
} catch (CannotSerializeTransactionException e) {
log.info("Transaction rollback");
}
} else {
pauseProcessing();
}
}
});
pauseProcessing() - sommeil
public void removeRecords(int changeId) { String sql = "delete from RECORDS where ID <= ?";
getJdbcTemplate().update(sql, new Object[]{changeId});}
vous devrez probablement montrer quel code vous utilisez pour aider les gens –
Comment contrôler les transactions? Vos deux applications fonctionnent-elles dans le même conteneur? – rsilva4
Non, les applications sont séparées: d'abord le service web basé sur Tomcat et le second est le fonctionnement autonome de Java sur un autre serveur. – alex543