Perkenalan
Pengetahuan kami adalah bahwa hambatan program terletak pada database, dan pengetahuan kami juga tahu bahwa kecepatan ingatan jauh lebih cepat daripada hard disk. Ketika departemen kami perlu mendapatkan data yang sama berulang kali, departemen kami meminta database atau layanan jarak jauh lagi dan lagi, menghasilkan banyak waktu yang dihabiskan untuk permintaan database atau panggilan metode jarak jauh, yang mengakibatkan penurunan kinerja program, yang bahkan lebih menjadi masalah yang perlu diatasi cache data.
Dukungan Caching Musim Semi
Spring mendefinisikan org.springframework.cache.cachemanager dan org.springframework.cache.cache antarmuka untuk menyatukan teknologi caching yang berbeda. Di antara mereka, CacheManager adalah antarmuka abstrak untuk berbagai teknologi cache yang disediakan oleh Spring. Antarmuka cache mencakup berbagai operasi cache (menambah dan menghapus untuk mendapatkan cache, sistem kami umumnya tidak secara langsung menangani antarmuka ini)
CacheManager didukung oleh musim semi
Untuk teknologi caching yang berbeda, cacheemanagers yang berbeda perlu diimplementasikan. Spring mendefinisikan implementasi CacheManager di tabel berikut.
Saat mengimplementasikan CacheManager, Anda perlu mendaftarkan kacang yang mengimplementasikan CacheManager. Tentu saja, setiap teknologi caching memiliki banyak konfigurasi tambahan, tetapi mengkonfigurasi Cachemanager sangat penting.
Anotasi cache deklaratif
Spring menyediakan 4 anotasi untuk mendeklarasikan aturan cache (contoh yang jelas dari AOP menggunakan rumus beranotasi), seperti yang ditunjukkan pada tabel.
Nyalakan cache deklaratif
Menyalakan dukungan caching deklaratif sangat sederhana, Anda hanya perlu menggunakan anotasi @enabelcaching pada kelas konfigurasi.
Dukungan untuk Springboot
Kunci menggunakan teknologi cache di Spring China adalah untuk mengkonfigurasi Cachemanager. Springbok secara otomatis mengonfigurasi beberapa implementasi CacheManager untuk pintu kami. Di lingkungan Spring Boot, menggunakan teknologi cache hanya memerlukan mengimpor paket ketergantungan teknologi cache terkait dalam proyek dan mengkonfigurasi kelas untuk mengaktifkan dukungan cache menggunakan @enabelcaching.
Contoh kecil
Contoh kecil diimplementasikan menggunakan Cache Springboot+JPA+.
Contoh Direktori Langkah
1. Buat proyek Maven
Buat file Maven Project Pom.xml baru sebagai berikut:
<? Xml Version = "1.0" encoding = "UTF-8"?> <Project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema xsi: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <ModelVersion> 4.0.0 </ModelVersion> <groupid> COM.US </Group> </ARTOCID> </ModelVersion> <groupid> COM.US </GROUPICED> <version>1.0-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.0.RELEASE</version> </parent> <properties> <start-class>com.us.Application</start-class> <maven.compiler.target> 1.8 </maven.compiler.target> <maven.compiler.source> 1.8 </maven.compiler.source> </ Properties> <!-Tambahkan Dependensi Khas untuk Aplikasi Web-<Dependensi> <dependency> <dependency> <groupding> <ArTifactId> Spring-boot-starter-cache </arttifactid> </gandendency> <dependency> <Groupid> org.springframework.boot </sroupid> <Raintifactid> Spring-boot-starter-data-jpa </trotifactid> </dependensi </dependensi> <grouptid> <grouptid> <ngounding. <ArTifactId> Spring-Boot-starter-web </stifactid> </dependency> <dependency> <GroupId> net.sf.ehcache </groupid> <ArTifactId> ehcache </artifactid> </dependency> <!-db-> <gandelency> <groupid> mysql </groupid> <artifactId>mysql-connector-java</artifactId> <version>6.0.5</version> </dependency> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.2</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <ArTifactId> Commons-logging </RiTtifacTID> </Exclusion> </Exclusive> </dependency> </dependencies> </joy Project>
2. Konfigurasi Basis Data
Buat file application.properties baru di direktori src/main/esouches, dan kontennya adalah informasi koneksi basis data, sebagai berikut:
application.properties
ms.db.driverclassname = com.mysql.jdbc.driverms.db.url = jdbc: mysql: // localhost: 3306/cache? prepstmtcachesize = 517 & cacheprepstmts = true & autoreconnec t = true & useunicode = true & characterencoding = UTF-8 & usessl = false & allowmultiqueries = truems.db.username = rootms.db.password = xxxxxxms.db.maxactive = 500
Buat file konfigurasi dbconfig.java baru dan konfigurasikan sumber data
Paket com.us.example.config;/*** Dibuat oleh Yangyibo pada 17/1/13. */impor java.beans.propertyvetoException; impor org.springframework.beans.factory.annotation.Autowired; impor org.springframework.context.annotation.bean; impor org.springframework.context.annotation.configuration; com.mchange.v2.c3p0.comBoPooledDataSource; @ConfigurationPublic Kelas DBConfig {@Autowired Private Environment Env; @Bean (name = "DataSource") Publik CombooledDataSource DataSource () melempar PropertyVetoException {ComboOledDataSource DataSource = ComboPooledDataSource baru (); DataSource.SetDriverClass (env.getProperty ("ms.db.driverclassname")); DataSource.setjdbCurl (env.getProperty ("ms.db.url")); DataSource.SetUser (env.getProperty ("ms.db.username")); DataSource.setPassword (env.getProperty ("ms.db.password")); DataSource.SetMaxPoolSize (20); DataSource.SetMinPoolSize (5); DataSource.SetInitialPoolSize (10); DataSource.SetMaxIdletime (300); DataSource.setAcquireIncrement (5); DataSource.SetIdleconnectionTestPeriod (60); Return DataSource; }}Desain Basis Data, database hanya memiliki satu tabel orang, dan desainnya adalah sebagai berikut:
3. Konfigurasi JPA
File konfigurasi Spring-Data-JPA adalah sebagai berikut:
Paket com.us.example.config; impor java.util.hashmap; impor java.util.map; impor javax.persistence.entityManagerFactory; impor javax.sql.dataSource; impor org.springframework.beans.factory.annotation.aoWired; org.springframework.context.annotation.bean; impor org.springframework.context.annotation.configuration; impor org.springframework.data.jpa.repository.config.enableJparepositories; impor ater org.springframework.orm.jpa.localcontainerEntityManagerFactoryBean; impor org.springframework.orm.jpa.vendor.hibernateJPavendorAdapter; impor org.springframework.transaction.platformransactionManAger; impor org.springframework.transaction.annotation.enabletransactionManagement;/*** Dibuat oleh Yangyibo pada 17/1/13. */@Configuration@enableJparePositories ("com.us.example.dao")@enableTransActionManagement@componentscanPublic kelas jpaconfig {@autowired private DataSource DataSource; @Bean EntityManagerFactory EntityManagerFactory () {HibernateJPavendorAdapter vendorAdapter = new HibernateJPavendorAdapter (); LocalcontainerentityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean (); factory.setjPavendorAdapter (vendorAdapter); factory.setpackagescan ("com.us.example.bean"); factory.setDataSource (DataSource); Peta <String, Object> jpaproperties = hashmap baru <> (); jpaproperties.put ("hibernate.ejb.naming_strategy", "org.hibernate.cfg.improvedNamingstrategy"); jpaproperties.put ("hibernate.jdbc.batch_size", 50); factory.setjpapropertymap (jpaproperty); factory.AfterPropertiesset (); return factory.getObject (); } @Bean PlatformTransActionManager TransactionManager () {jpatransactionManager txManager = jpatransactionManager baru (); txManager.setentityManagerFactory (EntityManagerFactory ()); mengembalikan txManager; }}4. Tulis Lapisan Kacang dan Dao
Entitas Kelas Person.java
Paket com.us.example.bean; impor javax.persistence.entity; impor javax.persistence.generatedValue; import javax.persistence.id; import javax.persistence.table;/*** dibuat oleh Yangyibo pada 17/1/13. */ @Entitas @table (name = "person") orang kelas publik {@id @generatedValue Private Long ID; nama string pribadi; usia bilangan bulat pribadi; alamat string pribadi; orang publik () {super (); } orang publik (ID panjang, nama string, usia integer, alamat string) {super (); this.id = id; this.name = name; this.age = usia; this.address = alamat; } public long getId () {return id; } public void setId (Long ID) {this.id = id; } public string getName () {return name; } public void setName (name string) {this.name = name; } getage integer publik () {usia kembali; } public void setage (usia integer) {this.age = usia; } public String getAddress () {alamat kembali; } public void setAddress (Alamat String) {this.address = alamat; }}DAO Layer, PersonRepository.java
Paket com.us.example.dao; import com.us.example.bean.person; impor org.springframework.data.jpa.repository.jparepository;/*** Dibuat oleh Yangyibo pada 17/1/13. */antarmuka publik PersonRepository memperluas jParepository <Person, long> {}5. Tulis Lapisan Layanan
antarmuka layanan
Paket com.us.example.service; import com.us.example.bean.person;/*** Dibuat oleh Yangyibo pada 17/1/13. */antarmuka publik Demoservice {orang publik menyimpan (orang orang); public void hapus (ID panjang); orang publik findOne (orang orang);}Implementasi: (Kunci, tambahkan cache di sini)
Paket com.us.example.service.impl; import com.us.example.bean.person; impor com.us.example.dao.personrepository; impor com.us.example.service.demoservice; impor org.springframework.beans.factory.annotation.AutoWirired; org.springframework. */ @ServicePublic kelas DemoServiceImpl mengimplementasikan DemOservice {@Autowired pribadi personrepositori personrepository; @Override //@CachePut cache yang baru ditambahkan atau diperbarui ke cache, di mana nama cache adalah orang. Kunci data adalah ID orang @cacheput (value = "people", key = "#person.id") orang publik menyimpan (orang orang) {orang p = personrepository.save (orang); System.out.println ("Untuk ID, kunci adalah:"+p.getId ()+"Data cacheed"); mengembalikan P; } @Override // @cacheevict Hapus data dengan ID kunci dari cache orang @cacheevict (value = "people") public void Remove (Long ID) {System.out.println ("Menghapus Cache Data dengan ID dan KUNCI. Parameter yang ditentukan disimpan ke cache sebagai kunci.6. Tulis Pengontrol
Untuk kenyamanan pengujian, dapatkan digunakan
Paket com.us.example.controller; import com.us.example.bean.person; import com.us.example.service.demoservice; impor org.springframework.beans.factory.annotation.Autowired; impor org.springframework.stereotipe.controller; org.springframework.web.bind.annotation.requestmapping; impor org.springframework.web.bind.annotation.responseBody; impor org.springframework.web.bind.annotation.restcontroller;/*** dibuat oleh Yangyibo pada 17/notation.restcontroller;/*** dibuat oleh Yangyibo pada 17/notation.restcontroller;/*** Diciptakan oleh Yangyibo pada 17/notation.RestController;/** ** yang dibuat oleh Yangyibo pada 17/notation.RestController;/** yang dibuat oleh Yangyibo pada 17/notation. */ @RESTControllerPublic Class Cachecontroller {@Autowired Private Demoservice Demoservice; // http: // localhost: 8080/put? name = abel & usia = 23 & alamat = shanghai @requestmapping ("/put") orang publik put (orang orang) {return demoservice.save (orang); } // http: // localhost: 8080/mampu? id = 1 @RequestMapping ("/mampu") @ResponseBody Public orang yang dapat di -cache (orang) {return demoservice.findone (orang); } // http: // localhost: 8080/evit? id = 1 @RequestMapping ("/evit") Public String evit (Long ID) {demoservice.remove (id); Kembalikan "OK"; }}7. Mulai cache
Ingatlah untuk mengaktifkan konfigurasi cache di kelas startup.
Paket com.us.example; impor org.springframework.boot.autoconfigure.springbootApplication; impor org.springframework.cache.annotation.enablecaching; impor org.springframework.context.configurableApplicationContext; impor org.springframework.context.configurableAcplicationcontext; Impor org.spramework.context.configurableAcplicationcontext; Impor; org.springframework.boot.springapplication.*;/*** Dibuat oleh Yangyibo pada 17/1/13. */@Componentscan (BasEpackages = "com.us.example")@springbootApplication@enableCachingplic Class Application {public static void main (string [] args) {configurableApplicationContext run = run (application.class, args); }}8. Kemampuan Verifikasi dan Verifikasi Tes:
Mulai kelas aplikasi, dan setelah memulainya, masukkan: http: // localhost: 8080/mampu? Id = 1 di browser (pertama untuk menginisialisasi beberapa bagian data dalam database.)
Output Konsol:
"Data ID dan kunci adalah: 1" telah di -cache untuk kueri ini. Jika Anda menanyakan data lagi, pernyataan ini tidak akan muncul, yaitu, database tidak akan ditanya.
Inspeksi put
Masukkan di browser: http: // localhost: 8080/put? Name = abel & usia = 23 & alamat = shanghai (masukkan data ke dalam database dan masukkan data ke dalam cache.)
Pada saat ini, output konsol menyimpan catatan:
Kemudian hubungi metode yang dapat lagi untuk meminta data. Basis data tidak akan lagi ditanyai, dan data akan dibaca langsung dari cache.
Tes Evit
Masukkan: http: // localhost: 8080/evit? Id = 1 di browser (hapus catatan dari cache, setelah membersihkannya, catatan akan dimasukkan ke dalam cache lagi setelah mengakses catatan.)
Output Konsol:
Beralih cache
1. Beralih ke Ehcache sebagai cache
Tambahkan dependensi dalam file pom.xml
<dependency> <GroupId> net.sf.ehcache </groupid> <ArTifactId> ehcache </artifactid> </dependency>
Buat file konfigurasi ehcache.xml di folder sumber daya. Isi file konfigurasi EHCACHE baru adalah sebagai berikut. File Spring Boot ini akan secara otomatis memindai
<? XML Versi = "1.0" encoding = "UTF-8"?> <eHcache> <!-Digunakan saat beralih ke cache EHCACHE-> <Cache Name = "People" MaxElementsInMemory = "1000" /> < /ehcache>
2. Beralih ke jambu sebagai cache
Tambahkan saja dependensi di pom
<dependency> <GroupId> com.google.guava </groupid> <ArTifactId> guava </artifactid> <version> 18.0 </version> </dependency>
3. Beralih ke Redis sebagai cache
Silakan baca blog berikutnya
Referensi untuk artikel ini: "Pengganggu Pengembangan Javaee: Pertempuran Praktis Boot Musim Semi"
Kode Sumber Artikel ini: https://github.com/527515025/springboot.git
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.