sql >> Databáze >  >> RDS >> Mysql

Připojte webovou aplikaci na kontejneru tomcat ke kontejneru mysql přes hibernaci

Myslím, že tuším, proč dostáváte tuto výjimku. Provozujete 2 kontejnery,

  1. kontejner mysql pro databázi
  2. Kontejner Tomcat

Vaše výjimka je jistě způsobena výjimkou inicializace statické proměnné,

public static final SessionFactory sessionFactory = buildSessionFactory();

Také váš soubor vlastností má několik problémů,

  1. connection.url by měl být hibernate.connection.url
  2. Uvedli jste svůj název hostitele mysql jako localhost, ale běží v jiném kontejneru. Měli byste jej změnit na „mysql“, pokud jste svůj kontejner mysql pojmenovali 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)

Jasně ukazuje, že vaše buď

  1. Mysql neběží. Zkontrolujte vytvořením připojení z klienta SQL, jako je veverka.
  2. Kontejner Tomcat se nemůže připojit ke kontejneru mysql. Zkontrolujte rychlý ping pomocí

    docker exec tomcat ping mysql  
    

Nasazení této aplikace mi chvíli trvalo. Vyřešil jsem problém, na který jste se v této otázce zeptali. Primárním problémem bylo, že mysql nebylo dosažitelné z kontejneru tomcat. Také zadaný port nebyl správný. Následuje 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>

Existuje několik problémů, jako je sledování,

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 to je způsobeno citlivostí na malá a velká písmena v unixu, což pravděpodobně nebylo v případě Windows. Zbytek výjimek je triviální vyřešit. Spustil jsem následující příkazy dockeru,

 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

a zbytek síťového příkazu.




  1. Zobrazit datum další události

  2. Jak přidat nový sloupec do tabulky MYSQL?

  3. Tabulka databáze podle kompilátoru android studio neexistuje

  4. Měl bych používat makra nebo kód VBA?