手写RPC框架(二十一)SpringBoot版

RPC框架Springboot版

移植

  • 问题:移植过程中出现依赖无法导入问题

    解决:依赖位置放的不对 放到了里面 这是版本号管理的地方

  • 问题:启动出现问题 slf4j包中有冲突

    LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation (class org.slf4j.impl.Reload4jLoggerFactory loaded from file:/E:/Java/maven/repository/org/slf4j/slf4j-reload4j/1.7.36/slf4j-reload4j-1.7.36.jar). If you are using WebLogic you will need to add 'org.slf4j' to prefer-application-packages in WEB-INF/weblogic.xml: org.slf4j.impl.Reload4jLoggerFactory
      	at org.springframework.util.Assert.instanceCheckFailed(Assert.java:702)
    

    解决:Spring Boot 项目一般都会引用 spring-boot-starter 或者 spring-boot-starter-web,而这两个起步依赖中都已经包含了对于 spring-boot-starter-logging 的依赖,所以,我们无需额外添加依赖。 测试类也是 加入了就不需要再加入了

  • 问题:报错 Error creating bean with name ‘requestMappingHandlerAdapter‘ defined in class path resource……
    解决:和jackson依赖有冲突 回退到2.11.4版本

  • **成功 开始测试 就是整合的有点问题 **

    • 问题 相关的数据库启动类 之类的Property ‘sqlSessionFactory’ or ‘sqlSessionTemplate’ are required 这些放了 依旧还是上面的问题

      		<dependency>
                  <groupId>mysql</groupId>
                  <artifactId>mysql-connector-java</artifactId>
                  <version>8.0.16</version>
              </dependency>
      
              <!--主要提供了三个功能:第一个是对数据源的装配,第二个是提供一个JdbcTemplate简化使用,第三个是事务。-->
              <!--其实这里并不用配置  因为底下的mybatis的启动类已经引入了对应包-->
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-jdbc</artifactId>
              </dependency>
      

      解决:忘记引入mybatis了

      <dependency>
          <groupId>org.mybatis.spring.boot</groupId>
          <artifactId>mybatis-spring-boot-starter</artifactId>
          <version>1.1.1</version>
      </dependency>
      
    • 遇到问题

      An attempt was made to call a method that does not exist. The attempt was made from the following location:
      org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory
      

      解决:下载了一个Maven Help去检查冲突的依赖 解决maven依赖冲突问题:An attempt was made to call a method that does not exist…_MTonj的博客-优快云博客

      这个 比较重要我感觉 报错不停 持续的问题 依赖

      就根据之前成功的配 不然这些有太多的问题 我这次的问题就是引入了太多的导致重复冲突
      还在努力的去配置 根据注解 排除掉了没有扫描到

    • 大bug(非controller 非controller、service引用,静态引用注入不进去) ⭐好好看看
      解决:解决非controller使用@Autowired注解注入为null问题(@PostCon。。。 - 百度文库 (baidu.com)
      在这里插入图片描述

      package com.rpc.zeng.common.monitor;
      
      
      import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
      import com.rpc.zeng.common.exception.RpcException;
      import com.rpc.zeng.common.monitor.service.RpcMonitorService;
      import lombok.extern.slf4j.Slf4j;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.stereotype.Component;
      
      import javax.annotation.PostConstruct;
      
      /**
       * @Author 祝英台炸油条
       * @Time : 2022/6/3 19:47
       **/
      @Slf4j
      @Component
      public class RpcMonitorOperator {
      
          @Autowired
          private RpcMonitorService rpcMonitorService;
      
          public static RpcMonitorOperator rpcMonitorOperator;
      
          @PostConstruct
          public void init(){
              rpcMonitorOperator = this;
          }
      
          /**
           * 作用 就是每次开启服务提供商的时候 删除掉所有的对应项目
           */
          public void deleteAll() {
              rpcMonitorOperator.rpcMonitorService.remove(null);
          }
      
          /**
           * 每次开启服务的时候 就进行添加对应的服务 当然 起始调用次数为0
           */
          public void addServer(RpcMonitor rpcMonitorServer) {
              rpcMonitorOperator.rpcMonitorService.save(rpcMonitorServer);
          }
      
          /**
           * 更新相应的服务  将相应的服务调用次数+1  同时update的时候  会自动的更改调用时间  做这个的时候 要上锁 防止线程冲突
           */
          public synchronized void updateServer(String methodAddress) {
              QueryWrapper<RpcMonitor> wrapper = new QueryWrapper<>();
              // 没问题 查询的时候 是跟对应的列名进行比较
              wrapper.eq("method_name", methodAddress);
              RpcMonitor rpcMonitor = rpcMonitorOperator.rpcMonitorService.getOne(wrapper);
              if (rpcMonitor == null) try {
                  throw new RpcException("监控中心出现错误");
              } catch (RpcException e) {
                  log.error(e.getMessage(), e);
                  return;
              }
              rpcMonitor.setCallNum(rpcMonitor.getCallNum() + 1);
              rpcMonitor.setCallTime(null);
              rpcMonitorOperator.rpcMonitorService.update(rpcMonitor, new QueryWrapper<RpcMonitor>().eq("id", rpcMonitor.getId()));
          }
      }
      
      
    • 提取了方法路径 防止因为路径的原因出错

  • 成功实现! 过几天搞个前后端联动一下!

  • 还要继续优化 很多方面 注解之类的选项

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值