Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将基于Hibernate的J2EE应用程序部署到远程服务器的正确方法_Java_Hibernate_Spring_Deployment - Fatal编程技术网

Java 将基于Hibernate的J2EE应用程序部署到远程服务器的正确方法

Java 将基于Hibernate的J2EE应用程序部署到远程服务器的正确方法,java,hibernate,spring,deployment,Java,Hibernate,Spring,Deployment,我在这里开发了一个非常可怕的Java应用程序。到目前为止,它只部署在我本地安装的Tomcat/MySQL安装程序上 为完整起见,该应用程序是一个在线游戏服务器,使用Spring、Hibernate编写,MySQL当前位于后端 现在,我可以很容易地将战争打包并在远程服务器上获得它。。问题在于数据库。现在它是用一个ANT脚本生成的,该脚本使用Hibernate(具体地说,HBM2DDL ANT任务)生成模式,然后用静态SQL和两个基于ANT的解析器组合填充数据库,这些解析器从其他数据(主要是XML)

我在这里开发了一个非常可怕的Java应用程序。到目前为止,它只部署在我本地安装的Tomcat/MySQL安装程序上

为完整起见,该应用程序是一个在线游戏服务器,使用Spring、Hibernate编写,MySQL当前位于后端

现在,我可以很容易地将战争打包并在远程服务器上获得它。。问题在于数据库。现在它是用一个ANT脚本生成的,该脚本使用Hibernate(具体地说,HBM2DDL ANT任务)生成模式,然后用静态SQL和两个基于ANT的解析器组合填充数据库,这些解析器从其他数据(主要是XML)中读取数据。之后,我创建了一个完全创建的数据库,其中填充了游戏服务器“启动”数据集

问题是Java有点绿色,我不知道什么是正确的部署方式

我应该:

  • 从我的本地MySQL导出SQL并在新服务器上手动导入?哎哟
  • 让ANT脚本不那么糟糕(它现在有很多硬编码的目录)并在服务器上运行它
  • 我不知道的优雅的选择

  • 另一个复杂的问题是,WAR将转到不同的服务器,而不是MySQL数据库。是否有一本Java书籍或web资源可以全面解决这些部署问题?

    您可以使用Hibernate hbm2ddl任务为您创建模式。不过,它不会填充任何参考数据。我经常使用JUnit任务和配置来运行它一次,然后继续运行。

    我做了类似的事情,创建了ant目标,将ant脚本推送到远程机器,ant脚本有一个目标来生成DB。因为您已经有了生成模式和初始化数据库的ant目标,所以您可以将现有ant脚本推送到远程机器(假设远程机器具有相同的工具集)


    您可以使用scpant任务进行远程复制,使用sshexec进行ant和脚本的远程调用。

    我认为有3个选项:

  • 更改ANT脚本以远程计算机上的DB为目标。您可以在本地计算机上运行它,因此无需更改:它将在相同的位置找到必要的文件。这种方法的主要缺点是通过网络(internet)执行大量SQL可能会很慢
  • 将架构从本地(生成)数据库导出到新数据库。如果您的数据库支持某种二进制格式,则不必是SQL。通常这是最快、最不容易出错的方法,但如果远程数据库的配置与本地设置(例如字符集)略有不同,则可能会出现一些非常微妙的问题
  • 在服务器上运行ANT脚本。最大的问题是,您的数据库服务器必须拥有所有必要的工具(如ant和java)以及所有源文件(hibernate映射),而它通常(作为数据库服务器)不需要这些源文件

  • 谢谢你的回答。看起来2号是3个解决方案中最优雅的。