成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

SpringBoot非官方教程 | 第十三篇:springboot集成spring cache

Magicer / 978人閱讀

摘要:本文介紹如何在中使用默認(rèn)的聲明式緩存定義和接口用來統(tǒng)一不同的緩存技術(shù)。在使用集成的時候,我們需要注冊實現(xiàn)的的。默認(rèn)使用在我們不使用其他第三方緩存依賴的時候,自動采用作為緩存管理器。源碼下載參考資料揭秘與實戰(zhàn)二數(shù)據(jù)緩存篇快速入門

本文介紹如何在springboot中使用默認(rèn)的spring cache

聲明式緩存

Spring 定義 CacheManager 和 Cache 接口用來統(tǒng)一不同的緩存技術(shù)。例如 JCache、 EhCache、 Hazelcast、 Guava、 Redis 等。在使用 Spring 集成 Cache 的時候,我們需要注冊實現(xiàn)的 CacheManager 的 Bean。

Spring Boot 為我們自動配置了 JcacheCacheConfiguration、 EhCacheCacheConfiguration、HazelcastCacheConfiguration、GuavaCacheConfiguration、RedisCacheConfiguration、SimpleCacheConfiguration 等。

默認(rèn)使用 ConcurrenMapCacheManager

在我們不使用其他第三方緩存依賴的時候,springboot自動采用ConcurrenMapCacheManager作為緩存管理器。

環(huán)境依賴

在pom文件引入spring-boot-starter-cache環(huán)境依賴:


      org.springframework.boot
      spring-boot-starter-cache

創(chuàng)建一個book數(shù)據(jù)訪問層

先創(chuàng)建一個實體類

public class Book {

private String isbn;
private String title;

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

….getter
….setter

}
創(chuàng)建一個數(shù)據(jù)訪問接口
public interface BookRepository {

    Book getByIsbn(String isbn);

}

這個你可以寫一個很復(fù)雜的數(shù)據(jù)查詢操作,比如操作mysql、nosql等等。為了演示這個栗子,我只做了一下線程的延遲操作,當(dāng)作是查詢數(shù)據(jù)庫的時間。

實現(xiàn)接口類
@Component
public class SimpleBookRepository implements BookRepository {

    @Override

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

    // Don"t do this at home
    private void simulateSlowService() {
        try {
            long time = 3000L;
            Thread.sleep(time);
        } catch (InterruptedException e) {
            throw new IllegalStateException(e);
        }
    }

}
測試類
@Component
public class AppRunner implements CommandLineRunner {

    private static final Logger logger = LoggerFactory.getLogger(AppRunner.class);

    private final BookRepository bookRepository;

    public AppRunner(BookRepository bookRepository) {
        this.bookRepository = bookRepository;
    }

    @Override
    public void run(String... args) throws Exception {
        logger.info(".... Fetching books");
        logger.info("isbn-1234 -->" + bookRepository.getByIsbn("isbn-1234"));
        logger.info("isbn-4567 -->" + bookRepository.getByIsbn("isbn-4567"));
        logger.info("isbn-1234 -->" + bookRepository.getByIsbn("isbn-1234"));
        logger.info("isbn-4567 -->" + bookRepository.getByIsbn("isbn-4567"));
        logger.info("isbn-1234 -->" + bookRepository.getByIsbn("isbn-1234"));
        logger.info("isbn-1234 -->" + bookRepository.getByIsbn("isbn-1234"));
    }

}

啟動程序,你會發(fā)現(xiàn)程序在控制臺依次打印了:

2014-06-05 12:15:35.783 … : …. Fetching books

2014-06-05 12:15:40.783 … : isbn-1234 –> >Book{isbn=’isbn-1234’, title=’Some book’}

2014-06-05 12:15:43.784 … : isbn-1234 –>Book{isbn=’isbn-1234’, title=’Some book’}

2014-06-05 12:15:46.786 … : isbn-1234 –>Book{isbn=’isbn-1234’, title=’Some book’}

你會發(fā)現(xiàn)程序依次3s打印一行日志。這時還沒開啟緩存技術(shù)。

開啟緩存技術(shù)

在程序的入口中加入@ EnableCaching開啟緩存技術(shù):

@SpringBootApplication
@EnableCaching
public class DemoApplication {

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

在需要緩存的地方加入@Cacheable注解,比如在getByIsbn()方法上加入@Cacheable(“books”),這個方法就開啟了緩存策略,當(dāng)緩存有這個數(shù)據(jù)的時候,會直接返回數(shù)據(jù),不會等待去查詢數(shù)據(jù)庫。

@Component
public class SimpleBookRepository implements BookRepository {

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

    // Don"t do this at home
    private void simulateSlowService() {
        try {
            long time = 3000L;
            Thread.sleep(time);
        } catch (InterruptedException e) {
            throw new IllegalStateException(e);
        }
    }

}

這時再啟動程序,你會發(fā)現(xiàn)程序打印:

isbn-1234 –>Book{isbn=’isbn-1234’, title=’Some book’}
2017-04-23 18:17:09.479 INFO 8054 — [ main] forezp.AppRunner : isbn-4567 –>Book{isbn=’isbn-4567’, title=’Some book’}
2017-04-23 18:17:09.480 INFO 8054 — [ main] forezp.AppRunner : isbn-1234 –>Book{isbn=’isbn-1234’, title=’Some book’}
2017-04-23 18:17:09.480 INFO 8054 — [ main] forezp.AppRunner : isbn-4567 –>Book{isbn=’isbn-4567’, title=’Some book’}
2017-04-23 18:17:09.481 INFO 8054 — [ main] forezp.AppRunner : isbn-1234 –>Book{isbn=’isbn-1234’, title=’Some book’}
2017-04-23 18:17:09.481 INFO 8054 — [ main] forezp.AppRunner : isbn-1234 –>Book{isbn=’isbn-1234’, title=’Some book’}

只有打印前面2個數(shù)據(jù),程序等了3s,之后的數(shù)據(jù)瞬間打印在控制臺上了,這說明緩存起了作用。

源碼下載:https://github.com/forezp/Spr...

參考資料

caching

Spring Boot 揭秘與實戰(zhàn)(二) 數(shù)據(jù)緩存篇 - 快速入門

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/67815.html

相關(guān)文章

  • 一起來學(xué)SpringBoot | 第十三篇:RabbitMQ延遲隊列

    摘要:另一種就是用中的位于包下,本質(zhì)是由和實現(xiàn)的阻塞優(yōu)先級隊列。表明了一條消息可在隊列中存活的最大時間。當(dāng)某條消息被設(shè)置了或者當(dāng)某條消息進(jìn)入了設(shè)置了的隊列時,這條消息會在時間后死亡成為。 SpringBoot 是為了簡化 Spring 應(yīng)用的創(chuàng)建、運行、調(diào)試、部署等一系列問題而誕生的產(chǎn)物,自動裝配的特性讓我們可以更好的關(guān)注業(yè)務(wù)本身而不是外部的XML配置,我們只需遵循規(guī)范,引入相關(guān)的依賴就可...

    selfimpr 評論0 收藏0
  • SpringBoot官方教程 | 第二十三篇: 異步方法

    摘要:如果去掉,你會發(fā)現(xiàn),執(zhí)行這三個方法都在線程中執(zhí)行。耗時總結(jié),如下耗時通過這一個小的栗子,你應(yīng)該對異步任務(wù)有了一定的了解。 這篇文章主要介紹在springboot 使用異步方法,去請求github api. 創(chuàng)建工程 在pom文件引入相關(guān)依賴: org.springframework.boot spring-boot-starter ...

    jackwang 評論0 收藏0
  • 一起來學(xué)SpringBoot | 第十篇:使用Spring Cache集成Redis

    摘要:特點具備相當(dāng)?shù)暮玫撵`活性,不僅能夠使用來定義緩存的和各種,還提供開箱即用的緩存臨時存儲方案,也支持和主流的專業(yè)緩存例如的集成。其中號代表這是一個表達(dá)式,此表達(dá)式可以遍歷方法的參數(shù)對象,具體語法可以參考的相關(guān)文檔手冊。 SpringBoot 是為了簡化 Spring 應(yīng)用的創(chuàng)建、運行、調(diào)試、部署等一系列問題而誕生的產(chǎn)物,自動裝配的特性讓我們可以更好的關(guān)注業(yè)務(wù)本身而不是外部的XML配置,...

    littleGrow 評論0 收藏0
  • 一起來學(xué)SpringBoot | 第十篇:使用Spring Cache集成Redis

    摘要:特點具備相當(dāng)?shù)暮玫撵`活性,不僅能夠使用來定義緩存的和各種,還提供開箱即用的緩存臨時存儲方案,也支持和主流的專業(yè)緩存例如的集成。其中號代表這是一個表達(dá)式,此表達(dá)式可以遍歷方法的參數(shù)對象,具體語法可以參考的相關(guān)文檔手冊。 SpringBoot 是為了簡化 Spring 應(yīng)用的創(chuàng)建、運行、調(diào)試、部署等一系列問題而誕生的產(chǎn)物,自動裝配的特性讓我們可以更好的關(guān)注業(yè)務(wù)本身而不是外部的XML配置,...

    shadajin 評論0 收藏0

發(fā)表評論

0條評論

Magicer

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<