关于Mybaits持久化问题

发布于 2021-11-29 07:17:07 字数 3919 浏览 810 评论 14

@黄亿华 你好,想跟你请教个问题:

首先上代码:

public class SaveSqlPipeline implements Pipeline {

    public SaveSqlPipeline(Date date, Employer employer) {
        this.date = date;
        this.employer = employer;
    }

    private Date date;
    private Employer employer;
    @Override
    public void process(ResultItems resultItems, Task task) {
        // TODO Auto-generated method stub
        System.out.println("get page: " + resultItems.getRequest().getUrl());
        PdfFile pdfFile = (PdfFile) resultItems.get("pdffile");
        pdfFile.setDate(date);
        String pdfId = employer.getEmpname()
                + new DateUtil().getDateTime("yyyyMMdd", date)
                + new common().getNumFromString(pdfFile.getPdfTitle());
        pdfFile.setId(pdfId);
        pdfFile.setIdEmp(employer.getId());
        ranking rank =new ranking();
        rank.setFileId(pdfId);
        rank.setTime(date);
        rank.setClicknum(0);
        new OperationDBData().SaveWebmagicData(date, pdfFile, rank, "SaveSqlPipeline.class");
    }
}

我的定制的Pipeline是这样写的,现在有一个问题:就是数据正常可以取到,我打印到控制台数据都在,但是每次在保存数据的时候报空指针错误

错误代码:

  get page: http://epaper.gmw.cn/gmrb/html/2015-05/30/nbs.D110000gmrb_12.htm
[ERROR]  05-2519:19:37[us.codecraft.webmagic.Spider-326][pool-1-thread-1][3934] - process request Request{url='http://epaper.gmw.cn/gmrb/html/2015-05/30/nbs.D110000gmrb_12.htm', method='null', extras={statusCode=200}, priority=0} error
  java.lang.NullPointerException
    at pw.sakalaka.Util.OperationDBData.SaveWebmagicData(OperationDBData.java:27)
    at pw.sakalaka.webmagic.SaveSqlPipeline.process(SaveSqlPipeline.java:52)
    at us.codecraft.webmagic.Spider.processRequest(Spider.java:424)
    at us.codecraft.webmagic.Spider$1.run(Spider.java:322)
    at us.codecraft.webmagic.selector.thread.CountableThreadPool$1.run(CountableThreadPool.java:74)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)

错误位置:new OperationDBData().SaveWebmagicData(date, pdfFile, rank, "SaveSqlPipeline.class");

public void SaveWebmagicData(Date date,PdfFile pdfFile,ranking rank,String position){
    pdfFileService.insert(pdfFile);
    rankingService.insert(rank);

//保存日志信息

SaveLoginfo(date, position, "插入数据:"+"pdfFile_id="+pdfFile.getId()+" ranking_id="+rank.getId());

}

望答复

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(14

乞讨 2021-12-01 13:50:10

public class OperationDBData {

@Autowired

PdfFileService pdfFileService;

@Autowired

RankingService rankingService;

@Autowired

LogInfoService logInfoService;

@Autowired

EmployerService employerService;

public void SaveWebmagicData(Date date,PdfFile pdfFile,ranking rank,String position){

    System.out.println("*****"+pdfFile.toString());

    System.out.println("*****"+rank.toString());

    //pdfFileService.insert(pdfFile);

    //    rankingService.insert(rank);

    SaveLoginfo(date, position, "插入数据:"+"pdfFile_id="+pdfFile.getId()+" ranking_id="+rank.getId());

}

}

筱果果 2021-12-01 13:49:49

思路:现在怀疑Service无法注入:在外面注入,然后当做参数传入。在调用。

秉烛思 2021-12-01 13:47:05

插入数据库测试:  LogInfo info=new LogInfo();

                                     info.setPosition("sdfghj");

                                     info.setErrinfo("asdfghj");

                                     loginfoService.insert(info);

结果:数据插入正常。。

泛泛之交 2021-12-01 13:46:39

方法一:

LogInfo info=new LogInfo();

        info.setPosition("sdfghj");

        info.setErrinfo("asdfghj");

        System.out.println(info.toString());

        sqlSession.getMapper(LogInfoMapper.class).insert(info);

报错。。。

德意的啸 2021-12-01 13:37:57

本来直接写的插入数据库的代码,同样报空指针,后来我就移出去了,然后还是报错

做个少女永远怀春 2021-12-01 13:25:57

我感觉你上面把这个类new出来了,这种方式是无法完成注入的,造成空指针

蓝颜夕 2021-12-01 13:03:50

要不等晚上我上自习的时候吧,今天一天课[10][10],晚上我把代码贴出来,谢谢 你了啊
@Pig-man

伪装你 2021-12-01 12:59:58

回复
晚上搞不定再联系我吧

孤檠 2021-12-01 09:55:04

不好意思啊[1][1]我在上课:relieved:,类就没法贴了[10][10][10]

陌上芳菲 2021-12-01 08:41:42

这个类里面是mybaits存储数据方法的集合

奢华的一滴泪 2021-12-01 08:24:15

就是pdffileService.insert(pdffile file)这样的方法,问题是爬取的数据正常,打印输出正常,但是我保存到数据库的时候,就报了一个空指针

能否归途做我良人 2021-12-01 08:17:45

数据库保存的方法正常,我测试了一下,数据正常插入

多情癖 2021-12-01 05:48:53

OperationDBData(),把这个类贴出来看一下

屌丝范 2021-12-01 04:38:10

public class SaveSqlPipeline implements Pipeline {

    public SaveSqlPipeline(Date date, Employer employer,LogInfoService  loginfoService) {

        this.date = date;

        this.employer = employer;

        this.loginfoService=loginfoService;

    }

    private Date date;

    private Employer employer;

    private LogInfoService loginfoService;

//数据插入

LogInfo info=new LogInfo();
        info.setPosition("sdfghj");
        info.setErrinfo("asdfghj");
        System.out.println(info.toString());
        loginfoService.insert(info);

问题在于:在自定义的Pipeline的里面无法自动注入,这可能是webmagin的一个bug。
解决;

  Spider.create(new webmagic_core())
                    //从"https://github.com/code4craft"开始抓
                    .addUrl("http://epaper.gmw.cn/gmrb/html/2015-05/30/nbs.D110000gmrb_01.htm")
                    .addPipeline(new SaveSqlPipeline(date,employer,loginfoService))
                    //开启5个线程抓取
                    .thread(5)
                    //启动爬虫
                    .run();

在这里:new SaveSqlPipeline(date,employer,loginfoService)把service当做参数传入,service在外面完成注入。
在这里谢谢@Pig-man的帮助。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文