У меня есть API, который должен выполнять следующие действия:
Принимать параллельные запросы и выполнять их в том же порядке, в котором они поступают , убедиться, что только один запросвыполняется / фиксируется одновременно.
Запросы должны выполняться отдельно, поэтому, поскольку первый запрос фиксируется в базе данных, второй запрос должен ждать, а когда первый запрос завершает второй запрос,используйте эти обновленные данные.
Мой код выполняет вышеуказанное
@Synchronized
@Transactional(
readOnly = false,
isolation = Isolation.READ_COMMITTED,
propagation = Propagation.REQUIRED,
rollbackFor = Exception.class
)
myApi() {
def currentSession = sessionFactory.currentSession
def transaction = currentSession.beginTransaction()
String query = """update table set column = :value"""
Map params = [value: "value"]
currentSession.doWork(new Work() {
public void execute(Connection connection) {
Sql sql = new Sql(connection)
int updateCount = sql.executeUpdate(params, query)
}
})
transaction.commit()
}
Интересно, что мой приведенный выше код выполняет то, что я хочу, и выдает следующую ошибку:
| Error org.springframework.transaction.TransactionSystemException: Could not commit Hibernate transaction; nested exception is org.hibernate.TransactionException: Transaction not successfully started
| Error at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:665)
| Error at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:757)
| Error at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:726)
| Error at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:150)
Есть идеи, что не так?