【问题标题】:OpenShift webapps mysql java connectionOpenShift webapps mysql java连接
【发布时间】:2014-10-18 03:49:57
【问题描述】:

我在 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,但它不起作用,但这可能是由于代码不正确。如果有人想编写一些代码来说明如何做到这一点,我将不胜感激。如果你能测试它会更好:)

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

【问题讨论】:

  • 你为什么不试一试,如果你遇到任何问题,让我们知道,而不是告诉我们做代码甚至测试
  • @ThusithaThilinaDayaratne 我试过了。我是整个 OpenShift 开发场景的新手,JDBC 连接不起作用。我收到找不到数据库连接的错误。顺便说一句,我不是告诉你做什么,你想提供多少帮助是你的选择。如果您不想提供任何帮助,那很好,但是我建议您无论如何都不应该经常访问 SO 论坛,更不用说留下恼人的 cmets。谢谢。
  • @ThusithaThilinaDayaratne 我已经彻底明白了,谢谢。我有一个问题要问您,您是否有任何使用 OpenShift 编译的战争文件部署 (Java) 的经验?如果没有,我建议您不要发布任何进一步的 cmets。谢谢。
  • @ThusithaThilinaDayaratne 相信我,这个应用程序开发根本不用于任何商业目的。我不是想赚钱,实际上这是一个志愿者项目。作为一个对云部署知识水平相对较低的高中生,我希望人们至少能够将我引导到某个方向,而不是告诉我“试一试”,当我已经说过由 JDBC 连接引起的问题,无法找到适当的解决方案。

标签: java mysql tomcat jdbc openshift


【解决方案1】:

尝试查看此 KB,了解在 OpenShift 上使用 java 服务器卡式盒时可用的默认 mysql/postgresql 连接:https://help.openshift.com/hc/en-us/articles/202399720-How-to-use-the-pre-configured-MySQLDS-and-PostgreSQLDS-data-sources-in-the-Java-cartridges

【讨论】:

    【解决方案2】:

    我自己解决了这个问题,非常兴奋。虽然我自己没有得到帮助,但我希望其他人能来这个帖子并且能够让它工作!

    所以我有一个 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 安装墨盒。这应该可以通过您的openshift.com 应用中心的Add Cartidge 获得。
    2. 将您的 usernamepassword 记入 OpenShift 自动为您生成的 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",其中主机是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。谢谢!

    【讨论】:

    • 我和你做的一模一样,但是为什么我连接不上数据库?
    • 您说“在 phpMyAdmin 内部应该有服务器 IP 地址;它看起来像 127.x.y.z:3306。x、y 和 z 可以是一位数到三位数字。”但是我如何在不输入 PhpMyAdmin 的情况下获得这些信息? ://
    • SSH 到您的应用程序并执行以下命令(不带引号):“echo $OPENSHIFT_MYSQL_DB_HOST”和“echo $OPENSHIFT_MYSQL_DB_PORT”——您将看到连接的 IP 和端口。
    猜你喜欢
    • 2014-12-21
    • 2016-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2016-02-04
    相关资源
    最近更新 更多