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