Funktionel programmering i Clojure og backendudvikling på JVM · Lektion

Forbindelsespooling og transaktioner

Håndtér databaseforbindelser effektivt med pooling, og sørg for dataintegritet ved hjælp af transaktioner i next.jdbc.

Lektion 4 af 413 trin

Forbindelsespooling og transaktioner er en gratis Funktionel programmering i Clojure og backendudvikling på JVM-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Funktionel programmering i Clojure og backendudvikling på JVM, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Funktionel programmering i Clojure og backendudvikling på JVM-kurset indeholder 4 lektioner i alt.

Hvorfor forbindelsespooling?

Det er langsomt og ressourcekrævende at åbne en ny databaseforbindelse for hver forespørgsel. En forbindelsespool holder et sæt genanvendelige forbindelser klar og forbedrer gennemløbet markant.

HikariCP-poolen

Den mest populære forbindelsespool på JVM'en er HikariCP. Navnerummet next.jdbc.connection indeholder en hjælpefunktion til at oprette en datasource med pool.

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

Opret en datasource med pool

Brug connection/->pool med pool-klassen og din db-specifikation. Den returnerede datasource er den, du sender forespørgsler til.

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

Forespørgsler gennem poolen

Når den er oprettet, sender du den datasource, der bruger poolen, direkte til jdbc/execute!, præcis som en almindelig forbindelse. Poolen låner automatisk en forbindelse ud og afleverer den igen.

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

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

Luk poolen

En datasource med pool er en ressource, der kan lukkes. Luk den ved nedlukning for at frigive alle forbindelser.

(.close datasource)

Hvad er en transaktion?

En transaktion grupperer flere statements, så de enten alle lykkes eller alle mislykkes. Det garanterer konsistens, for eksempel ved overførsel af penge mellem konti.

with-transaction

next.jdbc tilbyder with-transaction. Statements i kroppen kører atomisk; hvis der kastes en undtagelse, rulles alt tilbage.

(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"]))

Automatisk rollback

Hvis et statement kaster en undtagelse, rulles transaktionen automatisk tilbage, og undtagelsen sendes videre. Ingen delvise opdateringer committes.

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

Isoleringsniveauer

Du kan angive et isoleringsniveau for at styre, hvordan samtidige transaktioner ser hinanden.

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

Manuel rollback

Du kan tvinge en rollback uden at kaste en undtagelse ved at sætte rollback-flaget på forbindelsen.

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

Pooling og transaktioner sammen

I produktion opretter du én datasource med pool ved opstart og pakker kritiske skrivninger i flere trin ind i with-transaction. Det giver både ydeevne og dataintegritet.

(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])))

Hurtigt tjek

Test din viden om transaktioner.

Opsummering

Du har lært at bruge forbindelsespooling og transaktioner med next.jdbc.

  • Opret en pool med connection/->pool og HikariCP
  • Pak atomiske skrivninger ind i with-transaction
  • Fejl ruller automatisk tilbage; vælg isoleringsniveauer til samtidig behandling
Gratis at komme i gang

Lær Clojure med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
12
Lektioner
48

Ofte stillede spørgsmål

Er lektionen “Forbindelsespooling og transaktioner” gratis?

Ja — hele teksten til “Forbindelsespooling og transaktioner” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Funktionel programmering i Clojure og backendudvikling på JVM-kurset, skal du opgradere til CoddyKit PRO. Funktionel programmering i Clojure og backendudvikling på JVM-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Forbindelsespooling og transaktioner”?

Håndtér databaseforbindelser effektivt med pooling, og sørg for dataintegritet ved hjælp af transaktioner i next.jdbc. Du øver dig i Funktionel programmering i Clojure og backendudvikling på JVM med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Funktionel programmering i Clojure og backendudvikling på JVM?

Der kræves ingen tidligere erfaring. Funktionel programmering i Clojure og backendudvikling på JVM på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “Forbindelsespooling og transaktioner”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Funktionel programmering i Clojure og backendudvikling på JVM-lektion?

Ja. Alle Funktionel programmering i Clojure og backendudvikling på JVM-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Forbindelse til databaser med next.jdbc
  2. Udførelse af CRUD-operationer
  3. Databasemigreringer og skemahåndtering
  4. Forbindelsespooling og transaktioner
← Tilbage til Funktionel programmering i Clojure og backendudvikling på JVM