0Pricing
Clojure Functional Programming & JVM Backend Development · Aula

Agrupamento de Ligações e Transações

Gira ligações de bases de dados de forma eficiente com agrupamento e garanta a integridade dos dados usando transações em next.jdbc.

Agrupamento de Ligações e Transações é uma aula grátis de Clojure Functional Programming & JVM Backend Development no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Clojure Functional Programming & JVM Backend Development, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Clojure Functional Programming & JVM Backend Development inclui 4 aulas no total.

Partes desta aula ainda não foram traduzidas e aparecem em inglês.

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

Perguntas Frequentes

A aula “Agrupamento de Ligações e Transações” é grátis?

Sim — o texto completo de “Agrupamento de Ligações e Transações” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Clojure Functional Programming & JVM Backend Development, atualize para CoddyKit PRO. O curso de Clojure Functional Programming & JVM Backend Development inclui 4 aulas no total.

O que vou aprender em “Agrupamento de Ligações e Transações”?

Gira ligações de bases de dados de forma eficiente com agrupamento e garanta a integridade dos dados usando transações em next.jdbc. Você pratica Clojure Functional Programming & JVM Backend Development com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Clojure Functional Programming & JVM Backend Development?

Nenhuma experiência prévia é necessária. Clojure Functional Programming & JVM Backend Development no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Agrupamento de Ligações e Transações”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Clojure Functional Programming & JVM Backend Development?

Sim. Cada aula de Clojure Functional Programming & JVM Backend Development inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Conexão a bancos de dados com next.jdbc
  2. Execução de operações CRUD
  3. Migrações de banco de dados e gerenciamento de esquemas
  4. Agrupamento de Ligações e Transações
← Voltar para Clojure Functional Programming & JVM Backend Development