Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

170
Visualizações
¿Las transacciones innecesarias de la base de datos causan lentitud?

Estoy trabajando en un entorno Spring, Java, Hibernate, Postgresql. Estoy viendo una lentitud bastante severa en mi base de datos. Mi pregunta específica es qué tan malo es si estoy agregando la anotación @Transactional de Spring a una clase que contiene métodos que no llegan a la base de datos. En otras palabras, no requieren una transacción. Suponga que estos métodos son algunos de los más utilizados.

Así que algo como esto (sólo un ejemplo):

 @Component @Transactional public class ProjectManager { public String getProjectUrl(Project project) { //simple logic that does not use the database return "/my/url/" + project.getId(); } }

Entiendo que hay muchos factores que pueden causar la lentitud de la base de datos. Me pregunto si esto es una gran bandera roja o no es tan importante. ¿Debería sacar estos métodos y ponerlos en una clase diferente que no esté marcada con @Transactional ?

AIT

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

En primer lugar, su método getProjectUrl será interceptado con un aspecto primaveral, que:

  1. Crea transacción si es necesario
  2. Invoca tu método
  3. Completa la transacción

Esto está bien descrito en Spring Docs . Además, Spring no es lo suficientemente inteligente como para comprender que el código del método no usa DB en absoluto ( como vemos en la fuente ).

Entonces, definitivamente podemos concluir que @Transactional de Spring causa algunos gastos generales .

Pero, ¿qué tipo de gastos generales?

  • Java en cualquier caso: el código de aspecto se implementa de todos modos
  • Según el valor de propagation de @Transactional , es posible que nos veamos obligados a crear una transacción física (DB). Esto provoca red + conexión + sobrecarga del lado de la base de datos.

Por otro lado, si elimina @Transactional , también debe saber que Postgres envuelve CUALQUIER consulta SQL no transaccional en transacción implícita ( docs ):

PostgreSQL en realidad trata cada instrucción SQL como ejecutada dentro de una transacción. Si no emite un comando BEGIN, entonces cada declaración individual tiene un BEGIN implícito y (si tiene éxito) COMMIT envuelto alrededor.

Finalmente, la respuesta: no use @Transactional si su método no trata con DB.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda