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>