Helpex - Trao đổi & giúp đỡ Đăng nhập

Hầu hết mọi người đang tìm kiếm điều gì trên Google? Hãy khám phá các Xu hướng Nổi bật của Google…

Trong bài viết này, chúng ta sẽ thấy một ứng dụng hàng loạt Spring ví dụ thứ hai . Để tạo ứng dụng Spring Batch mẫu, chúng tôi sẽ sử dụng nguồn cấp dữ liệu tìm kiếm phổ biến của Google. Google cung cấp ứng dụng xu hướng nóng , nơi bạn có thể chọn quốc gia để tìm các tìm kiếm phổ biến đang diễn ra.

Hầu hết mọi người đang tìm kiếm điều gì trên Google? Hãy khám phá các Xu hướng Nổi bật của Google…

               









Các tìm kiếm phổ biến của Google có sẵn dưới dạng nguồn cấp dữ liệu nguyên tử ( http://www.google.com/trends/hottrends/atom/feed?pn=p3 ). Để sử dụng Spring Batch framework, chúng ta nên thêm các phụ thuộc bên dưới vào pom.xml.


<dependency>
    <groupId>org.springframework.batch</groupId>
    <artifactId>spring-batch-core</artifactId>
    <version>3.0.3.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>4.1.4.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-batch</artifactId>
    <version>1.2.2.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.1.4.RELEASE</version>
</dependency>

Chúng tôi đã sử dụng feed4j  để phân tích cú pháp nguyên tử nguồn cấp dữ liệu. Tải xuống các lọ feed4j và giữ các phần phụ thuộc trong pom.xml.


<dependency>
    <groupId>feed4j</groupId>
    <artifactId>feed4j</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>C:/Users/test/GT_WS/Google_Trends/lib/feed4j.jar</systemPath>
</dependency>
<dependency>
    <groupId>nekohtml</groupId>
    <artifactId>nekohtml</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>C:/Users/test/GT_WS/Google_Trends/lib/nekohtml.jar</systemPath>
</dependency>
<dependency>
    <groupId>xercesImpl</groupId>
    <artifactId>xercesImpl</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>C:/Users/test/GT_WS/Google_Trends/lib/xercesImpl.jar</systemPath>
</dependency>
<dependency>
    <groupId>xml-apis</groupId>
    <artifactId>xml-apis</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>C:/Users/test/GT_WS/Google_Trends/lib/xml-apis.jar</systemPath>
</dependency>

Bây giờ, chúng tôi đã sẵn sàng triển khai Item Reader để lấy nguồn cấp dữ liệu xu hướng nóng và phân tích cú pháp.


package org.smarttechie.reader;

import it.sauronsoftware.feed4j.FeedParser;
import it.sauronsoftware.feed4j.bean.Feed;
import it.sauronsoftware.feed4j.bean.FeedItem;

import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.smarttechie.model.GoogleTrendItem;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.NonTransientResourceException;
import org.springframework.batch.item.ParseException;
import org.springframework.batch.item.UnexpectedInputException;

/**
* The reader gets the atom feed and parses it.
* @author Siva Janapati
* @version 1.0
*
*/
public class GoogleTrendsReader implements ItemReader<List<GoogleTrendItem>>{

private Log log = LogFactory.getLog(GoogleTrendsReader.class);

/**
* The reader will make call to google hot trends API
*/
@Override
public List<GoogleTrendItem> read() throws Exception, UnexpectedInputException,
ParseException, NonTransientResourceException {
          URL url = new URL("http://www.google.com/trends/hottrends/atom/feed?pn=p3");
          Feed feed = FeedParser.parse(url);
          int items = feed.getItemCount();
          log.debug("The number of hot trends " + items);
          List<GoogleTrendItem> trends = null;
          if (items > 0) {
            trends = new ArrayList<GoogleTrendItem>();
              for (int i = 0; i < items; i++) {
                   FeedItem item = feed.getItem(i);
                   GoogleTrendItem trend = new GoogleTrendItem();
                   trend.setTitle(item.getTitle());
                   trend.setLink(item.getLink().toString());
                   trend.setDescription(item.getDescriptionAsText());
                   trends.add(trend);
        }
    }
    return trends;
  }
 }

Việc triển khai Item Writer được đưa ra dưới đây.



package org.smarttechie.writer;

import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.smarttechie.model.GoogleTrendItem;
import org.springframework.batch.item.ItemWriter;

/**
* The writer to write the list of google trends
* @author Siva Janapati
* @version 1.0
*
*/
public class GoogleTrendsWriter implements ItemWriter<List<GoogleTrendItem>>{

private Log log = LogFactory.getLog(GoogleTrendsWriter.class);

@Override
public void write(List<? extends List<GoogleTrendItem>> trends)
throws Exception {
        if (trends != null && !trends.isEmpty()) {
           List<GoogleTrendItem> items = trends.get(0);
              if (items != null && !items.isEmpty()) {
                 for (GoogleTrendItem trend : items) {
                   log.debug("Title: " + trend.getTitle());
                   log.debug("Link: " + trend.getLink());
                   log.debug("Plain text description: " + trend.getDescription());
       }
     }
   }
  }
 }

Biểu đồ trình tự của tương tác các thành phần trên được đưa ra dưới đây.

Hầu hết mọi người đang tìm kiếm điều gì trên Google? Hãy khám phá các Xu hướng Nổi bật của Google…













Cấu hình lô được đưa ra bên dưới.


package org.smarttechie;

import java.util.List;

import org.smarttechie.model.GoogleTrendItem;
import org.smarttechie.reader.GoogleTrendsReader;
import org.smarttechie.writer.GoogleTrendsWriter;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.ItemWriter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableBatchProcessing
public class GoogleTrendsBatchConfiguration {

@Bean
public ItemReader<List<GoogleTrendItem>> reader() {
   GoogleTrendsReader reader = new GoogleTrendsReader();
   return reader;
}

@Bean
public ItemWriter<List<GoogleTrendItem>> writer() {
   GoogleTrendsWriter writer = new GoogleTrendsWriter();
   return writer;
}

@Bean
public Step step1(StepBuilderFactory stepBuilderFactory, ItemReader<List<GoogleTrendItem>> reader,
ItemWriter<List<GoogleTrendItem>> writer) {
    return stepBuilderFactory.get("step1")
    .<List<GoogleTrendItem>, List<GoogleTrendItem>> chunk(1)
    .reader(reader)
    .writer(writer)
    .build();
}

@Bean
public Job importUserJob(JobBuilderFactory jobs, Step s1) {
  return jobs.get("importHotSeachesJob").preventRestart()
  .start(s1)
  .build();
 }
}

Việc triển khai ở trên không có ItemProcessor là tùy chọn. Mã nguồn được tạo như một phần của bài viết này có sẵn tại đây .

7 hữu ích 0 bình luận 6.8k xem chia sẻ

Có thể bạn quan tâm

loading