在使用多线程的时候 实现Runnable 方法并重写 run()方法,怎么在run中使用 mapper操作数据库?
使用 @Autowired 注入mapper 报 空 (Exception in thread "main" java.lang.NullPointerException)
@Autowired
private FillIdleMapper mapper;
@Override
public void run() {
//具体实现逻辑代码
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
String flowId = "572912406616461312";
String mxName = "CUSTOMER_PRODUCT";
List<TxRecordRegistryBack> list= mapper.getTxList(flowId,mxName);
if (list != null && list.size()>0){
for (int i = 0; i < list.size(); i++) {
TxRecordRegistryBack back =list.get(i);
log.info("========时间======"+new Date());
log.info("========返回的对象数据======"+i+" 参数:"+back);
}
}
}

想要获取@Autowired注入的对象,自己本身也要被动态代理才行。这个地方你想在run方法中使用这个对象,有两种办法
1、在另一个有@service或者@component注解的类中引用mapper,在这个类中创建这个线程把mapper当做变量传入
2、在线程这个类中,使用SpringContextUtil通过getBean的方式获取mapper