Tôi nghĩ rằng tôi có một ý tưởng tại sao bạn nhận được ngoại lệ này. Bạn đang chạy 2 vùng chứa,
- vùng chứa mysql cho cơ sở dữ liệu
- Vùng chứa Tomcat
Chắc chắn, ngoại lệ của bạn là do ngoại lệ khởi tạo biến tĩnh,
public static final SessionFactory sessionFactory = buildSessionFactory();
Ngoài ra, tệp thuộc tính của bạn có một số vấn đề,
-
connection.url
phải là hibernate.connection.url - Bạn đã đề cập đến tên máy chủ mysql của mình là máy chủ cục bộ nhưng nó đang chạy trong một vùng chứa khác. Bạn nên thay đổi nó thành "mysql" nếu bạn đã đặt tên vùng chứa mysql của mình là "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)
Rõ ràng cho thấy rằng một trong hai của bạn
- Mysql không hoạt động. Kiểm tra bằng cách tạo kết nối từ ứng dụng sql như con sóc.
-
Vùng chứa Tomcat không thể kết nối với vùng chứa mysql. Kiểm tra ping nhanh bằng cách thực hiện
docker exec tomcat ping mysql
Tôi đã mất một thời gian để triển khai ứng dụng này. Tôi đã giải quyết vấn đề bạn đã hỏi trong câu hỏi này. Vấn đề chính là không thể truy cập mysql từ vùng chứa tomcat. Ngoài ra, cổng được chỉ định cũng không đúng. Sau đây là 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>
Có một số vấn đề như sau,
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
Nhưng đây là do phân biệt chữ hoa chữ thường của unix mà có lẽ không có trong trường hợp Windows. Phần còn lại của ngoại lệ là nhỏ để giải quyết. Tôi đã chạy theo các lệnh của 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
và phần còn lại của lệnh mạng.