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

Forbind en web-app på tomcat-beholder til mysql-beholder via dvale

Jeg tror, ​​jeg har en idé om, hvorfor du får denne undtagelse. Du kører 2 containere,

  1. mysql-beholder til database
  2. Tomcat-beholder

Din undtagelse skyldes helt sikkert en undtagelse for initialisering af statiske variabler,

public static final SessionFactory sessionFactory = buildSessionFactory();
 

Din ejendomsfil har også få problemer,

  1. connection.url skal være hibernate.connection.url
  2. Du har nævnt dit mysql-værtsnavn som localhost, men det kører i en anden container. Du bør ændre den til "mysql", hvis du har navngivet din mysql-beholder som "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)
 

Viser tydeligt, at din enten

  1. Mysql kører ikke. Tjek ved at oprette en forbindelse fra sql-klient som squirrel.
  2. Tomcat-beholderen kan ikke oprette forbindelse til mysql-beholderen. Tjek et hurtigt ping ved at gøre

    docker exec tomcat ping mysql  
     

Det tog mig et stykke tid at implementere denne applikation. Jeg har løst det problem, du har stillet i dette spørgsmål. Det primære problem var, at mysql ikke var tilgængelig fra tomcat-beholder. Den angivne port var heller ikke korrekt. Følgende er 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>

Der er få problemer som at følge,

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
 

Men disse skyldes følsomhed over for store og små bogstaver i unix, som sandsynligvis ikke var der i tilfælde af Windows. Resten af ​​undtagelsen er trivielle at løse. Jeg kørte efter docker-kommandoer,

 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
 

og resten af ​​netværkskommandoen.




  1. Du kan ikke angive måltabellen 'NAME' til opdatering i FROM-klausulen

  2. Hvad er fejlen Hver afledt tabel skal have sit eget alias i MySQL?

  3. Find rækker med dublerede/lignende kolonneværdier MySQL

  4. TOP 5 MySQL-sletsyntaks med tips til T-SQL-udviklere