E-commerce social platform source code please add penguin beg: three five six two forty-seven fifty-nine

Create a project

Importing dependencies into POM files:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
 
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>Copy the code

Create an entity to receive data:

@JsonIgnoreProperties(ignoreUnknown=true)
public class User {
 
    private String name;
    private String blog;
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getBlog() {
        return blog;
    }
 
    public void setBlog(String blog) {
        this.blog = blog;
    }
 
    @Override
    public String toString() {
        return "User [name=" + name + ", blog=" + blog + "]"; }}Copy the code

Create a request to githib’s service:

@Service
public class GitHubLookupService {
 
    private static final Logger logger = LoggerFactory.getLogger(GitHubLookupService.class);
 
    private final RestTemplate restTemplate;
 
    public GitHubLookupService(RestTemplateBuilder restTemplateBuilder) {
        this.restTemplate = restTemplateBuilder.build();
    }
 
    @Async
    public Future<User> findUser(String user) throws InterruptedException {
        logger.info("Looking up " + user);
        String url = String.format("https://api.github.com/users/%s", user);
        User results = restTemplate.getForObject(url, User.class);
        // Artificial delay of 1s for demonstration purposes
        Thread.sleep(1000L);
        returnnew AsyncResult<>(results); }}Copy the code

The RestTemplate request, plus the @async class, is an asynchronous task.

Enabling asynchronous tasks:

@SpringBootApplication
@EnableAsync
public class Application extends AsyncConfigurerSupport {
 
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
 
    @Override
    public Executor getAsyncExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(2);
        executor.setMaxPoolSize(2);
        executor.setQueueCapacity(500);
        executor.setThreadNamePrefix("GithubLookup-");
        executor.initialize();
        returnexecutor; }}Copy the code

The @enableAsync command is used to enable asynchronous tasks. And configure AsyncConfigurerSupport, such that the maximum thread pool is 2.

test

The test code is as follows:

@Component
public class AppRunner implements CommandLineRunner {
 
    private static final Logger logger = LoggerFactory.getLogger(AppRunner.class);
 
    private final GitHubLookupService gitHubLookupService;
 
    public AppRunner(GitHubLookupService gitHubLookupService) {
        this.gitHubLookupService = gitHubLookupService;
    }
 
    @Override
    public void run(String... args) throws Exception {
        // Start the clock
        long start = System.currentTimeMillis();
 
        // Kick of multiple, asynchronous lookups
        Future<User> page1 = gitHubLookupService.findUser("PivotalSoftware");
        Future<User> page2 = gitHubLookupService.findUser("CloudFoundry");
        Future<User> page3 = gitHubLookupService.findUser("Spring-Projects");
 
        // Wait until they are all done
        while(! (page1.isDone() && page2.isDone() && page3.isDone())) { Thread.sleep(10); //10-millisecond pause between each check } // Print results, including elapsed time logger.info("Elapsed time: " + (System.currentTimeMillis() - start));
        logger.info("--> " + page1.get());
        logger.info("--> " + page2.get());
        logger.info("--> "+ page3.get()); }}Copy the code

Start the program and the console will print:

The 13:11:10 2017-04-30. 1511-351 the INFO [] GithubLookup - 1 com. Forezp. Service. GitHubLookupService: & up PivotalSoftware 13:11:10 2017-04-30. 351 INFO 1511 - [GithubLookup - 2] com. Forezp. Service. GitHubLookupService : & up CloudFoundry 13:11:13 2017-04-30. 144 INFO 1511 - [GithubLookup - 2] com. Forezp. Service. GitHubLookupService: Looking up Spring-ProjectsCopy the code

E-commerce social platform source code please add penguin beg: three five six two forty-seven fifty-nine