最近一个项目在测试的时候发现有未知错误,这是一个接口系统【推荐阅读:springboot统一异常处理】记录错误日志,下面是部分错误日志
java.lang.RuntimeException: org.springframework.dao.TransientDataAccessResourceException: Error attempting to get column 'birthday' from result set. Cause: java.sql.SQLException: Zero date value prohibited ; SQL []; Zero date value prohibited; nested exception is java.sql.SQLException: Zero date value prohibited org.springframework.dao.TransientDataAccessResourceException: Error attempting to get column 'birthday' from result set. Cause: java.sql.SQLException: Zero date value prohibited ; SQL []; Zero date value prohibited; nested exception is java.sql.SQLException: Zero date value prohibited
之前使用测试账号的时候一直没有这个问题,查询数据库发现数据库设置的时候默认birthday日期是“0000-00-00”,这个数据库设计表示服了,之前没有遇到过,后台系统是用php写的所以在查询的时候没有出现什么错误,但是java不行,java是一个强类型语言,设置的date类型,这个date类型是不合法的,所以导致程序出错,刚开始想这个把这个mybatis查询的对象设置成string,或者修改数据库数据库的默认值,但是后来发现还有好多的时间类型都设置成了“0000-00-00”这种格式,全部修改比较麻烦,下面推荐一种比较好的方法
修改jdbc mysql的连接参数,添加参数如下
eroDateTimeBehavior=CONVERT_TO_NULL
这样时间类型就没有问题了
PS.我这里配置都是用的Apollo(阿波罗)是携程框架部门研发的分布式配置中心来配置数据库的,必须重启应用才能生效