直接揭晓答案
删除maven中spring-boot-devtools依赖
背景
当时有个项目,在Java中导入opencv做图像识别。
我先在普通Java项目里面做实验,等成功后再照搬进springboot里,跟着教程将opencv库的jar包和dll手动导进Java库里,导成功就开始敲代码了......最后终于成功识别,心想着终于干完啦,可以不用再对着这东西了!(途中遇到很多让人啼笑皆非的东西,例如把香蕉识别成大蒜。 ・ࡇ・)
问题出现!!!
随后按照之前的方式导入,代码适配,写好接口,用postman测试,报错了......
UnsatisfiedLinkError异常: unsatisfiedlinkerror报错是Java程序中的一种错误,通常是由于无法找到或加载本地库文件而引起的。这种错误通常会在调用本地方法时发生,因为Java虚拟机无法找到所需的本地库文件
连opencv都没有导进来?怎么回事?之后我加入了下面这段代码检测,结果是load success,明明能识别到文件存在呀。
头脑风暴了好一会儿,终于冷静下来,开始一步步纠错。
- 为什么之前的导入方式可以正常运行,到了现在这里就不行了呢,是导入opencv库的方式不对吗,接着就开始十八般武艺花式导入,不行✘
- 难道是库识别问题,我额外给maven加了一段本地opencv库的依赖,不行✘
- 之前是普通Java项目,现在变为了springboot,难道里面有什么变化导致这个结果?这回运气比较好,我先把问题定位在maven上,减少了不少试错。我将依赖逐个注释掉再跑,看看是不是有什么东西跟opencv冲突了,功夫不负有心人,找到了问题所在,把spring-boot-devtools注释掉后,跑成功了✔。 ✧(≖ ◡ ≖✿)
事后总结
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
spring-boot-devtools是干嘛用的,感觉也没用过他呀。一通翻找文档和gpt后,终于窥探其中一二了。 DevTools是一个开发工具,旨在提高Spring Boot应用程序的开发体验和效率。它提供了一系列功能和特性,有助于开发人员在开发过程中进行快速迭代和调试。
自动应用程序重启:DevTools可以监测代码的变化,并自动重新启动应用程序,以便快速查看修改后的效果。这样,开发人员无需手动重启应用程序,提高了开发效率。
热部署:DevTools支持在运行时替换应用程序的类文件,而无需重新启动整个应用程序。这意味着开发人员可以在不中断应用程序运行的情况下修改和调试代码。热部署功能可以加快开发周期,减少重新构建和部署的时间。
全局设置:DevTools允许在开发环境中进行全局配置,以便快速启用或禁用某些功能。例如,可以配置自动重启的延迟时间、禁用特定的自动配置等。
开发者工具页面:DevTools提供了一个开发者工具页面,可以通过浏览器访问。该页面显示了应用程序的详细信息,包括配置属性、Bean定义、请求映射等,方便开发人员进行调试和查看应用程序状态。
而问题则是出在DevTools自带的类加载冲突上,它使用了自定义的类加载器,可以在应用程序运行时加载修改后的类。然而,这种类加载机制可能会与某些特定的类库或插件产生冲突,导致意料之外的行为或错误。
问题解决,舒畅。