Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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 查找subversion项目结构中配置和数据库架构文件的正确处理方法_Java_Database_Svn_Maven_Database Migration - Fatal编程技术网

Java 查找subversion项目结构中配置和数据库架构文件的正确处理方法

Java 查找subversion项目结构中配置和数据库架构文件的正确处理方法,java,database,svn,maven,database-migration,Java,Database,Svn,Maven,Database Migration,在SVN中,我们有一个使用hibernate等的所有数据库逻辑的项目。但是,该项目取决于数据库模式处于与代码匹配的特定状态 此外,我们还将在配置目录中运行服务器的配置脚本 如何在SVN中正确设置项目结构以克服此问题 结构可以是这样的: --DBHibernateProject ------trunk ------branches ------tags --DatabaseScriptsProject ------trunk ------branches ------tags --ConfigPr

在SVN中,我们有一个使用hibernate等的所有数据库逻辑的项目。但是,该项目取决于数据库模式处于与代码匹配的特定状态

此外,我们还将在配置目录中运行服务器的配置脚本

如何在SVN中正确设置项目结构以克服此问题

结构可以是这样的:

--DBHibernateProject
------trunk
------branches
------tags
--DatabaseScriptsProject
------trunk
------branches
------tags
--ConfigProject
------trunk
------branches
------tags
----DatabaseProject
-------trunk
--------DBHibernateProject
--------DatabaseScriptsProject
-------branches
-------tags

----OtherProject
-------trunk
-------branches
-------tags

----ConfigProject
-------trunk
-------branches
-------tags

但是我们如何将数据库脚本项目与DBHibernateProject的1.0版联系起来呢?hibernate项目在maven repo中有一个可部署资产(jar),但db脚本没有。我想确保正确的db脚本与应用程序的正确版本相关联。

您可以通过流程或制作一个SVN项目来完成

您可以为团队制定一条规则,即当您完成一组数据库内容时,您可以使用一个标记对其进行标记,该标记与它使用的代码的标记相同。这可能很乏味,但如果数据库和代码之间的更改通常是同步的,那么这是可行的


另一种方法是在SVN中创建一个项目,其中包含一个主干、一组标记和分支。然后在repo的顶层有一些文件夹来保存代码、脚本和hibernate内容,从而完成同样的任务。可以管理您的SVN repo上的权限,以便不同的人对特定文件夹具有写入权限,但这会造成每次分支时不断修改权限的成本(如果您愚蠢地允许修改标记,则可能会添加标记)

我强烈建议使用来管理您的数据库迁移。更改文件是从类路径读取的,这意味着它们可以与匹配的Hibernate类文件一起部署在同一个jar中

我从未使用过它,但liquibase确实有一些支持,这可能会证明是有用的

有关Maven示例,请参见:

对于更多的理论性阅读,我建议:

为了公平起见,在同一功能空间中还有一些其他工具:

如果“项目依赖于…”意味着“对于DBHibernateProject的每个修订版,我们必须使用DatabaseScriptsProject和ConfigProject的预定义和固定修订版(它们在DBHibernateProject树中使用/引用)”,则始终可以使用纯Subversion端解决方案:带有PEG修订版的外部

如果不了解源代码树结构,“依赖”和“也有配置脚本”是不可翻译(容易)为形式依赖的,比如(我糟糕的重建)

DBHibernateProject的每次修订都必须有相关的 DatabaseScriptsProject(用于此代码的正确架构)和 ConfigProject(用于生成数据库架构的脚本,即 由DBHibernateProject使用)


如果我的重建是正确的,我将以Subversion风格(没有Maven,这可能是我的错误)在DBHibernateProject树中创建两个目录类型external,它引用“处于某种状态的某棵树”分别在DatabaseScriptsProject和ConfigProject树中

数据库项目的单个项目布局不能如下所示:

--DBHibernateProject
------trunk
------branches
------tags
--DatabaseScriptsProject
------trunk
------branches
------tags
--ConfigProject
------trunk
------branches
------tags
----DatabaseProject
-------trunk
--------DBHibernateProject
--------DatabaseScriptsProject
-------branches
-------tags

----OtherProject
-------trunk
-------branches
-------tags

----ConfigProject
-------trunk
-------branches
-------tags
如果配置项目没有绑定到其他项目,而只是服务器的脚本,那么我猜您可以将其作为与其他项目相同的布局

  • 将所有SQL脚本保存在SVN中
  • 不允许修改它们(如果要更改某些内容,请创建包含正确SQL语句的新SQL文件)
  • 配置maven dbpatch插件

  • 正如您已经在标记中提到的maven,为什么不使用依赖项的版本呢?当脚本项目实际上没有资产(war、jar等)时,如何使用它的依赖项呢。这仅仅是一个pom依赖关系吗?我考虑过SVN中的单个项目,但大多数人使用的项目似乎少于多个项目。我们希望使用多个项目,因为我们将有不相关的项目。另外,一些使用数据库的项目可能有自己的版本。IE-ProjectA1.0使用DBProject1.0,而ProjectB2.0使用DBProject1.0。