Springboot mengimplementasikan fungsi caching data di tingkat anotasi, berdasarkan teknologi AOP Spring. Semua konfigurasi cache hanya dikonfigurasi pada tingkat anotasi, seperti transaksi deklaratif.
Spring mendefinisikan antarmuka cacheManager dan cache untuk menyatukan teknologi caching yang berbeda. Di antara mereka, Cachemanager adalah antarmuka abstrak untuk berbagai teknologi caching yang disediakan oleh Spring. Antarmuka cache berisi berbagai operasi cache.
Cachemanger
Untuk teknologi cache yang berbeda, cacheemanagers yang berbeda perlu diimplementasikan. Spring mendefinisikan implementasi Cachemanger berikut.
| Cachemanger | menggambarkan |
|---|---|
| SimpleCacheManager | Gunakan koleksi sederhana untuk menyimpan cache, terutama untuk pengujian |
| ConcurrentMapCacheManager | Gunakan ConcurrentMap sebagai Teknologi Cache (default) |
| Noopcachemanager | Untuk pengujian |
| Ehcachecachemanager | Ehcache digunakan sebagai teknologi cache, dan dulu sering digunakan saat hibernasi |
| Guavacachemanager | Guavacache Menggunakan Google Guava sebagai Teknologi Caching |
| Hazelcastcachemanager | Menggunakan hazelcast sebagai teknik caching |
| Jcachecachemanager | Implementasi Menggunakan JCACHE Standard sebagai teknik caching seperti Apache Commons JCS |
| Rediscachemanager | Menggunakan redis sebagai teknologi caching |
Springboot reguler telah secara otomatis mengonfigurasi EHCACHE, Koleksi, Jambu, ConcurrentMap, dan cache lainnya untuk kami, dan ConcurrentMapCachemanager digunakan secara default. File konfigurasi application.properties springboot, dikonfigurasi menggunakan properti dari awalan spring.cache.
Konfigurasi Aplikasi
spring.cache.type=#Cached technical type spring.cache.cache-names=The name of the application starts to create the cache, spring.cache.ehcache.config=ehcache configuration file location spring.cache.infinispan.config=infinispan configuration file location spring.cache.jcache.config=jcache configuration file location spring.cache.jcache.provider=Specify the implementation kelas jcache saat beberapa kelas implementasi jcache
Konfigurasi kelas entri
Tambahkan anotasi @enablecaching
Anotasi cache
| anotasi | menggambarkan |
|---|---|
| @Cacheable | Sebelum memanggil metode, Anda harus terlebih dahulu mencari nilai pengembalian metode dalam cache. Jika nilai ini dapat ditemukan, nilai cache akan dikembalikan. Kalau tidak, metode ini akan dipanggil dan nilai pengembalian akan ditempatkan di cache. |
| @Cacheput | Masukkan nilai pengembalian metode ke dalam cache. Cache tidak diperiksa sebelum metode dipanggil, dan metode ini akan selalu dipanggil. |
| @Cacheevict | Hapus satu atau lebih entri dalam cache. |
| @Caching | Anotasi yang dikelompokkan dapat diterapkan pada saat yang sama beberapa anotasi cache lainnya. |
Gunakan ehcache secara manual
Selama proses pengembangan yang sebenarnya, ada situasi di mana tidak ada penggunaan anotasi dan Anda perlu menambahkan cache sendiri. Mari kita ambil EHCACHE sebagai contoh dan tuliskan secara singkat proses konfigurasi.
1. Tambahkan dependensi
Perkenalkan Springboot-Cache dan Ehcache. Perlu dicatat bahwa Ehcache tidak memerlukan konfigurasi versi, dan pom root dari springboot telah diintegrasikan.
<!-- Cache--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> <!-- ehcache --> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> </dependency>
2. Konfigurasi kelas entri
Tambahkan anotasi @enablecaching
@SpringbootApplication@enablecachingpublic kelas demoApplication {} 3. Konfigurasi Ehcache
Di direktori SRC/Main/Resources, tambahkan file ehcache.xml, lihat konten di akhir artikel.
4. Application.Application Configuration
# Konfigurasikan Ehcache Cache spring.cache.type = ehcache# Tentukan jalur file konfigurasi ehcache spring.cache.ehcache.config = classpath: /ehcache.xml
5. Gunakan cache
Menyuntikkan kacang springboot yang dikonfigurasi secara otomatis, org.springframework.cache.cachemanager.
Kelas Tes Sederhana:
Paket com.bbf.frame.test; import com.bbf.frame.application; import org.apache.commons.lang3.stringutils; impor org.junit.test; impor org.junit.runner.runwith; impor org.springframework.boot.test.context org.springframework.cache.cache; impor org.springframework.cache.cachemanager; impor org.springframework.test.context.junit4.springjunit4classRunner; import org.springframework.test.context.webappappcappconner; Impringframework.test javax.annotation.resource; @runwith (springjunit4classrunner.class)@webappconfiguration@springboottest (class = application.class, webenvironment = springboottest.webenvironment.mock) kelas publik testcache {@resource private cachanager cachanager cachanager cachanager cachanager cachanager cachanager private cachanager cachanager private cachanager cachanager private cachanager cachanager private cachanager cachanager private cachanager cachanager; @Test public void cachetest () {// tunjukkan semua spaces cache spaces System.out.println (stringutils.join (cachemanager.getCachenames (), ",")); Cache cache = cacheManager.getCache ("usercache"); cache.put ("kunci", "123"); System.out.println ("Cache Success"); String res = cache.get ("key", string.class); System.out.println (res); }} Lampiran ehcache.xml
<? Xml Version = "1.0" encoding = "utf-8"?> <ehcache xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: nonamespaceschalocation = "http:/ehcache.org (nonamespaceschalocation =" http:/eHcache.org (nonamespacesCache. "http:/eHcache.org Tentukan direktori file. When EHCache writes data to the hard disk, the data will be written to this file directory --> <diskStore path = "java.io.tmpdir"/> <!-- Default Management Policy --> <defaultCache eternal = "false" maxElementsInMemory = "10000" overflowToDisk = "true" diskPersistent = "false" timeToIdleSeconds = "120" timetoliveseconds = "120" DiskexpiryThreadIverValSeconds = "120" MemoryStoreEvictionPolicy = "LRU"/> <!- cache ini dapat bertahan hingga timetoliveseconds detik. If the period exceeds timeToIdleSeconds seconds and the cache is invalidated --> <cache name = "userCache" eternal = "false" maxElementsInMemory = "100" overflowToDisk = "false" diskPersistent = "false" timeToIdleSeconds = "120" timeToLiveSeconds = "180" memoryStoreEvictionPolicy = "LRU"/> <!-- MaxElementsInmemory Jumlah maksimum objek yang di-cache dalam memori, lihat ukuran tumpukan Anda untuk melakukannya-> <!-Eternal: Benar berarti bahwa objek tidak akan pernah kedaluwarsa. Pada saat ini, timetoidleseconds dan timetoliveseconds akan diabaikan, dan standarnya false-> <!-MaxElementsondisk: Jumlah maksimum objek yang di-cache dalam hard disk, jika 0 berarti tak terhingga-<!-meluap-luapnya maxelk: true berarti bahwa jumlah objek yang di-cached dalam memori yang meluap-luap, Maxelk: true berarti bahwa jumlah objek yang di-cached dalam memori ini menjangkau The Maxelsy-Oblements: True berarti bahwa jumlah objek yang di-cached dalam memori ini menjangkau The Maxelsy- cache disk. Catatan: Jika objek yang di -cache harus ditulis ke hard disk, objek harus mengimplementasikan antarmuka serializable. -> <!-DiskSpoolBufferSizEMB: Ukuran cache disk, default adalah 30MB. Setiap cache harus memiliki area cache sendiri. -> <!-diskpersistent: apakah akan cache mesin restart mesin virtual-> <!-DiskexpiryThreadInterValSeconds: Interval Waktu Kegagalan Disk, Default adalah 120 detik-> <!-TimeToidleseconds: Mengatur waktu maksimum untuk membiarkan objek menjadi idle, di detik. Ketika objek telah diakses untuk yang terakhir kalinya, jika nilai properti TimeToidlesConds melebihi nilai properti TimeToidlesConds, objek akan kedaluwarsa dan Ehcache akan menghapus dari cache. Properti ini hanya berlaku jika properti abadi salah. Jika nilai properti ini adalah 0, itu berarti bahwa objek dapat menganggur tanpa batas-> <!-TimeToliveseconds: Mengatur waktu maksimum objek yang diizinkan untuk ada dalam cache, dalam hitungan detik. Ketika objek telah disimpan dalam cache, jika waktu dalam cache melebihi nilai properti TimetOliveseconds, objek akan kedaluwarsa dan Ehcache akan menghapus dari cache. Properti ini hanya berlaku jika properti abadi salah. Jika nilai properti adalah 0, itu berarti bahwa objek dapat ada di cache tanpa batas waktu. TimeToliveseconds harus lebih besar dari properti TimeToidleseconds agar masuk akal-> <!-MemoryStoreEvictionPolicy: Ketika batas MaxElementsInmemory tercapai, Ehcache akan membersihkan memori sesuai dengan kebijakan yang ditentukan. Kebijakan opsional adalah: LRU (terbaru yang baru -baru ini digunakan, kebijakan default), FIFO (pertama, pertama keluar), dan LFU (jumlah minimum kunjungan). -> </ehcache>
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.