前言
本人这两年都在独立维护某个多语言java+python+c架构的安全项目,每次给客户部署系统的时候都会有一个问题出现,就是数据库的表会被系统启动后进行实体对应更新字段,以至于某个类id命名总是会覆盖到数据库表,造成部署失败,在一个无网络的远程环境去更新部署项目是最麻烦的,但是最严重的不是这些,而是本人的懒惰症!!!因为即使这个问题存在,我也重来没去重视过,每次都是手动去解决重新维护该表,而不是从根本上解决
问题
在springboot2.6环境下,使用application配置文件,我们通常会在数据库连接中增加jpa的配置,当然这种方案是针对使用jpa项目而非mybatis,我为什么习惯用jpa是因为实在不想写一堆繁琐的xml文件,当然在某些需求某些环境某些项目必要的情况下还是需要针对性的去使用对应的框架。好了言归正传,
那么在配置jpa的过程中我们使用了:
jpa:
database: mysql
show-sql: true
hibernate:
ddl-auto: update
之所以要用update是为了保证项目开发中实时自动的表以及表更新并进行对应的实体->数据库表的同步,当然这种做法是好的,也是高效率的。问题就出现在当你要部署项目的时候,通常你将以前的数据库表结构进行部署更新,而新增的表结构并没有维护到以前的数据库表结构中,当然这种情况其实很少会出现,然而我在这个项目中遇到了。
解决
这里我将 ddl-auto: none 修改了配置,因为对于我来说,在这个项目表设计和实体设计完全独立工作,我并不打算将他们混为一谈,并且这个项目新增修改相对已经较少,并非开发阶段。这样有一个好处是每次的表结构新增或者修改我都会完全掌控并且清晰的认识到哪里要维护修改,这样对于我们的业务有一个全局把握;坏处是每次实体更新变动,你都要去维护你的数据库表,这样会繁琐,但是我认为这不是问题,毕竟作为一个程序员这点小工作是很有必要的,问题在于我们去维护数据库表的同时能更详细的去操作字段的某些属性。