3
votes

Quels sont les avantages de l'utilisation de la propriété timeout dans Spring Framework?

Lorsque je lis ce tutoriel sur la transaction, je remarque la propriété timeout , que je n'ai jamais utilisée auparavant dans aucun des services REST que j'ai développés.

Par exemple, dans ce code:

@Service
@Transactional(
  isolation = Isolation.READ_COMMITTED, 
  propagation = Propagation.SUPPORTS, 
  readOnly = false, 
  timeout = 30)
public class CarService {
 
    @Autowired
    private CarRepository carRepository;
 
    @Transactional(
      rollbackFor = IllegalArgumentException.class, 
      noRollbackFor = EntityExistsException.class,
      rollbackForClassName = "IllegalArgumentException", 
      noRollbackForClassName = "EntityExistsException")
    public Car save(Car car) {
        return carRepository.save(car);
    }
}

Quel est l'avantage ou l'avantage d'utiliser la propriété timeout ? est-ce une bonne pratique de l'utiliser? quelqu'un peut-il me parler des cas d'utilisation de la propriété timeout?


0 commentaires

3 Réponses :


2
votes
  1. La première consiste à empêcher les enregistrements d'être verrouillés pendant longtemps et de ne pas pouvoir répondre à d'autres demandes.

  2. Disons que vous réservez un billet. Sur la page de soumission finale, cela parle si longtemps et votre utilisateur attendra-t-il une éternité? Vous définissez donc le délai d'expiration du client http. Mais maintenant que vous avez le délai d'expiration du client http, que se passe-t-il si vous n'avez pas de délai d'expiration de transaction? Vous avez affiché une erreur à l'utilisateur disant qu'elle n'a pas réussi, mais votre transaction prend du temps car elle n'a pas de délai d'expiration et se valide après l'expiration du délai de votre client http.


2 commentaires

Merci donc c'est une bonne idée d'ajouter la propriété timeout ou non?


Oui. C'est une bonne idée de l'ajouter. Mais il ne doit pas être trop court ou trop long, décider sera la partie la plus difficile. Vous pouvez faire une recherche à ce sujet.



3
votes

Comme l'explique Spring Docs :

Timeout permet au client de contrôler la durée d'exécution de la transaction avant l' expiration du délai et sa restauration automatique par l'infrastructure de transaction sous-jacente.

Donc, l'avantage est évidemment évident: contrôler la durée de la transaction (et des requêtes en dessous), jusqu'à ce qu'elles soient annulées.

Q: Pourquoi contrôler le temps de transaction est-il utile / bon?

R: Si vous vous attendez délibérément à ce que votre transaction ne prenne pas trop de temps, c'est le bon moment pour utiliser cette configuration; si vous vous attendez à ce que votre transaction prenne plus de temps que sa durée maximale default , il est encore plus utile de fournir cette configuration.


4 commentaires

Salut @Giorgi Tsiklauri si l'avantage est évidemment évident pourquoi utiliser Timeout est très rare dans un projet réel


Parce que c'est un attribut de plus pour AOP à contrôler et à gérer. Si vous êtes sûr que votre transaction ne prendra probablement pas longtemps, ou! si vous vous attendez délibérément à ce que votre transaction ne prenne pas trop de temps, c'est le bon moment pour utiliser cette configuration.


Pouvez-vous plz expliquer plus "un attribut de plus pour AOP à contrôler et à gérer"


J'ai mis à jour ma réponse. Veuillez jeter un œil .. @Transactional est géré et géré par les installations AOP. Si vous ne le comprenez pas maintenant, c'est un peu difficile de tout expliquer ici .. cependant, je pense que je donne suffisamment d'informations pour voir pourquoi utiliser cela peut être bon ou mauvais.



2
votes

Toutes les réponses ci-dessus sont correctes, mais vous devez noter que:

cette propriété est exclusivement conçue pour être utilisée avec Propagation.REQUIRED ou Propagation.REQUIRES_NEW car elle ne s'applique qu'aux transactions nouvellement démarrées.

comme le décrit la documentation.


0 commentaires