Play Framework 2.3 - Не удается подключиться к удаленной базе данных Linux (Play) -> Win 7 (MySQL)

У меня есть компьютер с 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 :(


person Neilos    schedule 16.04.2015    source источник
comment
Попробуйте заменить db.db_user на db.default во всей конфигурации.   -  person Mon Calamari    schedule 16.04.2015
comment
Я получаю источник данных на основе "db_user", так что это не должно быть проблемой, верно? Смотрите мое обновление.   -  person Neilos    schedule 16.04.2015


Ответы (2)


Вам нужно использовать db.default в conf. из базы данных Java

person Vasiliy Komarov    schedule 16.04.2015
comment
Участник 4 дня и уже дает ответы... гооооооооооооооооооооооооооооо! Однако вы должны связать последнюю версию документов. - person sebster; 16.04.2015

Думаю правильный ключ для указания пароля не pass, а password:

db.db_user.password="password"

Также вы можете попробовать использовать db.default.* и DB.getDataSource(), но я думаю, что это не будет иметь большого значения...

person Salem    schedule 16.04.2015
comment
Интересно ... казалось бы, вы правы, но это никогда не мешало ему работать раньше (когда я запускал и БД, и сервер локально на Windows). Увы, это не решило проблему, я думаю, что моя проблема в том, что мой сервер Play даже не видит базу данных (java.net.ConnectException: Connection refused), но я совершенно сбит с толку, почему; Я могу подключиться из командной строки. - person Neilos; 17.04.2015
comment
Кстати, db_user в db.db_user.user=db_user нужно заключать в кавычки. Попробуйте добавить logger.com.jolbox=DEBUG к application.conf, чтобы узнать, появится ли дополнительная информация в консоли. - person Salem; 17.04.2015
comment
Я добавил этот параметр конфигурации, но он не имел никакого эффекта, также я не вижу, чтобы имя пользователя было в кавычках из документов playframework.com/documentation/2.3.x/SettingsJDBC, но я попробовал оба варианта и никаких изменений - person Neilos; 17.04.2015
comment
@Neilos Тебе удалось это решить? Я застрял в похожей проблеме, когда я не могу получить доступ к своей базе данных mysql, установленной в отдельном общедоступном облаке, из моего приложения, развернутого в другом общедоступном облаке. Я могу получить доступ к базе данных из рабочей среды mysql, но приложение почему-то не может ее увидеть. Пожалуйста, поделитесь своими наблюдениями, которые вы использовали для решения этой проблемы, это может помочь! - person user1242321; 05.10.2015
comment
@ user1242321 Я предполагаю, что это связанный с этим вопрос stackoverflow.com/questions/32946111/ Я попытаюсь помочь, но, честно говоря, я не нашел решения, я все еще в разработке, и сейчас я просто запускаю App и Mysql на одном локальном компьютере. С тех пор я обновился до версии 2.4 и не проверял ее на ту же проблему. Я мог бы сегодня вечером попытаться сделать это снова, чтобы увидеть, есть ли у меня те же проблемы. Это была своеобразная проблема. - person Neilos; 05.10.2015
comment
@Neilos, да, приятель. :) Я добавил этот вопрос вчера, когда не смог найти решение. Дайте мне знать, если вы найдете какое-либо решение для этого, и я также обновлю вопрос, если я его пройду. Спасибо. - person user1242321; 05.10.2015
comment
@user1242321 user1242321 Я только что установил виртуальную машину с Mysql, используя свою локальную машину в качестве игрового сервера (Play 2.4) (это была проблема, с которой я сталкивался раньше), и теперь она работает. так что у меня нет никаких проблем, все, что я хотел бы сказать, это убедиться, что вашему пользователю разрешен доступ с вашего сервера, попробуйте то, что я использую, например: GRANT ALL PRIVILEGES ON my_database.* TO 'my_user'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION; однако это только для разработчиков, я уточню привилегии для производства! - person Neilos; 06.10.2015