OpenShift webapps mysql java连接

时间:2014-08-25 02:50:08

标签: java mysql tomcat jdbc openshift

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

顺便说一下,在答案中请不要包含端口转发。我知道有效,我以前尝试过,端口转发工作。但它通常有点不安全,每次都必须从计算机启动。

2 个答案:

答案 0 :(得分:12)

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

所以我有一个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
  7. 完全正常运行

    MySQL访问

    1. 安装适用于MySQL和phpMyAdmin的磁带。这应该通过Add Cartidge应用中心的openshift.com提供。
    2. 请注意您的usernamepassword到MySQL数据库,OpenShift会自动为您生成。转到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的连接的基本步骤就是这样。
    6. Java代码

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

      <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.25</version>
       </dependency>
      
      1. 然后使用以下代码。
      2. 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。谢谢!

答案 1 :(得分:0)

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