2017-10-05 1 views
0

Nous utilisons la websphere comme serveur d'applications et spring-data pour accéder à une base de données Oracle. Si nous appelons la page de démarrage sur notre application, différentes données et beaucoup d'étiquettes de trois cadres différents sont chargés parallèlement à partir de la base de données. Maintenant, si nous surveillons la base de données tout en ouvrant la page de démarrage, différentes sessions de base de données sont ouvertes et fermées. Toutefois, trois sessions (obtenir des étiquettes) restent ouverts, mais inactifs. Je pense trois sessions, parce que j'ai trois cadres et ils chargent tous beaucoup d'étiquettes en parallèle.Longue session de base de données ouverte

Existe-t-il une fonctionnalité dans websphere, spring-data ou oracle qui reconnaît quand une instruction sql est souvent exécutée et maintient la session ouverte? Ou savez-vous pourquoi les sessions restent ouvertes?

Répondre

0

Les sources de données WebSphere Application Server prennent en charge le regroupement des connexions et la mise en cache des instructions préparées. C'est activé par défault. Tant que votre application utilise la source de données WebSphere Application Server (obtenue via l'injection de ressources @Resource ou la recherche JNDI) et utilise java.sql.PreparedStatement pour vos commandes SQL, PreparedStatements sera conservé dans le cache et réutilisé si nécessaire. Il n'est pas clair à partir de votre question si vous voulez ce comportement ou si vous voulez l'éviter. Si vous souhaitez désactiver la mise en cache de toutes les instructions préparées, vous pouvez configurer la propriété statementCacheSize de la source de données sur 0. Sinon, si vous souhaitez éviter la mise en cache, vous pouvez définir par programmation l'indicateur de mise en pool JDBC. :

preparedStatement.setPoolable(false); 
+0

Pourquoi une session de base de données est-elle ouverte si la valeur est hachée? Des étiquettes différentes sont chargées à chaque fois et pas toujours la même chose. – bg89

+0

La mise en cache des instructions préparée par WebSphere Application Server implique uniquement la mise en cache de java.sql.PreparedStatement, et non la valeur renvoyée par les requêtes SQL ou les valeurs des paramètres. – njr

+0

Nous utilisons getJdbcTemplate(). Call (...) pour nous connecter à la base de données. Est-ce que cela utilise aussi la mise en cache? Je ne vais pas désactiver ce cache. Je veux seulement savoir pourquoi cette session reste ouverte. – bg89