Ho un codice legacy che sto cercando di riutilizzare in primavera. Questo codice è profondamente annidato in un altro codice, quindi non è pratico riprogettarlo e viene chiamato in molte situazioni, alcune delle quali sono attraverso Spring. Quello che mi piacerebbe fare è usare la transazione Spring se ne è stata avviata una; in caso contrario, continuare a utilizzare il meccanismo di connessione db esistente (legacy). Il nostro primo pensiero è stato quello di rendere la nostra classe legacy un bean e utilizzare un iniettato TransactionPlatformManager
, ma questo non sembra avere alcun metodo pertinente alla nostra situazione. Alcune ricerche hanno dimostrato che Spring ha una classe chiamata TransactionSynchronizationManager
che ha un metodo statico isActualTransactionActive()
. Il mio test indica questo metodo è un modo affidabile di rilevare se una transazione primavera è attiva:Esiste un modo migliore per rilevare se una transazione Spring DB è attiva rispetto all'utilizzo di TransactionSynchronizationManager.isActualTransactionActive()?
- Quando chiamato tramite il servizio in primavera senza la
@Transactional
annotazione, restituisce false - Quando chiamato tramite il servizio in primavera con
@Transactional
, restituisce vero - Nel mio metodo eredità chiamato il modo attuale, restituisce false
la mia domanda: c'è un modo migliore di rilevare se una transazione è attiva?
Grazie! È perfetto. – fool4jesus