Ранее мы начинали с абстракции Spring Cache, используя Cache Manager по умолчанию, который предоставляет Spring .
Хотя этот подход может удовлетворить наши потребности в простых приложениях, в случае сложных проблем нам необходимо использовать различные инструменты с более широкими возможностями. Hazelcast является одним из них. Hazelcast — отличный инструмент для кэширования, когда речь идет о приложении на основе JVM. Используя hazelcast в качестве кэша, данные равномерно распределяются между узлами компьютерного кластера, что позволяет горизонтальное масштабирование доступного хранилища.
Мы будем запускать нашу кодовую базу, используя пружинные профили, таким образом, ‘hazelcast-cache’ будет названием нашего профиля.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
group 'com.gkatzioura'version '1.0-SNAPSHOT'buildscript { repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.2.RELEASE") }}apply plugin: 'java'apply plugin: 'idea'apply plugin: 'org.springframework.boot'repositories { mavenCentral()}sourceCompatibility = 1.8targetCompatibility = 1.8dependencies { compile("org.springframework.boot:spring-boot-starter-web") compile("org.springframework.boot:spring-boot-starter-cache") compile("org.springframework.boot:spring-boot-starter") compile("com.hazelcast:hazelcast:3.7.4") compile("com.hazelcast:hazelcast-spring:3.7.4") testCompile("junit:junit")}bootRun { systemProperty "spring.profiles.active", "hazelcast-cache"} |
Как вы можете видеть, мы обновили файл gradle из предыдущего примера и добавили две дополнительные зависимости hazelcast и hazelcast-spring. Также мы изменили профиль, по которому наше приложение будет работать по умолчанию.
Наш следующий шаг — настроить менеджер кэша hazelcast.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
package com.gkatzioura.caching.config;import com.hazelcast.config.Config;import com.hazelcast.config.EvictionPolicy;import com.hazelcast.config.MapConfig;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Profile;/** * Created by gkatzioura on 1/10/17. */@Configuration@Profile("hazelcast-cache")public class HazelcastCacheConfig { @Bean public Config hazelCastConfig() { Config config = new Config(); config.setInstanceName("hazelcast-cache"); MapConfig allUsersCache = new MapConfig(); allUsersCache.setTimeToLiveSeconds(20); allUsersCache.setEvictionPolicy(EvictionPolicy.LFU); config.getMapConfigs().put("alluserscache",allUsersCache); MapConfig usercache = new MapConfig(); usercache.setTimeToLiveSeconds(20); usercache.setEvictionPolicy(EvictionPolicy.LFU); config.getMapConfigs().put("usercache",usercache); return config; }} |
Мы только что создали две карты с политикой ttl 20 секунд. Поэтому через 20 секунд после заполнения карты произойдет выселение из кеша. Для получения дополнительной конфигурации Hazelcast, пожалуйста, обратитесь к официальной документации Hazelcast.
Еще одно изменение, которое мы должны реализовать, — это изменить UserPayload в сериализуемый Java-объект, поскольку объекты, хранящиеся в hazelcast, должны быть Serializable.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
package com.gkatzioura.caching.model;import java.io.Serializable;/** * Created by gkatzioura on 1/5/17. */public class UserPayload implements Serializable { private String userName; private String firstName; private String lastName; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; }} |
И последнее, но не менее важное: мы добавляем еще один репозиторий, связанный с профилем hazelcast-cache.
Результатом является наше предыдущее приложение весенней загрузки, интегрированное с hazelcast вместо кэша по умолчанию, настроенное с помощью политики ttl.
Вы можете найти исходный код на github .
| Ссылка: | Spring-Boot и Cache Abstraction с HazelCast от нашего партнера JCG Эммануила Гкациоураса в блоге gkatzioura . |