• spring项目发布到linux上遇到的错


      在将一个spring项目部署到linux上的tomcat中时遇到了以下错误。(以下所有错误的前提都是项目在idea中正常运行)

    1. tomcat10

      一直报错。第一个错误是无法将  org.springframework.web.filter.CharacterEncodingFilter 转换为  jakarta.servlet.Filter 这个是tomcat中的filter。而CharacterEncodingFilter 实现的是javax.servlet.Filter。这个问题我一直找不到,后来发现从tomcat8以后,tomcat的request默认采用UTF-8格式进行编码,也就是不必要在web.xml中添加CharacterEncodingFilter 。

      然后我将CharacterEncodingFilter 去除了,不报这个错了。但是又报了dispatchservlet无法转换为jakarta.servlet.Servlet(还是tomcat的servlet)。

      

     没办法,我试过将 javax.servlet-api 的scop改为provided,依然不行。我觉得可能是tomat10这个服务器有什么问题未解决,或者想换的错误案例较少,所以我更换成了tomcat8。果然这个错误不再发生了。

    2. tomca8

      tomcat8启动找不到mybaits.yml文件,这个文件是在我的dao 模块中的resources文件家下,也就是mybatis.yml在dao的jar类路径下,然后我在dao 模块中使用@configuration完成bena的注册。这个bena的注册在idea中是可以正常获取实例的(可以找到mybatis.yml资源),但是在tomcat8中(和tomcat8无关)提示找不到,因为我之前是用的classloader.getresources方法获取资源,因为改方法不支持classpath*模糊查找,所以我更换为PathMatchingResourcePatternResolver,这个类在spring中支持查找classpath*,即在全项目路径中查找资源,这个类帮助我在idea中找到了jar包中的资源,但是在tomcat中这个类也无法正确的找到mybatis.yml这个资源,所以我将所有的属性配置文件全部放在了war包模块的resources文件夹下,这个问题先暂时以这种方式解决,后续有解决方案的时候再来解决。

      这个问题解决了,此时又报了另一个错误,如下图:

       看了这个文章:https://www.cnblogs.com/qianzf/p/7753737.html,我觉得应该是同样的问题,即tomcat对于不同保本的jar选取版本低的加载。我觉得这个DEFAULT属性应该是在低版本中无法找到对于的类。

    所以我将core依赖给注释掉了。至此,问题全部解决,部分问题后修解决。

  • 相关阅读:
    MyBatis缓存
    MyBatis动态SQL
    MyBatis中#{}和${}的区别
    MyBatis映射配置文件详解
    MyBatis核心配置文件详解
    MyBatis动态代理
    KO ------- 表中字段名和实体类属性名不一致
    对实体类的CRUD操作
    MyBatis配置数据源的两种方式
    MyBatis入门
  • 原文地址:https://www.cnblogs.com/YsirSun/p/12509862.html
Copyright © 2020-2023  润新知