Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verbinden Sie eine Web-App im Tomcat-Container über den Ruhezustand mit dem MySQL-Container

Ich glaube, ich habe eine Idee, warum Sie diese Ausnahme bekommen. Sie führen 2 Container aus,

  1. Mysql-Container für Datenbank
  2. Tomcat-Container

Ihre Ausnahme ist sicherlich auf eine Ausnahme bei der statischen Variableninitialisierung zurückzuführen,

public static final SessionFactory sessionFactory = buildSessionFactory();

Außerdem hat Ihre Eigenschaftsdatei nur wenige Probleme,

  1. connection.url sollte hibernate.connection.url
  2. Sie haben Ihren MySQL-Hostnamen als localhost angegeben, aber er läuft in einem anderen Container. Sie sollten es in „mysql“ ändern, wenn Sie Ihren mysql-Container „mysql“ genannt haben
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)

Zeigt deutlich, dass entweder

  1. Mysql läuft nicht. Überprüfen Sie dies, indem Sie eine Verbindung von einem SQL-Client wie squirrel herstellen.
  2. Tomcat-Container kann keine Verbindung zum MySQL-Container herstellen. Überprüfen Sie einen schnellen Ping, indem Sie

    docker exec tomcat ping mysql  
    

Ich habe eine Weile gebraucht, um diese Anwendung bereitzustellen. Ich habe das Problem gelöst, das Sie in dieser Frage gestellt haben. Das Hauptproblem war, dass mysql vom Tomcat-Container aus nicht erreichbar war. Auch der angegebene Port war nicht korrekt. Es folgt 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>

Es gibt nur wenige Probleme wie das folgende,

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

Dies liegt jedoch an der Groß- und Kleinschreibung von Unix, die bei Windows wahrscheinlich nicht vorhanden war. Der Rest der Ausnahme ist trivial zu lösen. Ich habe die folgenden Docker-Befehle ausgeführt,

 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

und Rest des Netzwerkbefehls.