Home > Java > javaTutorial > Code example of java integrated spring cache

Code example of java integrated spring cache

Y2J
Release: 2017-05-13 10:29:50
Original
1614 people have browsed it

This article mainly introduces the sample code of springboot integrated spring cache. The editor thinks it is quite good. Now I will share it with you and give it as a reference. Let’s follow the editor and take a look.

This article introduces how to use the default spring cache in springboot,

Declarative cache

Spring defines CacheManager The Cache interface is used to unify different caching technologies. For example, JCache, EhCache, Hazelcast, Guava, Redis, etc. When using Spring to integrate Cache, we need to register the bean of the implemented CacheManager.

Spring Boot automatically configures JcacheCacheConfiguration, EhCacheCacheConfiguration, HazelcastCacheConfiguration, GuavaCacheConfiguration, RedisCacheConfiguration, SimpleCacheConfiguration, etc. for us.

Use ConcurrenMapCacheManager by default

When we do not use other third-party cache dependencies, springboot automatically uses ConcurrenMapCacheManager as the cache manager.

Environment dependencies

Introduce spring-boot-starter-cache environment dependencies into the pom file:


<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
Copy after login

Create a book data access layer

First create an entity class


public class Book {

private String isbn;
private String title;

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

}
Copy after login

Create a data access interface


public interface BookRepository {

 Book getByIsbn(String isbn);

}
Copy after login

You can write a very complex data query operation, such as operationMySQL, nosql, etc. In order to demonstrate this chestnut, I only performed a delay operation on the thread and regarded it as the time to query the database.

Implementation interface class:


@Component
public class SimpleBookRepository implements BookRepository {

 @Override

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

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

}
Copy after login

Test class


@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"));
 }

}
Copy after login

Start the program and you will find The program prints in sequence on the console:


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

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

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

2014-06-05 12:15:46.786 … : isbn-1234 –>Book{isbn=&#39;isbn-1234&#39;, title=&#39;Some book&#39;}
Copy after login

You will find that the program prints a line of logs in 3 seconds. Caching technology has not been turned on at this time.

Enable caching technology

Add @EnableCaching to the entry of the program to enable caching technology:


@SpringBootApplication
@EnableCaching
public class DemoApplication {

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

In Add the @Cacheable annotation where caching is required, such as adding @Cacheable("books") to the getByIsbn() method. This method turns on the caching strategy. When the cache has this data, the data will be returned directly without waiting. Query the database.


@Component
public class SimpleBookRepository implements BookRepository {

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

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

}
Copy after login

Start the program again at this time, you will find that the program prints:


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

Only the first 2 data are printed , the program waited for 3 seconds, and the subsequent data was instantly printed on the console, which shows that the cache is working.

【Related Recommendations】

1. Special Recommendation:"php Programmer Toolbox" V0.1 version Download

2. Java Free Video Tutorial

3. Geek Academy Java Video Tutorial

The above is the detailed content of Code example of java integrated spring cache. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template