Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

menggunakan Async di dalam transaksi di aplikasi Spring

Jawaban dari M. Deinum bagus tetapi masih ada cara lain untuk mencapai ini yang mungkin lebih sederhana untuk kasus Anda, tergantung pada keadaan aplikasi Anda saat ini.

Anda cukup membungkus panggilan ke metode async dalam acara yang akan diproses setelah transaksi Anda saat ini dilakukan sehingga Anda akan membaca entitas yang diperbarui dari db dengan benar setiap saat.

Cukup mudah untuk melakukan ini, izinkan saya menunjukkan kepada Anda:

import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionSynchronization;
import org.springframework.transaction.support.TransactionSynchronizationManager;

 @Transactional
public void doSomething() {

    // application code here

    // this code will still execute async - but only after the
    // outer transaction that surrounds this lambda is completed.
    executeAfterTransactionCommits(() -> theOtherServiceWithAsyncMethod.doIt());

    // more business logic here in the same transaction
}

private void executeAfterTransactionCommits(Runnable task) {
    TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
        public void afterCommit() {
            task.run();
        }
    });
}

Pada dasarnya apa yang terjadi di sini adalah bahwa kami menyediakan implementasi untuk panggilan balik transaksi saat ini dan kami hanya mengganti metode afterCommit - ada metode lain di sana yang mungkin berguna, periksalah. Dan untuk menghindari pengetikan kode boilerplate yang sama jika Anda ingin menggunakan ini di bagian lain atau sekadar membuat metode lebih mudah dibaca, saya mengekstraknya dalam metode pembantu.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana memulai redis-server pada port yang berbeda dari port default 6379 di ubuntu

  2. ZRANGESTORE sebelum Redis 6.2.0

  3. Kegagalan sementara dalam redis resolusi nama

  4. Menjalankan supervisord dari Host, seledri dari virtualenv (aplikasi Django)

  5. Terhubung ke AWS ElastiCache dengan Enkripsi Dalam Transit + Auth dari klien selain redis-cli+stunnel