我有这个安全相关的jar文件,将被多个应用程序使用,这个jar(使用mybatis)从数据库获取数据。现在假设添加/删除了DB中的某个字段,为了获得更多数据等,“加入”了一些新表。
我看到它的方式,我有两个选择:
更新mybatis映射中的查询并构建jar并告诉客户端使用该jar,因此每个客户端都使用最新版本。
这样做的缺点是,例如,如果我们已经在生产环境中拥有这个应用程序(使用“安全”jar)并且某人决定db中的某些内容是错误的,那么将此jar从本地部署到生产将需要得到某些人的批准,因此我们可能会失去一些时间来投入生产。我的案例中的生产问题必须尽快解决。
我没有在mybatis映射中查询(针对表),而是对已经定义的数据库视图进行查询,这样如果我们遇到一些“错误数据”,“添加/删除字段”db问题,那么我们只是对db进行了更改,并且不必将安全jar重新部署到生产环境,因为修复db视图实际上会反映最新的db更改而不需要生成jar。
我看到option2的方式具有“快速”修复db生成问题的优势,但Java代码并不反映最新的db更改。有了这个我的意思是,例如,如果删除了一个字段,应该从我的dto / domain对象中删除相同的属性,但是因为我们通过db视图修复了它,所以在最坏的情况下,“安全”jar客户端将获得该属性null /空白值。
基本上我的问题是,option2是可接受的解决方案,还是应该继续解决方案1?
任何人都可以推荐第三个选项,也许像OSGI(只是抛出一些想法)直接热部署jar文件到生产中(假设我没有得到客户的许多批准)?