Printemps déconnectant de Derby
-
02-10-2019 - |
Question
J'utilise Apache Derby avec le printemps JdbcTemplate dans une application Web en cours d'exécution sur Tomcat.
Spring gère la source de données. J'ai remarqué que si je mets à jour le fichier .war et Tomcat undeploys / redéploie l'application, je reçois cette erreur:
java.sql.SQLException: Another instance of Derby may have already booted the database /tmp/manager_db/manager.
Tomcat résout le redémarrage problème, mais comme un puriste, je voudrais nettoyer les choses correctement lorsque le webapp est non déployé.
Le pilote embarqué ne semble pas avoir une méthode « proche » de mettre dans la déclaration de haricot sous la rubrique « détruire méthode ». Je sais que l'arrêt est normalement réalisé en utilisant une URL de connexion 'arrêt', "jdbc: derby:; arrêt = true"
.Toutes les suggestions?
Voici la déclaration dans le fichier de configuration Spring pour ma source de données (DB ne sera pas sous / tmp /, juste là pour l'instant).
<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>
La solution
Je pense qu'une meilleure réponse est d'utiliser le pool source de données Tomcat JNDI avec le printemps. Le modèle JDBC de Spring retournera la connexion à la piscine quand il est fait.