我在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并且它不起作用,但这可能是由于代码不正确造成的。如果有人想写一些代码来说明如何做到这一点,我将不胜感激。如果你能测试它会更好:)
顺便说一下,在答案中请不要包含端口转发。我知道有效,我以前尝试过,端口转发工作。但它通常有点不安全,每次都必须从计算机启动。
答案 0 :(得分:12)
我自己解决了这个问题并且非常兴奋。虽然我自己没有得到帮助,但我希望有其他人来这个帖子并且能够让它运转起来!
所以我有一个Vaadin应用程序,它已被编译成WAR文件。我通过以下步骤将其部署到OpenShift服务器:
git clone ssh:\\xxxxxxxxxxxxxxxx...
Users/Username/Appname
创建一个项目目录。在该目录中,删除源文件夹和pom.xml
。将编译好的WAR文件复制到webapps
目录。cd Appname
,然后输入git add .
,git commit -m "Deployment"
,最后输入git push
。www.openshiftappname-domainname.rhcloud.com/warfilename
Add Cartidge
应用中心的openshift.com
提供。username
和password
到MySQL数据库,OpenShift会自动为您生成。转到www.openshiftappname-domainname.rhcloud.com/phpmyadmin
,输入身份验证凭据。127.x.y.z:3306
。 x, y, and z
可以是单个数字到三位数字。database
。我将其命名为test
,然后在其中生成一个名为testtable
的新表。转到编译到WAR文件中的打开IDE项目。如果它是Maven项目,请转到项目中的pom.xml,并添加依赖项:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.25</version>
</dependency>
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