Spring Frameworkの取扱い
基本情報
- 対応バージョン
- Spring Framework 2.5.x 以上
- basicInfoMap.dfprop
- targetContainer を spring に設定
DI設定JavaConfig
JavaConfigの自動生成
1.1.x (Java8版) からは、
allcommon配下に生成されます。
e.g. 自動生成される JavaConfig のパッケージ @Directory
[APP ROOT]
|-allcommon
| |-DBCurrent.java
| |-g>dbflute g>BeansJavaConfig.java
| |-g>dbflute g>Config.java
| |-...
|-bsbhv
|-bsentity
|-...
自動登録されるためのアノテーション
e.g. 自動生成される JavaConfig, つまりg>dbflute g>BeansJavaConfig.java @Java@Configuration @ComponentScan(value="org.docksidestage.
g>dbflute g>.exbhv", lazyInit=true) public classg>dbflute g>BeansJavaConfig { // =================================================================================== // Attribute // ========= @Autowired protected ApplicationContext _container; @Resource(name="dataSource") protected DataSource _dataSource; // name basis here for multiple DB // =================================================================================== // Runtime Component // ================= @Bean(name="introduction") publicg>dbflute g>Initializer createg>dbflute g>Initializer() { // no lazy for initialize-only component return new org.docksidestage.g>dbflute g>.allcommon.g>dbflute g>Initializer(_dataSource); } @Bean(name="invokerAssistant") @Lazy public InvokerAssistant createImplementedInvokerAssistant() { ImplementedInvokerAssistant assistant = newImplementedInvokerAssistant(); assistant.setDataSource(_dataSource); return assistant; } ... }
DI設定xmlファイル
g>dbflute g>Beans.xml の自動生成
1.0.x (Java6版) までは、
g>dbflute g>Beans.xml の登録
この
e.g. beanRefContext.xml にてg>dbflute g>Beans.xml を参照 @beanRefContext.xml<beans> <bean id="context" class="...support.ClassPathXmlApplicationContext"> <constructor-arg> <list> <value>
g>dbflute g>Beans.xml</value> <value>jdbcBeans.xml</value> </list> </constructor-arg> </bean> </beans>
g>dbflute g>Beans.xml の名前を変更したい場合
DataSourceの連携
dataSourceというコンポーネント名
JavaConfig, xml 共に、デフォルトでは dataSource というコンポーネント名を想定してDIをしています。
dataSourceという名前でない場合
アプリケーションで管理する DataSource のコンポーネント名が違う名前の場合は、 DataSource への参照を適切なものに変更してあげる必要があります。 (自動生成された JavaConfig や xml は、直接エディタで修正しても再自動生成時に上書きされますので意味がありません)
複数DB対応のときは、よく利用することになるでしょう。
トランザクションの連携
自動連携されるDBCP
以下の DataSource であれば、設定なしでトランザクションが効きます。
- commons-DBCP
- org.apache.commons.dbcp. パッケージ
- Tomcat-DBCP
- org.apache.tomcat.jdbc.pool. パッケージ
- commons-DBCP2
- org.apache.commons.dbcp2. パッケージ (@since 1.1.8)
- HikariCP
- com.zaxxer.hikari. パッケージ (@since 1.1.8)
allcommonに自動生成される
e.g.g>dbflute g>Initializer の needsSpringTransactionalDataSource(), 1.1.8 のとき @Javaprotected boolean needsSpringTransactionalDataSource(String dataSourceFqcn) { return dataSourceFqcn.startsWith("org.apache.commons.dbcp.") || dataSourceFqcn.startsWith("org.apache.commons.dbcp2.") || dataSourceFqcn.startsWith("org.apache.tomcat.jdbc.pool.") || dataSourceFqcn.startsWith("com.zaxxer.hikari."); }
ただ、この自動連携の仕組みは、
手動でDBCPと連携させる
自動的に連携されないDBCPを利用されている場合は、何かしら対策をする必要があります。 幾つかのやり方があります。
- A.
g>dbflute g>Initialiezrをオーバーライド -
littleAdjustmentMap.dfprop の extended
g>dbflute g>InitializerClass を使って、g>dbflute g>Initializer の継承クラスを登録することができます。needsSpringTransactionalDataSource()をオーバーライドして、認識させると良いでしょう。 - B. DataSourceHandlerを設定
-
g>dbflute g>Config で、独自の DataSourceHandler を設定して、連携させると良いでしょう。 - C. TransactionAwareDataSourceProxyを使う
- アプリ側のDataSource本体の設定で、TransactionAwareDataSourceProxyを使うと良いでしょう。
Exampleのススメ
Spring Framework を使ったExample実装
ただ、Exampleとしてあまり整備が追いついていないので、プルリクを募集しています。