一尘不染

OpenShift WebApps mysql Java连接

tomcat

我在openshift上有一个JBoss EWS Tomcat 7 Java应用程序,安装有MySQL 5.5和PhpMyAdmin
4.0盒式磁带。我已经在本地复制了存储库,并删除了源文件夹。相反,我只是拥有一个已编译的Java应用程序(WAR文件),该文件已复制到webapps目录中,并且git被推送到OpenShift服务器。

如果我有一些数据库,如何在webapp编译的war文件中访问它。标准的MySQL
JDBC是否可以工作?根据我读过的一些文章,OpenShift阻止对数据库的外部请求的访问,在这种情况下,webapp目录的war文件可能正在发出“外部请求”。源代码在这里:https : //www.openshift.com/forums/express/external-access-to-
mysql(由著名的OpenShift开发人员回答)。

我实际上在过去尝试过JDBC,但没有用,但这可能是由于代码不正确所致。如果有人想编写一些代码来说明如何实现,我将不胜感激。如果可以测试,那就更好了:)

顺便说一句,在答案中,请不要包括端口转发。我知道这可行,我之前已经尝试过,端口转发也可行。但这通常有点不安全,并且每次都必须从计算机启动。


阅读 253

收藏
2020-06-16

共1个答案

一尘不染

我自己解决了这个问题,感到非常兴奋。尽管我自己没有得到帮助,但我希望其他人也可以使用此线程,并且能够使其正常工作!

因此,我有一个Vaadin应用程序,该应用程序已编译为WAR文件。我通过以下步骤将其部署到OpenShift服务器:

将已编译的Webapp部署到OpenShift

  1. 在网络浏览器中打开OpenShift。登录到Openshift。导航到有问题的应用程序。
  2. 获取位于墨盒右侧的该应用程序的ssh代码(应在屏幕右侧)。使用Command-C或Ctrl-C复制该代码。
  3. 打开终端并输入 git clone ssh:\\xxxxxxxxxxxxxxxx...
  4. 如果您像我一样使用Mac,则应在上创建一个项目目录Users/Username/Appname。在该目录内,删除源文件夹和pom.xml。取出编译的WAR文件并将其复制到webapps目录中。
  5. 转到终端。键入cd Appname,然后git add .git commit -m "Deployment"和最后git push
  6. 您的应用程序现在应该可以在 www.openshiftappname-domainname.rhcloud.com/warfilename

MySQL访问

  1. 安装用于MySQL和phpMyAdmin的墨盒。应该可以通过Add Cartidge您的openshift.com应用程序中心访问。
  2. 注意您usernamepasswordOpenShift自动为您生成的MySQL数据库。转到www.openshiftappname-domainname.rhcloud.com/phpmyadmin,输入身份验证凭据。
  3. 在phpMyAdmin内部应该有服务器IP地址;看起来像127.x.y.z:3306x, y, and z可以是一位数字到三位数字。
  4. 快速创建一个新database名称,随心所欲。我要为其命名test,然后在其中生成一个名为的新表testtable
  5. 那么还记得您部署的WAR应用程序吗?好吧,如果您使用的是MySQL,我敢打赌您已经将它包含在应用程序中了。建立与MySQL的连接的基本步骤就是这样。

Java代码

转到编译为WAR文件的开放IDE项目。如果它是Maven项目,请转到项目内部的pom.xml,并添加依赖项:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.25</version>
 </dependency>
  1. 然后使用以下代码。

String s = "jdbc:mysql://" + host + ":" + port + "/" + name",其中host是server IP address,端口3306和名称是database name,在我的情况,test

try {
    Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
     e.printStackTrace();
}

try {
    Connection con = DriverManager.getConnection(s, username, password);
}
catch (SQLException e) {
    e.printStackTrace();
}

现在if (con == null)它不起作用了。如果不是null,那就可以了。

要进行测试,您应该重新编译WAR文件(在进行某种形式的可视化测试之后)。如果您需要进一步的帮助,请发表评论。当您编译WAR文件并重4-6做第一部分中的步骤时,它应该可以工作Deployment of compiled webapp to OpenShift。谢谢!

2020-06-16