Mysql
 sql >> Base de données >  >> RDS >> Mysql

Connectez une application Web sur le conteneur tomcat au conteneur mysql via hibernate

Je pense avoir une idée de la raison pour laquelle vous obtenez cette exception. Vous utilisez 2 conteneurs,

  1. conteneur mysql pour la base de données
  2. Conteneur Tomcat

Votre exception est sûrement due à une exception d'initialisation de variable statique,

public static final SessionFactory sessionFactory = buildSessionFactory();

De plus, votre fichier immobilier a peu de problèmes,

  1. connection.url devrait être hibernate.connection.url
  2. Vous avez mentionné votre nom d'hôte mysql comme localhost mais il s'exécute dans un autre conteneur. Vous devriez le changer en "mysql" si vous avez nommé votre conteneur mysql comme "mysql"
java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:214)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:298)

Montre clairement que votre soit

  1. Mysql n'est pas en cours d'exécution. Vérifiez en établissant une connexion à partir d'un client sql comme squirrel.
  2. Le conteneur Tomcat ne peut pas se connecter au conteneur mysql. Vérifiez un ping rapide en faisant

    docker exec tomcat ping mysql  
    

J'ai mis du temps à déployer cette application. J'ai résolu le problème que vous avez posé dans cette question. Le principal problème était que mysql n'était pas accessible depuis le conteneur tomcat. De plus, le port spécifié n'était pas correct non plus. Voici hibernate.cfg.xml,

<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>

<!-- queste configurazioni sono per il testing in locale  -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://mysql:3306/AT_DB</property>

<property name="hibernate.connection.username">root</property>
<property name="connection.password">lxit</property>

 ....rest of configuration....      

    </session-factory>
</hibernate-configuration>

Il y a peu de problèmes comme suivre,

17-Feb-2017 16:07:53.156 INFO [http-nio-8080-exec-1] org.hibernate.dialect.Dialect.<init> HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect
17-Feb-2017 16:07:53.776 INFO [http-nio-8080-exec-1] org.hibernate.tool.schema.extract.internal.InformationExtractorJdbcDatabaseMetaDataImpl.processGetTableResults HHH000262: Table not found: ClientUser
17-Feb-2017 16:07:53.777 INFO [http-nio-8080-exec-1] org.hibernate.tool.schema.extract.internal.InformationExtractorJdbcDatabaseMetaDataImpl.processGetTableResults HHH000262: Table not found: ClientUser
17-Feb-2017 16:07:53.818 INFO [http-nio-8080-exec-1] org.hibernate.tool.schema.extract.internal.InformationExtractorJdbcDatabaseMetaDataImpl.processGetTableResults HHH000262: Table not found: Post
17-Feb-2017 16:07:53.819 INFO [http-nio-8080-exec-1] org.hibernate.tool.schema.extract.internal.InformationExtractorJdbcDatabaseMetaDataImpl.processGetTableResults HHH000262: Table not found: Post
17-Feb-2017 16:07:53.828 INFO [http-nio-8080-exec-1] org.hibernate.tool.schema.extract.internal.InformationExtractorJdbcDatabaseMetaDataImpl.processGetTableResults HHH000262: Table not found: SessionToken
17-Feb-2017 16:07:53.828 INFO [http-nio-8080-exec-1] org.hibernate.tool.schema.extract.internal.InformationExtractorJdbcDatabaseMetaDataImpl.processGetTableResults HHH000262: Table not found: SessionToken
17-Feb-2017 16:07:53.830 WARN [http-nio-8080-exec-1] org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl.handleException GenerationTarget encountered exception accepting command : Unable to execut

Mais ceux-ci sont dus à la sensibilité à la casse d'Unix qui n'était probablement pas là dans le cas de Windows. Le reste de l'exception est trivial à résoudre. J'ai exécuté les commandes docker suivantes,

 sudo docker run -ti --rm -p 8888:8080 -p 8009:8009 -v $(pwd):/usr/local/tomcat/webapps/ --name tomcat tomcat:9-jre8 bash

 sudo docker run -d --name mysql -p 49162:3306 -p 49161:80 -p 49160:22 lxitgto/mysql-phpmyadmin:v1

et le reste de la commande réseau.