Soru Tek bir yöntem hariç tüm sınıf + işlemsel ek açıklama


İle bir sınıf var @Transactional ek açıklama (tüm yöntemi için işaretlemek yerine).

Bu sınıfın içinde açıklanmaması gereken tek bir yönteme rağmen @Transactional.

Sorum şu, bu yöntemi "işlem dışı" olarak işaretlemek için kullanabileceğim bir ek açıklama var mı? ya da bu sınıftaki her bir yöntemi bu yönteme dahil olmayan "işlemsel" olarak işaretlemeye başlamalıyım (çok iş)

Teşekkürler.


18
2017-08-14 13:31


Menşei


denedin mi @Transactional(propagation=NOT_SUPPORTED)? - incomplete-co.de


Cevaplar:


Kullanılacak farklı işlem yayma stratejileri vardır. Bunlar enum'da var Propagation. Kullanmak isteyebileceğinizler

/**
 * Execute non-transactionally, suspend the current transaction if one exists.
 * Analogous to EJB transaction attribute of the same name.
 * <p>Note: Actual transaction suspension will not work on out-of-the-box
 * on all transaction managers. This in particular applies to JtaTransactionManager,
 * which requires the {@code javax.transaction.TransactionManager} to be
 * made available it to it (which is server-specific in standard J2EE).
 * @see org.springframework.transaction.jta.JtaTransactionManager#setTransactionManager
 */
NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED),

/**
 * Execute non-transactionally, throw an exception if a transaction exists.
 * Analogous to EJB transaction attribute of the same name.
 */
NEVER(TransactionDefinition.PROPAGATION_NEVER), // maybe not this one

Yani, sınıfınızın içindeki yöntemi bunlardan birine ekleyin.

@Transactional
public class MyTransactionalClass { 
    @Transactional(propagation = PROPAGATION_NOT_SUPPORTED)
    public void nonTransactionalMethod() {...}
}

Tüm yayılım stratejilerini bulabilirsiniz. İşte.


25
2017-08-14 15:09



Sorunu çalışmayan "readOnly = true" ile çözmeme yardımcı oldu - Piotr Sagalara
NOT_SUPPORTED veya ASLA seçenekleri önermek tam bir cevap değildir. Geliştiriciler, çalışma zamanında beklenmedik istisnalara yol açabileceği için onu kullanmaya çok dikkat etmelidir. İşlem askıya alınması desteklenmiyorsa, NOT_SUPPORTED seçeneği çalışmayabilir (javadoc'a bakın). Yöntem bir işlem içinde yanlışlıkla çağrıldığında ASLA istisna atar. Geliştiriciler, SUPPORTS seçeneklerini, çağrıldığı her yerde mutlu olarak çalışacak şekilde düşünmelidir. ASLA istenmediği sürece. - coolersport