Mysql
 sql >> база данни >  >> RDS >> Mysql

Свържете уеб приложение на Tomcat контейнер към mysql контейнер чрез хибернация

Мисля, че имам идея защо получавате това изключение. Работите с 2 контейнера,

  1. mysql контейнер за база данни
  2. Контейнер Tomcat

Със сигурност вашето изключение се дължи на изключение за инициализация на статична променлива,

public static final SessionFactory sessionFactory = buildSessionFactory();

Освен това вашият файл със свойства има няколко проблема,

  1. connection.url трябва да бъде hibernate.connection.url
  2. Споменахте името на вашия mysql хост като localhost, но то работи в друг контейнер. Трябва да го промените на "mysql", ако сте кръстили своя mysql контейнер като "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)

Ясно показва, че вашият

  1. Mysql не се изпълнява. Проверете, като направите връзка от sql клиент като squirrel.
  2. Контейнерът Tomcat не може да се свърже с контейнера mysql. Проверете бърз пинг, като направите

    docker exec tomcat ping mysql  
    

Отне ми известно време, за да внедря това приложение. Реших проблема, който сте задали в този въпрос. Основният проблем беше, че mysql не беше достъпен от Tomcat контейнер. Освен това посоченият порт също не е правилен. Следва 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>

Има няколко проблема като следене,

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

Но те се дължат на чувствителността на малки и големи букви на unix, която вероятно не беше там в случай на Windows. Останалите изключения са тривиални за разрешаване. Изпълних следните команди на docker,

 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

и останалата част от мрежовата команда.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. group_concat MYSQL нов ред

  2. Трябва да направя auto_increment поле в MySQL, което не е първичен ключ

  3. Възможно ли е да се вмъкнат данни в две различни таблици в mysql чрез една заявка за вмъкване php?

  4. Грешка в PHP, MySQL:Броят на колоните не съвпада с броя на стойностите на ред 1

  5. mysql - времева марка за търсене по час от деня