2

Tomcat で実行されている Web アプリ内で Spring JdbcTemplate を使用して Apache Derby を使用しています。

Spring がデータ ソースを管理しています。.war ファイルを更新し、Tomcat がアプリをアンデプロイ/再デプロイすると、次のエラーが発生することに気付きました。

java.sql.SQLException: Another instance of Derby may have already booted the database /tmp/manager_db/manager.

Tomcat を再起動すると問題は解決しますが、純粋主義者として、webapp がアンデプロイされたときに適切にクリーンアップしたいと考えています。

Embedded ドライバには、bean 宣言の「destroy-method」の下に配置する「close」メソッドがないようです。シャットダウンは通常、「シャットダウン」接続 URL「jdbc:derby:;shutdown=true」を使用して行われることを知っています。

助言がありますか?

私のデータ ソースの Spring 構成ファイルでの宣言は次のとおりです (db は /tmp/ の下にはありません。今のところだけです)。

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="org.apache.derby.jdbc.EmbeddedDriver"/>
    <property name="url" value="jdbc:derby:/tmp/manager_db/manager;create=true"/>
    <property name="username" value=""/>
    <property name="password" value=""/>
</bean>
4

1 に答える 1

1

より良い答えは、Tomcat JNDI データ ソース プールを Spring で使用することだと思います。Spring の JDBC テンプレートは、完了時に接続をプールに返します。

于 2010-07-05T17:18:43.840 に答える