Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Połącz aplikację internetową w kontenerze tomcat z kontenerem mysql przez hibernację

Myślę, że mam pomysł, dlaczego otrzymujesz ten wyjątek. Korzystasz z 2 kontenerów,

  1. kontener mysql dla bazy danych
  2. Kontener Tomcat

Z pewnością Twój wyjątek wynika z wyjątku inicjalizacji zmiennej statycznej,

public static final SessionFactory sessionFactory = buildSessionFactory();

Ponadto plik właściwości ma niewiele problemów,

  1. connection.url powinien być hibernate.connection.url
  2. Wspomniałeś nazwę hosta mysql jako localhost, ale działa on w innym kontenerze. Powinieneś zmienić go na "mysql", jeśli nazwałeś swój kontener mysql jako "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)

Wyraźnie pokazuje, że zarówno

  1. Mysql nie działa. Sprawdź, nawiązując połączenie z klienta sql, takiego jak squirrel.
  2. Kontener Tomcat nie może połączyć się z kontenerem mysql. Sprawdź szybki ping, wykonując

    docker exec tomcat ping mysql  
    

Trochę mi zajęło wdrożenie tej aplikacji. Rozwiązałem problem, który zadałeś w tym pytaniu. Głównym problemem było to, że mysql nie był osiągalny z kontenera tomcat. Podany port również nie był poprawny. Poniżej znajduje się 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>

Jest kilka problemów, takich jak śledzenie,

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

Ale wynika to z wrażliwości na wielkość liter w unixie, której prawdopodobnie nie było w przypadku Windowsa. Reszta wyjątków jest banalna do rozwiązania. Uruchomiłem następujące polecenia dokowane,

 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

i resztę polecenia sieciowego.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nginx - Pobieranie PHP zamiast wykonywania

  2. Narzędzie wiersza poleceń do zbiorczego ładowania MySql

  3. błąd ciągle wyskakujący w moich kodach (połączenie już otwarte)

  4. Jak dodać identyfikator automatycznego przyrostu zgodnie z grupą w mysql

  5. Dlaczego blokowanie na poziomie tabeli jest lepsze niż blokowanie na poziomie wiersza w przypadku dużych tabel?