春の開始トランザクション方法は何ですか?
Springにおいて、トランザクションを開始する方法はいくつかあります。
- 忠告をもらえますか? (Chūkoku o moraemasu ka?)
- aop: 設定
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="execution(* com.example.service.*.*(..))" />
</aop:config>
- アノテーションに基づく宣言型トランザクション管理:トランザクションを宣言するために、メソッドやクラスに@Transactional アノテーションを使用する。
@Transactional
public void saveUser(User user) {
// 保存用户操作
}
- コードを書いて、トランザクションを明示的に開始、コミット、ロールバックすることによるプログラムに基づいたトランザクション管理。
@Autowired
private PlatformTransactionManager transactionManager;
public void saveUser(User user) {
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
TransactionStatus status = transactionManager.getTransaction(def);
try {
// 保存用户操作
transactionManager.commit(status);
} catch (RuntimeException e) {
transactionManager.rollback(status);
throw e;
}
}
- アノテーションベースの宣言型トランザクション管理とプログラム型トランザクション管理の組み合わせ:@Transactionalアノテーションをメソッドやクラスに使用し、プログラム型トランザクション管理が必要な場合にはTransactionTemplateを使用してトランザクションを操作することができます。
@Autowired
private TransactionTemplate transactionTemplate;
@Transactional
public void saveUser(User user) {
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
protected void doInTransactionWithoutResult(TransactionStatus status) {
// 保存用户操作
}
});
}
これらの方法は、具体的な要求に応じて選択することができ、アノテーションベースの宣言型トランザクション管理が最も一般的でお勧めの方法です。