Mysql
 sql >> Database >  >> RDS >> Mysql

Collega un'app Web sul contenitore Tomcat al contenitore MySQL tramite ibernazione

Penso di avere un'idea del motivo per cui stai ricevendo questa eccezione. Stai eseguendo 2 container,

  1. Contenitore MySQL per database
  2. Contenitore Tomcat

Sicuramente, la tua eccezione è dovuta all'eccezione di inizializzazione della variabile statica,

public static final SessionFactory sessionFactory = buildSessionFactory();

Inoltre, il tuo file di proprietà ha alcuni problemi,

  1. connection.url dovrebbe essere hibernate.connection.url
  2. Hai menzionato il tuo nome host mysql come localhost ma è in esecuzione in un altro contenitore. Dovresti cambiarlo in "mysql" se hai chiamato il tuo contenitore mysql come "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)

Mostra chiaramente che entrambi

  1. Mysql non è in esecuzione. Verifica effettuando una connessione da un client sql come lo scoiattolo.
  2. Il contenitore Tomcat non può connettersi al contenitore MySQL. Controlla un ping veloce facendo

    docker exec tomcat ping mysql  
    

Mi ci è voluto un po' per distribuire questa applicazione. Ho risolto il problema che hai posto in questa domanda. Il problema principale era che mysql non era raggiungibile dal contenitore Tomcat. Inoltre, anche la porta specificata non era corretta. Di seguito è 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>

Ci sono pochi problemi come seguire,

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

Ma questi sono dovuti alla distinzione tra maiuscole e minuscole di Unix che probabilmente non era presente in caso di Windows. Il resto dell'eccezione è banale da risolvere. Ho eseguito seguendo i comandi della finestra mobile,

 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

e il resto del comando di rete.