• 整理SpringBoot整合MyBatisPlus+Dubbo问题解决方法


    her~~llo,我是你们的好朋友Lyle,是名梦想成为计算机大佬的男人!

    博客是为了记录自我的学习历程,加强记忆方便复习,如有不足之处还望多多包涵!非常欢迎大家的批评指正。

    这两天在学做项目,之前也学了spring、springmvc、springboot。那么现在就可以用springboot来做项目了,但是学的依然都只是皮毛,很多整合我都没有头绪,问题也很多。那么现在我就分享一下我在敲敲敲的时候遇到的掉头发问题。


    问题一:网上各式各样的Maven坐标,到底需要导哪个?

    这个问题真的是搞的我好头疼,终于成功解决。

    我用的是Zookeeper注册中心,按照的是Apache官方给的maven坐标,可以参考下面的链接配置。

    Annotation 配置 | Apache Dubbohttps://dubbo.apache.org/zh/docs3-v2/java-sdk/reference-manual/config/annotation/我跟官方里面的不一样,因为我导了dubbo-spring-boot-starter,代替了dubbo-bom。

    下面是我在父工程中的依赖管理。

    1. <dependencyManagement>
    2. <dependencies>
    3. <dependency>
    4. <groupId>org.springframework.bootgroupId>
    5. <artifactId>spring-boot-starterartifactId>
    6. <version>${spring-boot.version}version>
    7. dependency>
    8. <dependency>
    9. <groupId>org.springframework.bootgroupId>
    10. <artifactId>spring-boot-starter-testartifactId>
    11. <version>${spring-boot.version}version>
    12. dependency>
    13. <dependency>
    14. <groupId>org.springframework.bootgroupId>
    15. <artifactId>spring-boot-starter-webartifactId>
    16. <version>${spring-boot.version}version>
    17. dependency>
    18. <dependency>
    19. <groupId>org.apache.dubbogroupId>
    20. <artifactId>dubbo-dependencies-zookeeperartifactId>
    21. <version>${dubbo.version}version>
    22. <type>pomtype>
    23. dependency>
    24. <dependency>
    25. <groupId>org.apache.dubbogroupId>
    26. <artifactId>dubbo-spring-boot-starterartifactId>
    27. <version>${dubbo.version}version>
    28. dependency>
    29. <dependency>
    30. <groupId>com.baomidougroupId>
    31. <artifactId>mybatis-plus-boot-starterartifactId>
    32. <version>${mybatis-plus.version}version>
    33. dependency>
    34. <dependency>
    35. <groupId>org.projectlombokgroupId>
    36. <artifactId>lombokartifactId>
    37. <version>${lombok.version}version>
    38. dependency>
    39. <dependency>
    40. <groupId>mysqlgroupId>
    41. <artifactId>mysql-connector-javaartifactId>
    42. <version>${mysql.version}version>
    43. <scope>runtimescope>
    44. dependency>
    45. <dependency>
    46. <groupId>com.alibabagroupId>
    47. <artifactId>druid-spring-boot-starterartifactId>
    48. <version>${druid.version}version>
    49. dependency>
    50. dependencies>
    51. dependencyManagement>

    问题二:Dubbo + MybatisPlus报错'java.lang.invode.SerializedLambda' culd not be instantiated

    我启动了两个dubbo服务,一个服务提供者provider和一个消费者consumer。

    我在consumer的controller中这样写的(这段需要修改,不在这用IService的方法),

    1. LambdaQueryWrapper queryWrapper= new LambdaQueryWrapper();
    2. queryWrapper.eq(Manager::getPhone,phone);
    3. managerService.selectOne(queryWrapper);

    这个时候因为consumer用到了provider中的Service,而当前consumer和provider不在同一个服务,需要将wrapper序列化转至Service的服务,于是出现这个错误。

    而网上查询得知:wrapper不支持也不推荐进行dubbo传递

    所以,我们可以将这个写在一个服务里也就是provider,

    改成在服务实现类impl中这样写,再在consumer中直接调用该Service的这个方法。

    1. LambdaQueryWrapper queryWrapper= new LambdaQueryWrapper();
    2. queryWrapper.eq(Manager::getPhone,phone);
    3. managerDao.selectOne(queryWrapper);

    问题就可以解决。


    问题三:Failed to check the status of the service . No provider available for the service  from the url consumer

    排除异常的话就要选择重要的信息进行观察,Failed to check the status of the service ,这里的意思就是这个Service接口创建失败,后面的异常信息非常重要:No provider available for the service ,意思就是对于service来说,没有可实现的provider,消费者在访问提供者的时候失败了。

    我为什么会报这个错误呢,就是因为先启动了consumer的服务,服务提供者还没有,所以会失败,所以启动有个顺序,先启动provider再启动consumer。

    其他解决方案(网上搜索的,我就直接引用了)

    Dubbo默认(缺省)会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成,以便上线时,能及早发现问题,默认check=true,如果你的Spring容器是懒加载的,或者通过API编程延迟引用服务,请关闭check,否则服务临时不可用时,会抛出异常,拿到null引用,如果check=false,总是会返回引用,当服务恢复时,能自动连上。


    问题四:mybatis的关联映射查询细节问题

    这是我在项目开发时写的一段关联映射查询。搞了一晚上,mybatis没有学的太深入,踩了很多坑,第一次用到,就总结一下。以后用的就方便了。

    1. <mapper namespace="com.ylm.dao.DeliveryOrderDao">
    2. <resultMap type="com.ylm.pojo.DeliveryOrder" id="baseResultMap">
    3. <id column="id" property="id"/>
    4. <result column="userId" property="userId"/>
    5. <result column="time" property="time"/>
    6. <result column="productInfo" property="productInfo"/>
    7. <result column="status" property="status"/>
    8. <result column="money" property="money"/>
    9. <result column="updateTime" property="updateTime"/>
    10. resultMap>
    11. <resultMap type="com.ylm.pojo.DeliveryOrder"
    12. id="findByIdResultMap"
    13. extends="baseResultMap">
    14. <collection property="user"
    15. ofType="com.ylm.pojo.User"
    16. column="{id=userId}"
    17. select="com.ylm.dao.UserDao.selectById">
    18. collection>
    19. resultMap>
    20. <select id="getAllDeliveryOrderAndUser" resultMap="findByIdResultMap">
    21. select id,user_id as userId,time,product_info as productInfo,status,money,update_time as updateTime from product_delivery
    22. select>

    首先我们看一下重点collection的标签属性:
    property: resultMap返回实体类中字段和result标签中的property一样
    column: 数据库的列名或者列标签别名,是关联查询往下一个语句传送值。注意:在处理组合键时,您可以使用column=“{prop1=col1,prop2=col2}”这样的语法,设置多个列名传入到嵌套查询语句。这就会把prop1和prop2设置到目标嵌套选择语句的参数对象中。
    javaType: 一般为ArrayList或是java.util.List,
    ofType: java的实体类,对应数据库表的列名称,即关联查询select对应返回的类
    select: 执行一个其他映射的sql语句返回一个java实体类型

    问题细节说明:

    ①因为我的一个订单里只有一个User对象,而不是List,属性javaType不用配置。

    ②我的UserDao继承了MyBatisPlus提供的BaseMapper,select属性中的selectById方法是继承过来的,sql语句需要我们自己去想,因为要用到column传送值,可以想底层的selectById方法中语句中where 后面为 id = #{id} ,

    则column="{id=userId}"中id对应selectById方法中的#{id}的参数名称,userId对应getAllDeliveryOrderAndUser方法中“user_id as userId”的别名userId,没有别名就是字段名。

    ③getAllDeliveryOrderAndUser中最好不写成select * from product_delivery,有可能会报错。

    因为column传送值时,不知道字段名在哪。

    ④我开启了MybatisPlus配置全局的驼峰命名规则,sql中就用的数据库字段名,而不是实体的属性名,查询还是出现null,也不知道是什么情况,如果有报错那么写的sql语句就as成数据库中的字段名。

  • 相关阅读:
    【高效数据结构——位图bitmap】
    无法打开软件,因为计算机中找不到MSVCP140.dll的解决方法
    免疫浸润计算方法是CIBERSORT和ssgsea 画图
    Springboot+mybatis-plus+dynamic-datasource 切换数据源失败问题总结
    人工智能项目实战-使用OMR完成答题卡识别判卷
    活动报名|9月24日 Apache Flink Meetup · 北京站,Flink 1.16 新版本发布!
    MySQL具体有哪些锁以及锁的知识点
    SpringBoot+Kafka
    Linux系统双显示器4K分辨率配置
    基于昇腾计算语言AscendCL开发AI推理应用
  • 原文地址:https://blog.csdn.net/weixin_58035422/article/details/126208103