Мне удалось настроить базу данных MySQL на OpenShift с помощью phpMyAdmin и всех. мне сказали, имя хоста и порт моей для моей базы данных $ OPENSHIFT_MYSQL_DB_HOST и $ OPENSHIFT_MYSQL_DB_PORT соответственно, которые я положил в мой файл context.xml так:JDBC не может подключиться к базе данных mysql на openshift
<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://$OPENSHIFT_MYSQL_DB_HOST:$OPENSHIFT_MYSQL_DB_PORT/burgerjoint</param-value>
</context-param>
<context-param>
<param-name>user</param-name>
<param-value>admin******</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>*********</param-value>
</context-param>
Код для установления соединения является:
public void contextInitialized(ServletContextEvent event) {
// Connect
String driver = event.getServletContext().getInitParameter(PARAM_DRIVER);
String url = event.getServletContext().getInitParameter(PARAM_URL);
String username = event.getServletContext().getInitParameter(PARAM_USERNAME);
String password = event.getServletContext()
.getInitParameter(PARAM_PASSWORD);
try {
Class.forName(driver);
Connection connection = DriverManager.getConnection(url, username,
password);
event.getServletContext().setAttribute(ATTR_CONNECTION, connection);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
но проблема в том, что соединение является нулевым на сервере, и я не понимаю, почему. Я сделал что-то не так? Код работает, когда я пытаюсь его на localhost. И насколько я могу сказать, у меня есть все необходимые библиотеки:
Спасибо за помощь :)
Update
Я изменил код подключения следующим образом:
{
if (connection != null) return connection;
try
{
Properties dbProperties = new Properties();
InputStream input = DatabaseUtil.class.getClassLoader().getResourceAsStream(DB_PROPERTIES_FILE);
dbProperties.load(input);
String url = "";
if (appIsDeployed)
{
String host = System.getenv("$OPENSHIFT_MYSQL_DB_HOST");
String port = System.getenv("$OPENSHIFT_MYSQL_DB_PORT");
String name = "burgerjoint";
url = "jdbc:mysql://" + host + ":" + port + "/" + name;
} else
{
url = dbProperties.getProperty(PARAM_URL);
}
String driver = dbProperties.getProperty(PARAM_DRIVER);
String username = dbProperties.getProperty(PARAM_USERNAME);
String password = dbProperties.getProperty(PARAM_PASSWORD);
Class.forName(driver);
connection = DriverManager.getConnection(url, username, password);
, но он все еще дает нулевое соединение. Значения System.getenv("$OPENSHIFT_MYSQL_DB_HOST")
и System.getenv("$OPENSHIFT_MYSQL_DB_PORT")
являются нулевыми.
Я думаю, что модифицированный пример также будет работать, если бы знаки доллара были удалены из операторов getenv(). Как отмечено в принятом ответе, знак доллара указывает на замещение. Фактическое имя среды не включает знак доллара. – Thierry