您的位置:首页 > 编程语言 > Java开发

SpringBoot之Caching Data with Spring

2016-06-14 17:23 399 查看
以从BookRepository获取Book为例,当之前已经获存在过了的book实例,则不再重新实例化,而是使用缓存的。

1 Book.java / BookRepository.java/ SimpleBookRepository.java

package caching.data.with.spring.hello;

public class Book {

private String isbn;
private String title;

public Book(String isbn, String title) {
super();
this.isbn = isbn;
this.title = title;
}

public String getIsbn() {
return isbn;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}

@Override
public String toString() {
return "Book [isbn=" + isbn + ", title=" + title + "]";
}
}


package caching.data.with.spring.hello;

public interface BookRepository {

Book getByIsbn(String isbn);
}


package caching.data.with.spring.hello;

import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Component;

@Component
public class SimpleBookRepository implements BookRepository {

@Cacheable("books")
public Book getByIsbn(String isbn) {
simulateSlowService();
return new Book(isbn, "Some Book");
}

private void simulateSlowService(){
try {
Thread.sleep(5000L);
} catch (InterruptedException e) {
throw new IllegalStateException(e);
}
}

}


说明

@Cacheable(“books”)

2 Application.java

package caching.data.with.spring.hello;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.stereotype.Component;

@SpringBootApplication
@EnableCaching
public class Application {

private static final Logger log = LoggerFactory.getLogger(Application.class);

@Component
static class Runner implements CommandLineRunner{
@Autowired
private BookRepository bookRepository;

public void run(String... args) throws Exception {
log.info(".....获取Books");
log.info("isbn-1234 -->" + bookRepository.getByIsbn("isbn-1234"));
log.info("isbn-4567 -->" + bookRepository.getByIsbn("isbn-4567"));
log.info("isbn-1234 -->" + bookRepository.getByIsbn("isbn-1234"));
log.info("isbn-1234 -->" + bookRepository.getByIsbn("isbn-1234"));
log.info("isbn-4567 -->" + bookRepository.getByIsbn("isbn-4567"));
}
}

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}

}


说明:

如果不采用cache,log记录的book实例化的时间应该是间隔5s的。

例子中采用cache,已经存在的book实例(名称相同)则不会在进行实例化了。运行结果如下:

2016-06-14 17:07:20.997 INFO 13200 — [ main] c.data.with.spring.hello.Application : …..获取Books

2016-06-14 17:07:26.066 INFO 13200 — [ main] c.data.with.spring.hello.Application : isbn-1234 –>Book [isbn=isbn-1234, title=Some Book]

2016-06-14 17:07:31.071 INFO 13200 — [ main] c.data.with.spring.hello.Application : isbn-4567 –>Book [isbn=isbn-4567, title=Some Book]

2016-06-14 17:07:31.073 INFO 13200 — [ main] c.data.with.spring.hello.Application : isbn-1234 –>Book [isbn=isbn-1234, title=Some Book]

2016-06-14 17:07:31.073 INFO 13200 — [ main] c.data.with.spring.hello.Application : isbn-1234 –>Book [isbn=isbn-1234, title=Some Book]

2016-06-14 17:07:31.073 INFO 13200 — [ main] c.data.with.spring.hello.Application : isbn-4567 –>Book [isbn=isbn-4567, title=Some Book]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  缓存