J'utilise Hibernate 3 et MySQL Sever 5.5 pour une application myweb avec Spring 3.0
Je reçois une exception comme trop de connexions ...... p>
Mon fichier Java où je crée une session est Comme suit: p> et j'appelle cette méthode où j'ai besoin de session p> comme p> et après p> i session en utilisant p> aidez-moi s'il vous plaît à résoudre le problème ....... p> mon hibernate.cfg.xml est: p>
5 Réponses :
Java Issue h2>
Vérifiez cette réponse: https://stackoverflow.com/a/10785770/598424 h3>
problème mysql strong> p>
Vous devez vous connecter en tant que superutilisateur. Ensuite, exécutez ce code: p>
xxx pré> Cependant, cela ne dure que jusqu'à ce que le serveur MySQL redémarre. Si vous souhaitez le modifier de façon permanente, vous pouvez ajouter les éléments suivants comme dans la section MySQLD. P>
kill 2309344;
Merci pour la réponse, mais connaissez-vous une solution du côté Java?
Ce n'est pas un problème avec Java. C'est un problème avec MySQL.
C'est une question Java, la sessionFactory est recréée à chaque fois. L'amour La réponse de Hasija explique tout.
Ce n'est pas du tout une réponse recommandée.
Vous créez de nouveaux Habituellement, vous devez créer une session usine une seule fois lors du démarrage de votre application et fermez-la pendant l'arrêt. Par exemple, comme suit: P> SéanceFactory code> S Chaque fois que vous avez besoin d'une session code> code> et de ne pas les fermer. public class DBConnection {
private static SessionFactory factory;
static {
factory = new Configuration().configure().buildSessionFactory();
}
public Session getSession() {
return factory.openSession();
}
// Call this during shutdown
public static void close() {
factory.close();
}
}
@LaxMikantkumbHare: lorsque vous éteignez toute l'application, par exemple. dans servleContextListener.contextDestroyed () code>.
En effet, vous utilisez un pool de connexion qui a été créé dès que vous construisez SéanceFactory, mais les connexions ne sont acquises que lorsque vous ouvrez une session. Maintenant, vous fermez la session, en raison de laquelle les connexions sont libérées, mais ne sont pas fermées et sont retenues au bord de la piscine. Maintenant, vous créez à nouveau une sessionFactory, créant ainsi une nouvelle piscine, puis obtenir une session, créant ainsi une nouvelle connexion et ainsi de suite .. qui finira par atteindre le nombre maximum de connexions autorisées.
Ce que vous avez à faire est Utilisation d'un pool de connexion (en utilisant une sessionFactory) et d'obtenir et de libérer les connexions du même pool. P>
public class DBConnection {
private static SessionFactory factory;
static {
factory = new Configuration().configure().buildSessionFactory();
}
public Session getSession() {
return factory.openSession();
}
public void doWork() {
Session session = getSession();
// do work.
session.close();
}
// Call this during shutdown
public static void close() {
factory.close();
}
}
Besoin d'un conseil. Qu'en est-il quand il va à des servlets? Ils sont multi-filetés, de sorte que cette façon l'affecte-t-elle?
J'ai utilisé
mysql> show processlist;
Je faisais face aux mêmes problèmes avec Hibernate MySQL Conenrtions
Les deux choses suivantes ont aidé à corriger mes problèmes de connexion créer une classe Singleton pour obtenir une dbconnection em> p> N'oubliez pas de jouer session.close () strong> lorsque votre requête est complète em> p> aussi dans "hibernate.cfg.xml"
Ajoutez cette ligne p> sous p> p>
Avant d'appeler
session.close () code> appelsession.flush code>. Il semble que vos connexions ne soient pas retournées à la piscine après utilisation.