java - Comment intercepter les exceptions et les restaurations lorsque le multithreading est activé dans une transaction au printemps?
女神的闺蜜爱上我
女神的闺蜜爱上我 2017-06-12 09:26:37
0
1
1548

Supposons que j'utilise 2 threads dans une transaction pour accélérer le traitement. Si la méthode userDao.addOrg() renvoie une RuntimeException, la transaction ne sera pas annulée et l'erreur ne sera pas détectée. Que dois-je faire ?

ExecutorService executorService = Executors.newCachedThreadPool();
        
@Transactional(rollbackFor=Throwable.class)
public void add(){
        
        CountDownLatch cdl = new CountDownLatch(2);
        executorService.submit(new Runnable() {
            
            public void run() {    
                userDao.addOrg(); //抛出RuntimeException异常
                cdl.countDown();
            }
        });
        
        executorService.submit(new Runnable() {
            
            public void run() {    
                userDao.addSystem();    
                cdl.countDown();
            }
        });
        
        cdl.wait(10,TimeUnit.SECONDS);
}
女神的闺蜜爱上我
女神的闺蜜爱上我

répondre à tous(1)
世界只因有你

@Transactional ne peut contrôler que les transactions à thread unique, les threads enfants ne sont donc pas contrôlés par les transactions sur la méthode add. Vous pouvez démarrer une nouvelle transaction sur la méthode appelée par le thread enfant et revenir en arrière.

Autoriser les threads enfants à appeler des méthodes contrôlées par les transactions :

executorService.submit(new Runnable() {
            
            public void run() {    
                addOperation.addMethod();
            }
        });
@Component
class AddOperation{
    @Transactional
    public addMethod(){
       userDao.addOrg(); //抛出RuntimeException异常
       cdl.countDown();
    }
}

Notez que @Transactional est implémenté via un proxy, donc addMethod doit être placé dans la nouvelle classe AddOperation et ne peut pas être placé dans la classe où se trouve la méthode add.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!