闲扯
最近手上又点闲钱,并且听说Mac的M1芯片对于开发来说很香,所以一咬牙把自己才入手半年的yoga 14s出手了,换了一台M1芯片的Mac Pro。入手的感觉是真的香,给我的第一感觉是速度贼特么快,我用yoga打包项目需要一分钟,用mac只需要20秒完成(这是问题解决之后的尝试)。但是由于M1的是arm架构的,所以以前很多在x86架构上完美运行的软件或者环境都出错了,花了很久的时间安装环境、软件。正准备开心的时候的时候,当我启动项目突然发现报错,我这个项目用到了sqlite和sqlServer两种数据库,所以我在换了mac之后,这两个驱动都不能用了。于是啊,我就百度,对于sqlite的驱动还好说,因为它的开发人员已经解决了,适配了arm架构(sqlite驱动的3.32.3.3版本),因为这个很好解决,只需要更换jar包就可,所以不多做说明。重点说一下sqlServer驱动在M1版本上的报错解决:
问题复现
因为在写这个的时候,我的问题已经得到解决,所以我的报错的话没有去复现。这里我截的一张和我的报错差不多的图来说明。
对了,需要说明一下我的环境,我所用的是Idea2021,然后JDK使用的是zulujdk.18(因为据说已经适配了ARM架构,并且一键安装不需要配置Java的环境变量)
。
痛苦的过程
一开始遇到这个问题,我也是一直在百度。然后上班一直在解决这个问题(实则是在摸鱼,有差不多两天的时间我一行代码没写,就一直在解决这个问题,但是当时也没解决)。可是我也不能一直摸鱼啊,因为每周的任务都是定量的,周末完不成任务就惨了,所以我一度跟同事抱怨垃圾M1(我把M1丢在了一边,用起了公司给配的台式机,编译打包一次项目2分钟😭)。
网上说的方案主要有三种:
第一种 驱动版本问题
jdbc驱动版本太低,更换驱动版本
我的sqlserver驱动的版本如下:
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
</dependency>
我把它换成了sqljdbc8
,然后重新启动项目,然并卵,问题没解决。于是我又尝试了第二种方式。
第二种 java环境的问题
此时我怀疑zulu说的话是假的,说什么不用配置Java环境变量(虽然我已经java -version打印出java版本)。于是,我又强行配置了环境变量,期间甚至重装了很多次jdk,也尝试过换成openjdk,然而,都没有什么作用,于是就有了第三种解决方法。
第三种
这种方式的做法是修改一下jre/lib/security/java.security
中的一个配置项,文件位置如下图所示:
网上各种帖子说的都是删除上图配置项下的红色框标识的值,然后就行了,有的还说需要重启系统。我试了一下,反正对我是没有效果。其实这种方式是网上提到的最多的一种解决方式,也是我最终解决问题的一种方式。
随后我就在此基础上,又查到一个帖子,它另外提到了还需要删除以下几个值:
还是那个文件,还是那个配置,只不过我们需要删除的有三个值:TLSv1、TLSv1.1和3DES_EDE_CBC。
删除这三个之后,重启项目我就发现问题竟然解决了,于是我又用上了mac,真香!!!
最后
以上是我在基于M1芯片下zulujdk下使用sqlServer驱动遇到的问题的解决,可能别的几种方式也能解决你的困扰也说不定。