Docker创建MySql服务,Navicat能连,项目代码却保错

Docker创建MySql服务,Navicat能连上,项目代码却保错,一样的IP、端口、密码,给我整懵了!

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210119184914853.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTE1NTIzNQ==,size_16,color_FFFFFF,t_70
在这里插入图片描述
如图,Navicat和IDEA自带的Database插件都能连接成功。项目datasource的配置完全一致。
在这里插入图片描述
然而,项目运行后总是说连接数据库失败。
经反复尝试,排除了代码写错的原因,也排除了jdbc.url中设定serverTimezone、characterEncoding等参数的影响。
最后,发现是当前mysql驱动版本不支持当前Docker的MySql服务所导致的。
我之前的mysql驱动版本是5.1.9,换成5系列最新版本5.1.49后连接成功。
在这里插入图片描述
在解决问题的过程中,又发现了两个问题
1、Docker创建的MySql服务并不支持localhost形式的数据库连接方式,虽然项目包上传到服务器后理论上可以使用localhost的方式访问服务器上的数据库。但经测试,这种方式不可行,使用Docker创建的MySQL服务,最好使用真实IP作为数据源连接方式。
2、Maven生命周期打包项目和IDEA自带打包项目方式的区别。

Maven打包项目

在这里插入图片描述
这种方式对项目的要求较高,在打包过程中,maven会自动测试你的代码是否存在错误。即使是测试类中的单元测试没有通过,也会导致项目打包失败。
另外,如果项目中有某个第三方包没有交给maven管理,而是交给额外配置的Tomcat管理,比如net.sf.json.JSONArray,也会导致项目打包失败。Maven项目最好把所有第三方包都交给maven管理。
特别注意:
Maven生命周期中的package(打包)基于compile(编译),也许项目在Tomcat的运行下是正常的,但单独使用compile进行编译可能会失败,比如没有添加resources目录的映射。
在这里插入图片描述
Maven生命周期中的compile(编译)需要配合clean(清空)使用,一旦编译失败,记得清空后再重新编译。

IDEA自带的打包功能

如下图,Artifacts中所有的非exploed的项目包都可以打成war包
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这种打包方式对项目的要求较低,Maven打包方式无法通过的话,可以尝试这种打包方式。

总结:两种打包方式都是将war包放到了target根目录下。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值