Re: Spring @Transactional not working with promises
Spring wraps the annotated method around with transaction handling code. This means that it starts (or joins) a transaction before your method, and commits (or continues) it after the method returns.
When you're not using a promise, the database access happens inside your method. On the other hand, using a promise your method only defines how the database access should happen. Your method does not execute any of it, it gets executed by some other mechanism (I'm not sure about the Ratpack particulars).
This means that the transaction happens around the definition of the computation, and not the execution of it.
In general: Don't expect Spring annotation based transactions to work with asynchronous frameworks.
This whole concept is hard to grasp the first time, but I hope I've helped.