sql >> Database >  >> RDS >> Mysql

Verbind een web-app op tomcat-container met mysql-container via hibernate

Ik denk dat ik een idee heb waarom je deze uitzondering krijgt. U gebruikt 2 containers,

  1. mysql-container voor database
  2. Katercontainer

Uw uitzondering is zeker te wijten aan een uitzondering voor initialisatie van statische variabelen,

public static final SessionFactory sessionFactory = buildSessionFactory();

Ook heeft uw eigendomsbestand weinig problemen,

  1. connection.url zou hibernate.connection.url
  2. Je hebt je mysql-hostnaam als localhost genoemd, maar deze draait in een andere container. Je moet het veranderen in "mysql" als je je mysql-container hebt genoemd als "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)

Laat duidelijk zien dat je ofwel

  1. Mysql is niet actief. Controleer dit door een verbinding te maken met een sql-client zoals squirrel.
  2. Tomcat-container kan geen verbinding maken met mysql-container. Controleer een snelle ping door te doen

    docker exec tomcat ping mysql  
    

Het kostte me een tijdje om deze applicatie te implementeren. Ik heb het probleem opgelost dat u in deze vraag hebt gesteld. Het primaire probleem was dat mysql niet bereikbaar was vanuit de tomcat-container. Ook was de opgegeven poort niet correct. Hieronder volgt 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>

Er zijn weinig problemen zoals volgen,

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

Maar deze zijn te wijten aan hoofdlettergevoeligheid van Unix die er waarschijnlijk niet was in het geval van Windows. De rest van de uitzondering is triviaal om op te lossen. Ik heb de volgende docker-commando's uitgevoerd,

 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

en de rest van de netwerkopdracht.




  1. MySQL optimaliseren voor ALTER TABLE van InnoDB

  2. MySql WorkBench AES 256-decodering

  3. Een deel van een string in MySQL vervangen

  4. Een beperking om het invoegen van een lege string in MySQL te voorkomen