У меня есть компьютер с Linux (на 10.0.0.10
), на котором я развернул свое приложение Play, используя:
activator dist
У меня есть компьютер с Windows (на 10.0.0.51
), на котором работает MySQL.
В базе данных настроено 3 учетных записи пользователей root@localhost
, db_user@localhost
, db_user@%
у всех пользователей есть все права (это просто для тестирования).
Я могу получить доступ к базе данных с компьютера с Linux, используя оболочку mysql
:
[neil@localhost ~]$ mysql -u db_user -p -h 10.0.0.51
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.12 MySQL Community Server (GPL)
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| test_db |
| mysql |
| performance_schema |
| sakila |
| test |
| world |
+--------------------+
8 rows in set (0.04 sec)
mysql>
Где test_db
— это тестовая база данных, которую я настроил на компьютере с Windows.
Однако, когда я пытаюсь запустить приложение Play, я получаю следующее:
[neil@localhost ~]$ ~/TEST_APP-1.0-SNAPSHOT/bin/test_app
Play server process ID is 5908
[error] c.j.b.h.AbstractConnectionHook - Failed to obtain initial
connection Sleeping for 0ms and trying again. Attempts left: 0.
Exception: java.net.ConnectException: Connection
refused.Message:Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago.
The driver has not received any packets from the server.
Oops, cannot start the server.
Configuration error: Configuration error[Cannot connect to database
[db_user]]
at play.api.Configuration$.play$api$Configuration$$configError
(Configuration.scala:94)
...
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:
Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago.
The driver has not received any packets from the server.
...
Вот конфигурация БД в моем application.conf:
db.db_user.driver=com.mysql.jdbc.Driver
db.db_user.url="jdbc:mysql://10.0.0.51:3306/test_db?allowMultiQueries=true"
db.db_user.user=db_user
db.db_user.pass="password"
db.db_user.partitionCount=3
db.db_user.maxConnectionsPerPartition=20
db.db_user.minConnectionsPerPartition=5
db.db_user.acquireIncrement=5
Стоит отметить, что эта конфигурация работает, когда я запускаю приложение в режиме разработки в Windows. Но я не знаю, что не так с Linux, и у меня закончились вещи, которые можно было бы попробовать. (обратите внимание, что я попробовал это со всеми отключенными брандмауэрами и получил ту же проблему).
ОБНОВЛЕНИЕ
В игровом приложении я использую:
public static final String DB_USER = "db_user";
...
JdbcTemplate jt = new JdbcTemplate(DB.getDataSource(DB_USER));
Значит, мне не нужно использовать db.default.etc...
в конфе? Разве это не правильно?
ОБНОВЛЕНИЕ 2
Я не знаю, как я пропустил это, но дальше в трассировке стека было что-то еще, что указывало на проблему (трассировка стека довольно длинная, поэтому я не хотел перечислять все это, может быть, я должен был) :
Caused by: java.net.ConnectException: Connection refused
Итак... сервер прослушивает порт 3306, на сервере Windows с запущенным netstat -an
выдает:
TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING
TCP [::]:3306 [::]:0 LISTENING
Брандмауэр выключен (я знаю... просто для проверки).
И MySQL принимает соединения из CLI.
Однако у меня только что была мозговая волна .... Application.conf был сгенерирован в Windows ... Интересно, нужно ли мне запускать dos2unix
в файле конфигурации, поэтому он не может найти "db_user"
.
ОБНОВЛЕНИЕ 3
No :(
db.db_user
наdb.default
во всей конфигурации. - person Mon Calamari   schedule 16.04.2015"db_user"
, так что это не должно быть проблемой, верно? Смотрите мое обновление. - person Neilos   schedule 16.04.2015