无法加载连接 class,因为基础异常:'java.lang.NumberFormatException: For input string: "OPENSHIFT_MYSQL_DB_PORT"'
Cannot load connection class because of underlying exception: 'java.lang.NumberFormatException: For input string: "OPENSHIFT_MYSQL_DB_PORT"'
我正在尝试在 openshift 上部署我的 Jersey 项目。我已经实现了这个苹果 class 来测试另一个 class 中的错误,因为我猜问题出在建立数据库连接上。在 Tails 日志中我发现了这个错误:
Connecting to database…
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Cannot load connection class because of underlying exception: 'java.lang.NumberFormatException: For input string: "OPENSHIFT_MYSQL_DB_PORT"'.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
package org.busTracker.serverSide;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
/**
* Root resource (exposed at "myresource" path)
*/
@Path("myresource")
public class Apple {
//I modified my credients.
String host = "jdbc:mysql://$OPENSHIFT_MYSQL_DB_HOST:OPENSHIFT_MYSQL_DB_PORT/serverside";
String user = "adminBjv5a4k";
String password = "7tvPb1Bx3v8j";
/**
* Method handling HTTP GET requests. The returned object will be sent
* to the client as "text/plain" media type.
*
* @return String that will be returned as a text/plain response.
*/
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getIt() {
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Connecting to database…");
conn = DriverManager.getConnection(host,user,password);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
// ignore
}
}
}
return "Hello, from apple class 14.05.15 11:35!";
}
}
编辑: 我在 DriverManager.getConnection() 之后的 try 块中添加了以下内容:
Map<String, String> env = System.getenv();
for (String envName : env.keySet()) {
System.out.format("%s=%s%n",
envName,
env.get(envName));
}
我尝试了以下方法,但仍然出现相同的错误:
- 此解决方案:https://forums.openshift.com/mysql-51-jboss-app-numberformatexception-mysql-url 并添加以下 jdbc:mysql://${env.OPENSHIFT_MYSQL_DB_HOST}:${env.OPENSHIFT_MYSQL_DB_PORT}/serv erside 但没有任何改变。
- "jdbc:mysql://127.10.310.130:3306 /serverside";此值来自应用程序的 phpmyadmin。
问题是因为这条线
String host = "jdbc:mysql://$OPENSHIFT_MYSQL_DB_HOST:OPENSHIFT_MYSQL_DB_PORT/serverside";
获取环境变量需要使用方法System.getEnv().get("[the variable name]")
。因此,在您的情况下,主机变量应如下所示
String host = "jdbc:mysql://"
+ System.getenv().get("OPENSHIFT_MYSQL_DB_HOST")
+ ":"
+ System.getenv().get("OPENSHIFT_MYSQL_DB_PORT")
+ "/serverside";
顺便说一下,您的编辑不起作用,因为应用程序在执行代码之前已经抛出异常。所以,要让它工作,你需要把它 before
放在 DriverManager.getConnection()
函数中。
您可以按如下方式替换这些变量。
<property name="url"
value="jdbc:mysql://$OPENSHIFT_MYSQL_DB_HOST:$OPENSHIFT_MYSQL_DB_PORT/
yourdatabasename" />
can be replaced as below.
<property name="url"
value="jdbc:mysql://127.12.97.2:3306/yourdatabasename"
/>
jdbc:mysql://127.12.97.2:3306/yourdatabasename"IP地址和端口号可以从openshift phpmyadmin页面获取,通常显示在最上面管理页面。
我尝试了以上所有解决方案,但都没有解决我的问题。所以任何仍然遇到异常的人,试试这个。
存储在环境变量 $OPENSHIFT_MYSQL_DB_HOST 中的值类似于
'jdbc:mysql://adminuname:adminpass@127.02.0.1:3306/appname'
。因此,使用该值为 DriverManager.getConnection() 创建 url 会给我们带来异常。
相反,尝试知道存储在 $OPENSHIFT_MYSQL_DB_HOST 中的值,然后将 url 硬编码到没有该用户名和密码的字符串变量中。像这样
'jdbc:mysql://127.02.0.1:3306/appname'
对我来说,它在进行此修改后开始工作。所有其他环境变量都可以按原样使用。
我正在尝试在 openshift 上部署我的 Jersey 项目。我已经实现了这个苹果 class 来测试另一个 class 中的错误,因为我猜问题出在建立数据库连接上。在 Tails 日志中我发现了这个错误:
Connecting to database… com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Cannot load connection class because of underlying exception: 'java.lang.NumberFormatException: For input string: "OPENSHIFT_MYSQL_DB_PORT"'. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
package org.busTracker.serverSide;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
/**
* Root resource (exposed at "myresource" path)
*/
@Path("myresource")
public class Apple {
//I modified my credients.
String host = "jdbc:mysql://$OPENSHIFT_MYSQL_DB_HOST:OPENSHIFT_MYSQL_DB_PORT/serverside";
String user = "adminBjv5a4k";
String password = "7tvPb1Bx3v8j";
/**
* Method handling HTTP GET requests. The returned object will be sent
* to the client as "text/plain" media type.
*
* @return String that will be returned as a text/plain response.
*/
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getIt() {
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Connecting to database…");
conn = DriverManager.getConnection(host,user,password);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
// ignore
}
}
}
return "Hello, from apple class 14.05.15 11:35!";
}
}
编辑: 我在 DriverManager.getConnection() 之后的 try 块中添加了以下内容:
Map<String, String> env = System.getenv();
for (String envName : env.keySet()) {
System.out.format("%s=%s%n",
envName,
env.get(envName));
}
我尝试了以下方法,但仍然出现相同的错误:
- 此解决方案:https://forums.openshift.com/mysql-51-jboss-app-numberformatexception-mysql-url 并添加以下 jdbc:mysql://${env.OPENSHIFT_MYSQL_DB_HOST}:${env.OPENSHIFT_MYSQL_DB_PORT}/serv erside 但没有任何改变。
- "jdbc:mysql://127.10.310.130:3306 /serverside";此值来自应用程序的 phpmyadmin。
问题是因为这条线
String host = "jdbc:mysql://$OPENSHIFT_MYSQL_DB_HOST:OPENSHIFT_MYSQL_DB_PORT/serverside";
获取环境变量需要使用方法System.getEnv().get("[the variable name]")
。因此,在您的情况下,主机变量应如下所示
String host = "jdbc:mysql://"
+ System.getenv().get("OPENSHIFT_MYSQL_DB_HOST")
+ ":"
+ System.getenv().get("OPENSHIFT_MYSQL_DB_PORT")
+ "/serverside";
顺便说一下,您的编辑不起作用,因为应用程序在执行代码之前已经抛出异常。所以,要让它工作,你需要把它 before
放在 DriverManager.getConnection()
函数中。
您可以按如下方式替换这些变量。
<property name="url"
value="jdbc:mysql://$OPENSHIFT_MYSQL_DB_HOST:$OPENSHIFT_MYSQL_DB_PORT/
yourdatabasename" />
can be replaced as below.
<property name="url"
value="jdbc:mysql://127.12.97.2:3306/yourdatabasename"
/>
jdbc:mysql://127.12.97.2:3306/yourdatabasename"IP地址和端口号可以从openshift phpmyadmin页面获取,通常显示在最上面管理页面。
我尝试了以上所有解决方案,但都没有解决我的问题。所以任何仍然遇到异常的人,试试这个。 存储在环境变量 $OPENSHIFT_MYSQL_DB_HOST 中的值类似于
'jdbc:mysql://adminuname:adminpass@127.02.0.1:3306/appname'
。因此,使用该值为 DriverManager.getConnection() 创建 url 会给我们带来异常。 相反,尝试知道存储在 $OPENSHIFT_MYSQL_DB_HOST 中的值,然后将 url 硬编码到没有该用户名和密码的字符串变量中。像这样
'jdbc:mysql://127.02.0.1:3306/appname'
对我来说,它在进行此修改后开始工作。所有其他环境变量都可以按原样使用。