[英]JDBC can't connect to mysql database on openshift
我设法用phpMyAdmin等在OpenShift上设置MySQL数据库。 有人告诉我我数据库的主机名和端口分别是$ OPENSHIFT_MYSQL_DB_HOST和$ OPENSHIFT_MYSQL_DB_PORT,将它们放在我的context.xml文件中,如下所示:
<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上尝试时,该代码有效。 据我所知,我拥有所有必需的库:
谢谢您的帮助 :)
更新资料
我修改了连接代码,如下所示:
{
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")
的值为空。
这是不正确的:
jdbc:mysql://$OPENSHIFT_MYSQL_DB_HOST:$OPENSHIFT_MYSQL_DB_PORT/burgerjoint
该美元符号表明您认为将替换适当的主机和数据库名称,但事实并非如此。
对主机名和数据库名进行编码以查看其是否有效,然后了解.properties文件以将其外部化。
删除美元符号:
String host = System.getenv("OPENSHIFT_MYSQL_DB_HOST");
String port = System.getenv("OPENSHIFT_MYSQL_DB_PORT");
而且它将很好用(我在我的机器和OpenShift上对其进行了测试)。
能否请您先尝试启动端口转发。
rhc port-forward -a your-app-name
一旦开始,不要杀死该cmd,而只需使用生成的本地地址/端口即可。
如果使用MySQL盒式磁带,则连接到数据库的信息在应用程序的环境变量中。 如果您使用的是JDBC pure,则需要首先检索值。 例如:
String host = System.getenv("OPENSHIFT_MYSQL_DB_HOST");
String port = System.getenv("OPENSHIFT_MYSQL_DB_PORT");
String username = System.getenv("OPENSHIFT_MYSQL_DB_USERNAME");
String password = System.getenv("OPENSHIFT_MYSQL_DB_PASSWORD");
String url = String.format(":mysql://%s:%s/jbossas", host, port);
Connection conn = DriverManager.getConnection(url, username, password);
字符串url中的jbossas
是架构。 更改您的架构( burgerjoint
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.