PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Spring Data Pesimistic Lock timeout dengan Postgres

javax.persistence.lock.timeout juga tidak berfungsi untuk saya ketika disediakan seperti di bawah ini

@QueryHints({@QueryHint(name = "javax.persistence.lock.timeout",value = "15000")})

Tetapi kemudian saya mencoba sesuatu yang lain yang berhasil. Alih-alih menggunakan @Repository dan menggunakan CrudRepository, sekarang saya mengonfigurasi hibernasi saya menggunakan manajer entitas. CreateQuery yang digunakan bersama dengan lock dan setting lock timeout. Dan konfigurasi ini berfungsi seperti yang diharapkan. Saya memiliki dua transaksi yang berjalan secara paralel dan mencoba mengunci baris yang sama persis di DB. Transaksi pertama dapat memperoleh kunci MENULIS dan menahan kunci selama sekitar 10 detik sebelum melepaskan kunci. Sementara itu, transaksi kedua mencoba untuk mendapatkan kunci pada baris yang sama tetapi karena javax.persistence.lock.timeout diatur ke 15 detik, ia menunggu kunci dilepaskan dan kemudian memperoleh kuncinya sendiri. Oleh karena itu, buatlah alurnya menjadi serial.

@Component
public class Repository {

    @PersistenceContext
    private EntityManager em;

    public Optional<Cache> getById(int id){
        List<Cache> list = em.createQuery("select c from Cache c where c.id = ?1")
                            .setParameter(1, id)
                            .setHint("javax.persistence.lock.timeout", 15000)
                            .setLockMode(LockModeType.PESSIMISTIC_WRITE)
                            .getResultList();


        return Optional.ofNullable(list.get(0));
    }

    public void save(Cache cache) {
        cache = em.find(Cache.class, cache.getId());
        em.merge(cache);
    }
}

Pastikan mekanisme penguncian ini ada di dalam transaksi karena penguncian akan dilepaskan saat transaksi dilakukan atau dibatalkan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Python + PostgreSQL + ascii aneh =kesalahan penyandian UTF8

  2. Asp.net MVC4, PostgreSQL dan SimpleMembership

  3. Migrasi kolom teks/bytea PostgreSQL ke objek besar?

  4. Paket 'pgadmin4' tidak memiliki kandidat instalasi, untuk Ubuntu 20.04

  5. Ubah stempel waktu Unix menjadi stempel waktu tanpa zona waktu