こんにちは、鈴木です。
Spring Framework でトランザクションを使うには、、、
- 設定ファイルに <tx:annotation-driven transaction-manager="txManager"/> と書く。
- 設定ファイルで PlatformTransactionManager の実装クラスをコンテナに登録する。
- クラスやメソッドに @Transactional アノテーションを付ける。
というやり方がお決まりだと思います。
Web 上で検索しても上記方法を紹介しているところが多いのですが、せっかくなのでアノテーションだけで完結したいです。
調べたところ Spring Framework のドキュメントに記載がありました。
11.5.1 Understanding the Spring Framework’s declarative transaction implementation
ここを読むと、
- @Configuration を付けたクラスに @EnableTransactionManagement を付ける。
- PlatformTransactionManager の実装クラスをコンテナに登録する。
- クラスやメソッドに @Transactional アノテーションを付ける。
という手順でできるそうです。
コードにすると以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
import javax.sql.DataSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.jdbc.datasource.SimpleDriverDataSource; import org.springframework.stereotype.Component; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.Transactional; // 1. @Configuration を付けたクラスに @EnableTransactionManagement を付ける @Component @Configuration @ComponentScan @EnableTransactionManagement public class App { @Autowired private DataSource dataSource; public static void main(String[] args) { ApplicationContext context = new AnnotationConfigApplicationContext(App.class); context.getBean(App.class).run(); } // 3. クラスやメソッドに @Transactional アノテーションを付ける private void run() { // ... } @Bean protected DataSource createDataSource() { SimpleDriverDataSource dataSource = new SimpleDriverDataSource(); dataSource.setDriverClass(org.postgresql.Driver.class); dataSource.setUrl("jdbc:postgresql://localhost/spring4_sample"); return dataSource; } // 2. PlatformTransactionManager の実装クラスをコンテナに登録する @Bean @Autowired protected PlatformTransactionManager createTransactionManager(DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } } |
全て XML(設定ファイル)レスで開発できるのでしょうか。。
Spring4 はもっと調べていきたいと思います。