Thrift[springboot使用Thrift时,遇上抽象类要实例化的问题]

A:前言:   这几天做了一个项目一个功能,需要用到Thrift进行多语言交互[java-->c#]

B:功能:   c#作为客户端[桌面软件],调用服务端[java]接口,登录的时候把用户密码传给服务端,服务端接收后,在调取数据库数据[MySql], 进行判断,然后返回true,false

C:工作的流程:   1.作为服务端,写个接口给c#

                        2.客户端c#调用接口给服务端传数据

                       3.服务端接收数据从数据库调取数据进行判断[这部分报错无发查询数据库数据]

                        4,.向客户端返回false,true--->也就是登录用户密码的验证

D:环境: STS[spring出的跟eclipse一样]/JDK1.8/gradle管理项目[封装了maven]/SSM/阿里MySQL数据库/springboot

E:问题解决的艰辛路程:

      1.在服务端接受数据的时候,在调用数据库的时候注入不上,只能new,但new就会出现以下问题[下面出现的问题跟我一样就 转载了(注:就下面这一幅图是转载)]

@Controller
public class TransmitServiceImpl implements TransmitService.Iface
{
    @Autowired
    private ITransactionDataRepository TransactionDataRepository;//注入(实际情况是null)
    
    ...
    
    @Override
    public boolean transmitData(TransactionData transData) throws TException//通过Thrift调用的函数
    {
        ...
        TransactionDataRepository.save(...);//写入持久层(此时报空指针错误)
        ...
    }
}
    2:我刚开始以为是没有把Thrift加入spring管理,但在网上查的都是xml文件配置的,好不容易在一个外国的网站找到了用spring管理的,但还是不行,只好查询资料,听说此时无法注入,只能通过new的方式。但是ITransactionDataRepository是抽象的,我无法实例化;找了1天试了好多方法

   3.怎么办那,我想到一个解决方法:就是静态方法!下面就说说我的思路:

         a:写一个专门存储用户名+密码的javaBean


      b:在写一个静态方法(单例)+静态list,list存储上面的类

     

      c:在项目启动的时候,把用户的密码+账户号放到静态list里面

      d:这样客户端传入数据的时候服务端接受直接对比list集合里面的就OK问题解决了

F:注意: 1.放到一个线程里面要不取到的只会是null

           2.用户管理的增删改差也需要对list集合的数据进行更新保证list集合的数据跟数据库数据一样

G:总结:有时候还一个思路方式,可以解决问题不要死在一个思路上,要灵活应用我们所知道的知识,之前我想到放到cookie里面但出现情况也不行,rides里面也想过[但没试],几个作用域都试了下,还有一种就是建个中间服务器[像QQ那样,两边都是客户端,但是我这是个后台管理没必须,用户量不大];因我这是个后台管理的项目,最后想到了这个比较方便解决了问题,

H:结语:这是我第一次写博客,有什么不对错误的地方希望大牛们能指出来,我以后会把我做项目的经验和遇到的问题总结出来,帮助更多的人少踩点坑,若那些大牛们能有更好的方法希望写出来,请大牛们多多指教


         

                     

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页