SpringBoot之Caching Data with Spring
2016-06-14 17:23
399 查看
以从BookRepository获取Book为例,当之前已经获存在过了的book实例,则不再重新实例化,而是使用缓存的。
1 Book.java / BookRepository.java/ SimpleBookRepository.java
说明
@Cacheable(“books”)
2 Application.java
说明:
如果不采用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]
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]
相关文章推荐
- 页面缓存:内存和文件之间的那些事
- 浅析SQL Server中的执行计划缓存(上)
- Enterprise Library for .NET Framework 2.0缓存使用实例
- PowerShell中编程清空IE缓存方法
- PowerShell中使用.NET将程序集加入全局程序集缓存
- C#中缓存的基本用法总结
- Android实现图片异步加载并缓存到本地
- wap开发中如何有效的利用缓存减少消息的传送量
- PHP基于文件存储实现缓存的方法
- smarty缓存用法分析
- 在ASP.NET 2.0中操作数据之五十九:使用SQL缓存依赖项SqlCacheDependency
- 在ASP.NET 2.0中操作数据之五十八:在程序启动阶段缓存数据
- 在ASP.NET 2.0中操作数据之五十七:在分层架构中缓存数据
- 引用全局程序集缓存内的程序集的方法
- asp Response.flush 实时显示进度
- C#实现清除IE浏览器缓存的方法
- ASP.NET缓存管理的几种方法
- PHP文件缓存类实现代码
- 清除aspx页面缓存的程序实现方法
- C#缓存之SqlCacheDependency用法实例总结