0Pricing
Clojure Functional Programming & JVM Backend Development · Ders

Bağlantı Havuzlama ve İşlemler

next.jdbc'de havuzlama ile veritabanı bağlantılarını verimli biçimde yönetin ve işlemleri kullanarak veri bütünlüğünü sağlayın.

Bağlantı Havuzlama ve İşlemler, CoddyKit'te ücretsiz bir Clojure Functional Programming & JVM Backend Development dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Clojure Functional Programming & JVM Backend Development öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Clojure Functional Programming & JVM Backend Development kursu toplamda 4 dersten oluşur.

Bu dersin bazı bölümleri henüz çevrilmemiş olup İngilizce olarak gösterilmektedir.

Why Connection Pooling?

Opening a new database connection for every query is slow and resource-heavy. A connection pool keeps a set of reusable connections ready, dramatically improving throughput.

The HikariCP Pool

The most popular JVM connection pool is HikariCP. The next.jdbc.connection namespace provides a helper to build a pooled datasource.

(require '[next.jdbc.connection :as connection])
(import '[com.zaxxer.hikari HikariDataSource])

Creating a Pooled Datasource

Use connection/->pool with the pool class and your db spec. The returned datasource is what you query against.

(def datasource
  (connection/->pool HikariDataSource
    {:dbtype "postgresql"
     :dbname "mydb"
     :username "app"
     :password "secret"}))

Querying Through the Pool

Once created, pass the pooled datasource directly to jdbc/execute! just like a plain connection. The pool checks a connection out and back automatically.

(require '[next.jdbc :as jdbc])

(jdbc/execute! datasource
  ["SELECT * FROM users WHERE active = ?" true])

Closing the Pool

A pooled datasource is a closeable resource. Close it on shutdown to release all connections.

(.close datasource)

What Is a Transaction?

A transaction groups several statements so they all succeed or all fail together. This guarantees consistency, like transferring money between accounts.

with-transaction

next.jdbc provides with-transaction. Statements inside the body run atomically; if an exception is thrown, everything rolls back.

(jdbc/with-transaction [tx datasource]
  (jdbc/execute! tx ["UPDATE acct SET bal = bal - 100 WHERE id = 1"])
  (jdbc/execute! tx ["UPDATE acct SET bal = bal + 100 WHERE id = 2"]))

Automatic Rollback

If any statement throws, the transaction is rolled back automatically and the exception propagates. No partial updates are committed.

(jdbc/with-transaction [tx datasource]
  (jdbc/execute! tx ["INSERT INTO orders (id) VALUES (1)"])
  (throw (ex-info "boom" {}))) ; insert above is rolled back

Isolation Levels

You can specify an isolation level to control how concurrent transactions see each other.

  • :read-committed
  • :repeatable-read
  • :serializable
(jdbc/with-transaction [tx datasource {:isolation :serializable}]
  (jdbc/execute! tx ["UPDATE counters SET n = n + 1 WHERE id = 1"]))

Manual Rollback

You can force a rollback without throwing by setting the rollback flag on the connection.

(jdbc/with-transaction [tx datasource]
  (jdbc/execute! tx ["INSERT INTO logs (msg) VALUES ('test')"])
  (.rollback tx))

Pooling + Transactions Together

In production you create one pooled datasource at startup and wrap critical multi-step writes in with-transaction. This gives both performance and integrity.

(defn transfer! [ds from to amount]
  (jdbc/with-transaction [tx ds]
    (jdbc/execute! tx ["UPDATE acct SET bal = bal - ? WHERE id = ?" amount from])
    (jdbc/execute! tx ["UPDATE acct SET bal = bal + ? WHERE id = ?" amount to])))

Quick Check

Test your transaction knowledge.

Recap

You learned to use connection pooling and transactions with next.jdbc.

  • Build a pool with connection/->pool and HikariCP
  • Wrap atomic writes in with-transaction
  • Failures roll back automatically; choose isolation levels for concurrency

Sıkça Sorulan Sorular

“Bağlantı Havuzlama ve İşlemler” dersi ücretsiz mi?

Evet — “Bağlantı Havuzlama ve İşlemler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Clojure Functional Programming & JVM Backend Development kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Clojure Functional Programming & JVM Backend Development kursu toplamda 4 dersten oluşur.

“Bağlantı Havuzlama ve İşlemler” dersinde ne öğreneceğim?

next.jdbc'de havuzlama ile veritabanı bağlantılarını verimli biçimde yönetin ve işlemleri kullanarak veri bütünlüğünü sağlayın. Clojure Functional Programming & JVM Backend Development ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Clojure Functional Programming & JVM Backend Development öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Clojure Functional Programming & JVM Backend Development, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Bağlantı Havuzlama ve İşlemler” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Clojure Functional Programming & JVM Backend Development dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Clojure Functional Programming & JVM Backend Development dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. next.jdbc ile Veritabanlarına Bağlanma
  2. CRUD İşlemlerini Gerçekleştirme
  3. Veritabanı Geçişleri ve Şema Yönetimi
  4. Bağlantı Havuzlama ve İşlemler
← Clojure Functional Programming & JVM Backend Development Sayfasına Dön