Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java can';在非web应用程序中使用@Autowired时不注入存储库_Java_Hibernate_Jpa_Spring Boot_Dependency Injection - Fatal编程技术网

Java can';在非web应用程序中使用@Autowired时不注入存储库

Java can';在非web应用程序中使用@Autowired时不注入存储库,java,hibernate,jpa,spring-boot,dependency-injection,Java,Hibernate,Jpa,Spring Boot,Dependency Injection,我想在我的spider应用程序中使用SpringBootJPA,我已经有了maven依赖项、模型、modelRepository和application.properties。在我使用注解@autowired来使用这些存储库之后,它将有一个NullPointerException。我如何在我的蜘蛛中使用它们? 这是我的蜘蛛 @Component public class Crawler implements PageProcessor { SimpleDateFormat sdf =

我想在我的spider应用程序中使用SpringBootJPA,我已经有了maven依赖项、模型、modelRepository和application.properties。在我使用注解@autowired来使用这些存储库之后,它将有一个NullPointerException。我如何在我的蜘蛛中使用它们? 这是我的蜘蛛

@Component
public class Crawler implements PageProcessor {
    SimpleDateFormat sdf =   new SimpleDateFormat( " yyyy-MM-dd HH:mm:ss " );
    @Autowired
    ArticleRepository articleRepository;
    @Autowired
    CategoryRepository categoryRepository;
    @Autowired
    NewsRepository newsRepository;
    @Autowired
    SourceRepository sourceRepository;
    public static String content;
    private Site site = Site.me().setRetryTimes(0).setSleepTime(100000000);
    public void process(Page page) {
        Pattern pattern = Pattern.compile("artiList\\((.*)\\)");
        Matcher matcher = pattern.matcher(page.getRawText());
        String json = null;
        if (matcher.find()) {
            json = matcher.group(1);
        }
        ObjectMapper mapper = new ObjectMapper();
        JsonNode rootNode;
        try {
            rootNode = mapper.readTree(json);
            JsonNode mainJson = rootNode.path("BAI6RHDKwangning");
            Iterator<JsonNode> iterator = mainJson.elements();
            String cur = null;
            JsonNode mark = null;
            List<Map<String, Object>> list = new ArrayList<>();
            while (iterator.hasNext()) {
                mark = iterator.next();
                cur = mark.toString();
                Map<String, Object> map = mapper.readValue(cur, Map.class);
                list.add(map);
            }

            dbService(list);

        } catch (IOException e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }
    public void dbService(List<Map<String, Object>> list) {
        try {
                for (Map<String, Object> map : list) {

                    for (String s : map.keySet()) {
                        System.out.println(s + "=" + map.get(s));
                        System.out.println();
                    }
                    Article article = new Article();
                    article.setUrl(map.get("url").toString());
                    if (categoryRepository == null) {
                        System.out.println("================================================asdasasdsad");
                    }
                    Category category = categoryRepository.findByCategoryName("game");
                    News news = new News();
                    Source source = sourceRepository.findBySourceName(map.get("source").toString());
                    if (source == null) {
                        source = new Source();
                        source.setSourceName(map.get("source").toString());
                    } else {
                        source.setPublishCount(source.getPublishCount() + 1);
                    }
                    news.setDocid(map.get("docid").toString());
                    news.setCommentCount(Integer.valueOf(map.get("commentCount").toString()));
                    news.setDigest(map.get("digest").toString());
                    news.setHasImg(Integer.valueOf(map.get("hasImg").toString()));
                    news.setImgsrc(map.get("imgsrc").toString());
                    news.setPriority(Integer.valueOf(map.get("priority").toString()));
                    news.setPtime(sdf.parse(map.get("ptime").toString()));
                    news.setTitle(map.get("title").toString());
                    news.setArticleId(article);
                    news.setCategoryCode(category);
                    news.setArticleId(article);
                    news.setSourceId(source);

                    articleRepository.save(article);
                    sourceRepository.save(source);
                    newsRepository.save(news);

                }
        } catch (ParseException e) {
            System.out.println(e.getMessage() );
            e.printStackTrace();
        }
    }


    public Site getSite() {
        return site;
    }
    public void runSpider() {
        Spider.create(new Crawler())
        .addUrl("http://3g.163.com/touch/reconstruct/article/list/BAI6RHDKwangning/0-1.html")

        .thread(5)

        .run();
    }
}
这是我的项目目录。 这是控制台

10:05:34.602 [pool-1-thread-1] ERROR us.codecraft.webmagic.Spider - process request Request{url='http://3g.163.com/touch/reconstruct/article/list/BAI6RHDKwangning/0-1.html', method='null', extras=null, priority=0, headers={}, cookies={}} error
java.lang.NullPointerException: null
    at com.cmh.Crawler.dbService(Crawler.java:90)
    at com.cmh.Crawler.process(Crawler.java:70)
    at us.codecraft.webmagic.Spider.onDownloadSuccess(Spider.java:414)
    at us.codecraft.webmagic.Spider.processRequest(Spider.java:406)
    at us.codecraft.webmagic.Spider.access$000(Spider.java:61)
    at us.codecraft.webmagic.Spider$1.run(Spider.java:320)
    at us.codecraft.webmagic.thread.CountableThreadPool$1.run(CountableThreadPool.java:74)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
10:05:34.603 [main] INFO us.codecraft.webmagic.Spider - Spider 3g.163.com closed! 1 pages downloaded.
如何将bean注入到Spring托管上下文之外的类中 为getApplicationContext创建类

public class ApplicationContextProvider implements ApplicationContextAware {

private static ApplicationContext context;

public static ApplicationContext getApplicationContext(){
    return context;
}

@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    context = applicationContext;
}
}
在您的spider应用程序中

ArticleRepository articleRepository= ApplicationContextProvider.getApplicationContext().getBean(ArticleRepository.class);
CategoryRepository categoryRepository= ApplicationContextProvider.getApplicationContext().getBean(CategoryRepository.class);
NewsRepository newsRepository= ApplicationContextProvider.getApplicationContext().getBean(NewsRepository.class);
SourceRepository sourceRepository= ApplicationContextProvider.getApplicationContext().getBean(SourceRepository.class);
如何将bean注入到Spring托管上下文之外的类中 为getApplicationContext创建类

public class ApplicationContextProvider implements ApplicationContextAware {

private static ApplicationContext context;

public static ApplicationContext getApplicationContext(){
    return context;
}

@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    context = applicationContext;
}
}
在您的spider应用程序中

ArticleRepository articleRepository= ApplicationContextProvider.getApplicationContext().getBean(ArticleRepository.class);
CategoryRepository categoryRepository= ApplicationContextProvider.getApplicationContext().getBean(CategoryRepository.class);
NewsRepository newsRepository= ApplicationContextProvider.getApplicationContext().getBean(NewsRepository.class);
SourceRepository sourceRepository= ApplicationContextProvider.getApplicationContext().getBean(SourceRepository.class);

使用
new
创建对象时,该对象将不受Spring管理,因此不会发生自动连线

但是您已经有了一个由Spring在
runSpider
方法中管理的爬虫bean,您可以只注入这个bean吗,比如:

Spider.create(this).addUrl("http://3g.163.com/touch/reconstruct/article/list/BAI6RHDKwangning/0-1.html")
    .thread(5)
    .run();

使用
new
创建对象时,该对象将不受Spring管理,因此不会发生自动连线

但是您已经有了一个由Spring在
runSpider
方法中管理的爬虫bean,您可以只注入这个bean吗,比如:

Spider.create(this).addUrl("http://3g.163.com/touch/reconstruct/article/list/BAI6RHDKwangning/0-1.html")
    .thread(5)
    .run();

但是我的spider应用程序中有@Component,它应该由spring管理。但是我的spider应用程序中有@Component,它应该由spring管理。