From 4802e2198e174899606ca9c9c4c3c22ddeaaaa51 Mon Sep 17 00:00:00 2001 From: DongGuoChao Date: Tue, 29 Jan 2019 10:44:12 +0800 Subject: [PATCH 1/3] support emoji --- litemall-db/sql/litemall_schema.sql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/litemall-db/sql/litemall_schema.sql b/litemall-db/sql/litemall_schema.sql index d75b8cb13..dae8ead53 100644 --- a/litemall-db/sql/litemall_schema.sql +++ b/litemall-db/sql/litemall_schema.sql @@ -1,6 +1,7 @@ drop database if exists litemall; drop user if exists 'litemall'@'localhost'; -create database litemall; +-- 支持emoji:需要mysql数据库参数: character_set_server=utf8mb4 +create database litemall default character set utf8mb4 collate utf8mb4_unicode_ci; use litemall; create user 'litemall'@'localhost' identified by 'litemall123456'; grant all privileges on litemall.* to 'litemall'@'localhost'; From 982f6ad18d46b6abc4e3573f856ed6ceb8d58114 Mon Sep 17 00:00:00 2001 From: DongGuoChao Date: Wed, 30 Jan 2019 10:53:05 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E8=BF=87=E6=BB=A4=E6=8E=89=E9=A6=96?= =?UTF-8?q?=E9=A1=B5=E5=B7=B2=E7=BB=8F=E9=A2=86=E5=8F=96=E6=8E=89=E7=9A=84?= =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=88=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../db/service/LitemallCouponService.java | 44 +++++++++++++++---- .../litemall/wx/web/WxHomeController.java | 13 ++++-- litemall-wx/pages/index/index.wxml | 2 +- 3 files changed, 47 insertions(+), 12 deletions(-) diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallCouponService.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallCouponService.java index a3f8bb479..e99f0663f 100644 --- a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallCouponService.java +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallCouponService.java @@ -3,10 +3,9 @@ import com.alibaba.druid.util.StringUtils; import com.github.pagehelper.PageHelper; import org.linlinjava.litemall.db.dao.LitemallCouponMapper; -import org.linlinjava.litemall.db.domain.LitemallCoupon; +import org.linlinjava.litemall.db.dao.LitemallCouponUserMapper; +import org.linlinjava.litemall.db.domain.*; import org.linlinjava.litemall.db.domain.LitemallCoupon.Column; -import org.linlinjava.litemall.db.domain.LitemallCouponExample; -import org.linlinjava.litemall.db.domain.LitemallCouponUser; import org.linlinjava.litemall.db.util.CouponConstant; import org.springframework.stereotype.Service; @@ -14,18 +13,21 @@ import java.time.LocalDateTime; import java.util.List; import java.util.Random; +import java.util.stream.Collectors; @Service public class LitemallCouponService { @Resource private LitemallCouponMapper couponMapper; + @Resource + private LitemallCouponUserMapper couponUserMapper; private Column[] result = new Column[]{Column.id, Column.name, Column.desc, Column.tag, Column.days, Column.startTime, Column.endTime, Column.discount, Column.min}; /** - * 查询 + * 查询,空参数 * * @param offset * @param limit @@ -34,11 +36,24 @@ public class LitemallCouponService { * @return */ public List queryList(int offset, int limit, String sort, String order) { - LitemallCouponExample example = new LitemallCouponExample(); - example.or().andTypeEqualTo(CouponConstant.TYPE_COMMON).andStatusEqualTo(CouponConstant.STATUS_NORMAL).andDeletedEqualTo(false); - example.setOrderByClause(sort + " " + order); + return queryList(LitemallCouponExample.newAndCreateCriteria(), offset, limit, sort, order); + } + + /** + * 查询 + * + * @param criteria 可扩展的条件 + * @param offset + * @param limit + * @param sort + * @param order + * @return + */ + public List queryList(LitemallCouponExample.Criteria criteria, int offset, int limit, String sort, String order) { + criteria.andTypeEqualTo(CouponConstant.TYPE_COMMON).andStatusEqualTo(CouponConstant.STATUS_NORMAL).andDeletedEqualTo(false); + criteria.example().setOrderByClause(sort + " " + order); PageHelper.startPage(offset, limit); - return couponMapper.selectByExampleSelective(example, result); + return couponMapper.selectByExampleSelective(criteria.example(), result); } public int queryTotal() { @@ -47,6 +62,19 @@ public int queryTotal() { return (int) couponMapper.countByExample(example); } + public List queryAvailableList(Integer userId, int offset, int limit) { + assert userId != null; + // 过滤掉登录账号已经领取过的coupon + LitemallCouponExample.Criteria c = LitemallCouponExample.newAndCreateCriteria(); + List used = couponUserMapper.selectByExample( + LitemallCouponUserExample.newAndCreateCriteria().andUserIdEqualTo(userId).example() + ); + if(used!=null && !used.isEmpty()){ + c.andIdNotIn(used.stream().map(LitemallCouponUser::getCouponId).collect(Collectors.toList())); + } + return queryList(c, offset, limit, "add_time", "desc"); + } + public List queryList(int offset, int limit) { return queryList(offset, limit, "add_time", "desc"); } diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxHomeController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxHomeController.java index c6afd5e1b..fede60ca7 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxHomeController.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxHomeController.java @@ -7,6 +7,7 @@ import org.linlinjava.litemall.db.domain.LitemallCategory; import org.linlinjava.litemall.db.domain.LitemallGoods; import org.linlinjava.litemall.db.service.*; +import org.linlinjava.litemall.wx.annotation.LoginUser; import org.linlinjava.litemall.wx.service.HomeCacheManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; @@ -70,11 +71,11 @@ public Object cache(@NotNull String key) { /** * 首页数据 - * + * @param userId 当用户已经登录时,非空。为登录状态为null * @return 首页数据 */ @GetMapping("/index") - public Object index() { + public Object index(@LoginUser Integer userId) { //优先从缓存中读取 if (HomeCacheManager.hasData(HomeCacheManager.INDEX)) { return ResponseUtil.ok(HomeCacheManager.getCacheData(HomeCacheManager.INDEX)); @@ -86,7 +87,13 @@ public Object index() { Callable channelListCallable = () -> categoryService.queryChannel(); - Callable couponListCallable = () -> couponService.queryList(0, 3); + Callable couponListCallable; + if(userId == null){ + couponListCallable = () -> couponService.queryList(0, 3); + } else { + couponListCallable = () -> couponService.queryAvailableList(userId,0, 3); + } + Callable newGoodsListCallable = () -> goodsService.queryByNew(0, SystemConfig.getNewLimit()); diff --git a/litemall-wx/pages/index/index.wxml b/litemall-wx/pages/index/index.wxml index c27050831..e6b8ea483 100644 --- a/litemall-wx/pages/index/index.wxml +++ b/litemall-wx/pages/index/index.wxml @@ -24,7 +24,7 @@ - + {{item.tag}} From eac7d87fab2d75fb1ce5730201f72b206048cd17 Mon Sep 17 00:00:00 2001 From: DongGuoChao Date: Mon, 11 Feb 2019 13:44:39 +0800 Subject: [PATCH 3/3] =?UTF-8?q?1.=20=E4=BD=BF=E7=94=A8SpringCache=E9=87=8D?= =?UTF-8?q?=E5=86=99=E7=BC=93=E5=AD=98=E5=AE=9E=E7=8E=B0=E3=80=82=202.=20?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=BC=93=E5=AD=98=E5=AE=9E=E7=8E=B0=EF=BC=9A?= =?UTF-8?q?ConcurrentHashMap=EF=BC=8CRedis=EF=BC=8CEhCache=203.=20?= =?UTF-8?q?=E5=B8=B8=E7=94=A8=E9=A1=B5=E9=9D=A2=E5=90=AF=E7=94=A8=E7=BC=93?= =?UTF-8?q?=E5=AD=98=204.=20=E5=AE=8C=E5=96=84=E7=BC=93=E5=AD=98evict?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- litemall-all/pom.xml | 16 ++++ .../org/linlinjava/litemall/Application.java | 2 + .../src/main/resources/application.yml | 4 +- litemall-cache/litemall-ehcache/pom.xml | 22 +++++ litemall-cache/litemall-redis/pom.xml | 41 ++++++++++ .../core/cache/redis/Application.java | 14 ++++ .../core/cache/redis/config/RedisConfig.java | 47 +++++++++++ .../src/main/resources/application-redis.yml | 29 +++++++ .../src/main/resources/application.yml | 9 +++ .../litemall/core/cache/redis/CacheTest.java | 25 ++++++ .../litemall/core/cache/redis/Testor.java | 14 ++++ litemall-cache/pom.xml | 32 ++++++++ .../litemall/core/cache/Application.java | 14 ++++ .../src/main/resources/application-cache.yml | 7 ++ .../src/main/resources/application.yml | 9 +++ .../litemall/core/cache/CacheTest.java | 25 ++++++ .../litemall/core/cache/Testor.java | 15 ++++ .../linlinjava/litemall/core/Application.java | 2 + .../db/service/LitemallAdService.java | 4 + .../db/service/LitemallBrandService.java | 4 + .../db/service/LitemallCategoryService.java | 4 + .../db/service/LitemallCouponService.java | 3 + .../db/service/LitemallCouponUserService.java | 9 ++- .../db/service/LitemallGoodsService.java | 4 + .../service/LitemallGrouponRulesService.java | 3 + .../db/service/LitemallGrouponService.java | 3 + .../db/service/LitemallTopicService.java | 4 + .../litemall/wx/service/HomeCacheManager.java | 81 ------------------- .../litemall/wx/web/WxCatalogController.java | 11 +-- .../litemall/wx/web/WxGoodsController.java | 4 +- .../litemall/wx/web/WxHomeController.java | 28 +++---- pom.xml | 28 +++++-- 32 files changed, 405 insertions(+), 112 deletions(-) create mode 100644 litemall-cache/litemall-ehcache/pom.xml create mode 100644 litemall-cache/litemall-redis/pom.xml create mode 100644 litemall-cache/litemall-redis/src/main/java/org/linlinjava/litemall/core/cache/redis/Application.java create mode 100644 litemall-cache/litemall-redis/src/main/java/org/linlinjava/litemall/core/cache/redis/config/RedisConfig.java create mode 100644 litemall-cache/litemall-redis/src/main/resources/application-redis.yml create mode 100644 litemall-cache/litemall-redis/src/main/resources/application.yml create mode 100644 litemall-cache/litemall-redis/src/test/java/org/linlinjava/litemall/core/cache/redis/CacheTest.java create mode 100644 litemall-cache/litemall-redis/src/test/java/org/linlinjava/litemall/core/cache/redis/Testor.java create mode 100644 litemall-cache/pom.xml create mode 100644 litemall-cache/src/main/java/org/linlinjava/litemall/core/cache/Application.java create mode 100644 litemall-cache/src/main/resources/application-cache.yml create mode 100644 litemall-cache/src/main/resources/application.yml create mode 100644 litemall-cache/src/test/java/org/linlinjava/litemall/core/cache/CacheTest.java create mode 100644 litemall-cache/src/test/java/org/linlinjava/litemall/core/cache/Testor.java delete mode 100644 litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/HomeCacheManager.java diff --git a/litemall-all/pom.xml b/litemall-all/pom.xml index 7c4c91399..11583e801 100644 --- a/litemall-all/pom.xml +++ b/litemall-all/pom.xml @@ -17,6 +17,22 @@ litemall-core + + org.linlinjava + litemall-cache + + + + + + + + + + + + + org.linlinjava litemall-db diff --git a/litemall-all/src/main/java/org/linlinjava/litemall/Application.java b/litemall-all/src/main/java/org/linlinjava/litemall/Application.java index fe5ef3fdc..900401ce5 100644 --- a/litemall-all/src/main/java/org/linlinjava/litemall/Application.java +++ b/litemall-all/src/main/java/org/linlinjava/litemall/Application.java @@ -3,6 +3,7 @@ import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.transaction.annotation.EnableTransactionManagement; @@ -10,6 +11,7 @@ @MapperScan("org.linlinjava.litemall.db.dao") @EnableTransactionManagement @EnableScheduling +@EnableCaching public class Application { public static void main(String[] args) throws Exception { diff --git a/litemall-all/src/main/resources/application.yml b/litemall-all/src/main/resources/application.yml index cbd57d797..7e74fa57a 100644 --- a/litemall-all/src/main/resources/application.yml +++ b/litemall-all/src/main/resources/application.yml @@ -1,6 +1,6 @@ spring: profiles: - active: db, core, admin, wx + active: db, core, admin, wx, cache messages: encoding: UTF-8 @@ -10,7 +10,7 @@ server: logging: level: root: ERROR - org.springframework: ERROR + org.springframework: DEBUG org.mybatis: ERROR org.linlinjava.litemall.core: ERROR org.linlinjava.litemall.db: ERROR diff --git a/litemall-cache/litemall-ehcache/pom.xml b/litemall-cache/litemall-ehcache/pom.xml new file mode 100644 index 000000000..705e8550a --- /dev/null +++ b/litemall-cache/litemall-ehcache/pom.xml @@ -0,0 +1,22 @@ + + + + litemall-cache + org.linlinjava + 0.1.0 + + jar + 4.0.0 + + litemall-ehcache + + + + net.sf.ehcache + ehcache + + + + \ No newline at end of file diff --git a/litemall-cache/litemall-redis/pom.xml b/litemall-cache/litemall-redis/pom.xml new file mode 100644 index 000000000..0c221bebc --- /dev/null +++ b/litemall-cache/litemall-redis/pom.xml @@ -0,0 +1,41 @@ + + + 4.0.0 + litemall-redis + jar + + + org.linlinjava + litemall + 0.1.0 + + + + + + org.linlinjava + litemall-cache + + + + org.springframework.boot + spring-boot-starter-data-redis + + + + com.fasterxml.jackson.core + jackson-databind + 2.9.8 + + + + + com.fasterxml.jackson.datatype + jackson-datatype-jdk8 + 2.9.8 + + + + \ No newline at end of file diff --git a/litemall-cache/litemall-redis/src/main/java/org/linlinjava/litemall/core/cache/redis/Application.java b/litemall-cache/litemall-redis/src/main/java/org/linlinjava/litemall/core/cache/redis/Application.java new file mode 100644 index 000000000..dcff89560 --- /dev/null +++ b/litemall-cache/litemall-redis/src/main/java/org/linlinjava/litemall/core/cache/redis/Application.java @@ -0,0 +1,14 @@ +package org.linlinjava.litemall.core.cache.redis; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cache.annotation.EnableCaching; + +@SpringBootApplication(scanBasePackages = {"org.linlinjava.litemall.core.cache"}) +@EnableCaching +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} diff --git a/litemall-cache/litemall-redis/src/main/java/org/linlinjava/litemall/core/cache/redis/config/RedisConfig.java b/litemall-cache/litemall-redis/src/main/java/org/linlinjava/litemall/core/cache/redis/config/RedisConfig.java new file mode 100644 index 000000000..f1340dc53 --- /dev/null +++ b/litemall-cache/litemall-redis/src/main/java/org/linlinjava/litemall/core/cache/redis/config/RedisConfig.java @@ -0,0 +1,47 @@ +package org.linlinjava.litemall.core.cache.redis.config; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; +import org.springframework.cache.CacheManager; +import org.springframework.cache.annotation.CachingConfigurerSupport; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.cache.RedisCacheConfiguration; +import org.springframework.data.redis.cache.RedisCacheManager; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.serializer.*; + +/** + * + * @author mail@dongguochao.com + */ +@Configuration +public class RedisConfig extends CachingConfigurerSupport { + + @Bean + public CacheManager cacheManager(RedisConnectionFactory factory) { + RedisSerializer redisSerializer = new StringRedisSerializer(); + Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); + + //解决查询缓存转换异常的问题 + ObjectMapper om = new ObjectMapper(); + om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); + om.registerModule(new Jdk8Module()); + om.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + + // 配置序列化(解决乱码的问题) + RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig() + .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer)) + .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)) + .disableCachingNullValues(); + + RedisCacheManager cacheManager = RedisCacheManager.builder(factory) + .cacheDefaults(config) + .build(); + return cacheManager; + } +} diff --git a/litemall-cache/litemall-redis/src/main/resources/application-redis.yml b/litemall-cache/litemall-redis/src/main/resources/application-redis.yml new file mode 100644 index 000000000..3111556bc --- /dev/null +++ b/litemall-cache/litemall-redis/src/main/resources/application-redis.yml @@ -0,0 +1,29 @@ +# 查看spring-configuration-metadata.json +spring: + redis: + # 集群配置 +# sentinel: +# master: # +# nodes: # + + # 使用jedis管理redis client + jedis: + pool: + max-idle: 20 + min-idle: 1 + max-active: 10 + max-wait: 0 + password: + host: 127.0.0.1 + timeout: 5000 + port: 6379 + database: 0 + cache: + redis: + use-key-prefix: true + key-prefix: dev + cache-null-values: false + time-to-live: 20s + jackson: + serialization: + WRITE_DATES_AS_TIMESTAMPS: false \ No newline at end of file diff --git a/litemall-cache/litemall-redis/src/main/resources/application.yml b/litemall-cache/litemall-redis/src/main/resources/application.yml new file mode 100644 index 000000000..1002f668d --- /dev/null +++ b/litemall-cache/litemall-redis/src/main/resources/application.yml @@ -0,0 +1,9 @@ +spring: + profiles: + active: redis, cache + messages: + encoding: UTF-8 +logging: + level: + root: ERROR + org.springframework: DEBUG \ No newline at end of file diff --git a/litemall-cache/litemall-redis/src/test/java/org/linlinjava/litemall/core/cache/redis/CacheTest.java b/litemall-cache/litemall-redis/src/test/java/org/linlinjava/litemall/core/cache/redis/CacheTest.java new file mode 100644 index 000000000..526f086b7 --- /dev/null +++ b/litemall-cache/litemall-redis/src/test/java/org/linlinjava/litemall/core/cache/redis/CacheTest.java @@ -0,0 +1,25 @@ +package org.linlinjava.litemall.core.cache.redis; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest(classes = Application.class) +public class CacheTest { + @Autowired + Testor testor; + + @Test + public void cacheEnableTest(){ + + int i1 = testor.increateAndGet(); + int i2 = testor.increateAndGet(); + int i3 = testor.increateAndGet(); + assert i1==0; + assert i2==0; + assert i3==0; + } +} diff --git a/litemall-cache/litemall-redis/src/test/java/org/linlinjava/litemall/core/cache/redis/Testor.java b/litemall-cache/litemall-redis/src/test/java/org/linlinjava/litemall/core/cache/redis/Testor.java new file mode 100644 index 000000000..264fc0b58 --- /dev/null +++ b/litemall-cache/litemall-redis/src/test/java/org/linlinjava/litemall/core/cache/redis/Testor.java @@ -0,0 +1,14 @@ +package org.linlinjava.litemall.core.cache.redis; + +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Component; + +@Component +public class Testor { + @Cacheable(value = "litemall" ,key = "targetClass + ' - ' + methodName") + public int increateAndGet() { + return count++; + } + + private int count = 0; +} \ No newline at end of file diff --git a/litemall-cache/pom.xml b/litemall-cache/pom.xml new file mode 100644 index 000000000..282b33963 --- /dev/null +++ b/litemall-cache/pom.xml @@ -0,0 +1,32 @@ + + + + org.linlinjava + litemall + 0.1.0 + + 4.0.0 + + litemall-cache + jar + + + litemall-ehcache + + litemall-redis + + + + + org.springframework.boot + spring-boot-starter-cache + + + redis.clients + jedis + + + + \ No newline at end of file diff --git a/litemall-cache/src/main/java/org/linlinjava/litemall/core/cache/Application.java b/litemall-cache/src/main/java/org/linlinjava/litemall/core/cache/Application.java new file mode 100644 index 000000000..41c084eed --- /dev/null +++ b/litemall-cache/src/main/java/org/linlinjava/litemall/core/cache/Application.java @@ -0,0 +1,14 @@ +package org.linlinjava.litemall.core.cache; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cache.annotation.EnableCaching; + +@SpringBootApplication(scanBasePackages = {"org.linlinjava.litemall.core.cache"}) +@EnableCaching +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} diff --git a/litemall-cache/src/main/resources/application-cache.yml b/litemall-cache/src/main/resources/application-cache.yml new file mode 100644 index 000000000..e7019669b --- /dev/null +++ b/litemall-cache/src/main/resources/application-cache.yml @@ -0,0 +1,7 @@ +#litemall: +# cache: +# # 默认缓存最大时间,6个小时 +# expiration: 3600 +#spring: +# cache: +# cache-names: litemall \ No newline at end of file diff --git a/litemall-cache/src/main/resources/application.yml b/litemall-cache/src/main/resources/application.yml new file mode 100644 index 000000000..b66956507 --- /dev/null +++ b/litemall-cache/src/main/resources/application.yml @@ -0,0 +1,9 @@ +spring: + profiles: + active: cache + messages: + encoding: UTF-8 +logging: + level: + root: ERROR + org.springframework: ERROR \ No newline at end of file diff --git a/litemall-cache/src/test/java/org/linlinjava/litemall/core/cache/CacheTest.java b/litemall-cache/src/test/java/org/linlinjava/litemall/core/cache/CacheTest.java new file mode 100644 index 000000000..f17257997 --- /dev/null +++ b/litemall-cache/src/test/java/org/linlinjava/litemall/core/cache/CacheTest.java @@ -0,0 +1,25 @@ +package org.linlinjava.litemall.core.cache; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest(classes = Application.class) +public class CacheTest { + @Autowired + Testor testor; + + @Test + public void cacheEnableTest(){ + + int i1 = testor.increateAndGet(); + int i2 = testor.increateAndGet(); + int i3 = testor.increateAndGet(); + assert i1==0; + assert i2==0; + assert i3==0; + } +} diff --git a/litemall-cache/src/test/java/org/linlinjava/litemall/core/cache/Testor.java b/litemall-cache/src/test/java/org/linlinjava/litemall/core/cache/Testor.java new file mode 100644 index 000000000..2938fd971 --- /dev/null +++ b/litemall-cache/src/test/java/org/linlinjava/litemall/core/cache/Testor.java @@ -0,0 +1,15 @@ +package org.linlinjava.litemall.core.cache; + +import org.springframework.cache.annotation.CacheConfig; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Component; + +@Component +public class Testor { + @Cacheable(value = "litemall" ,key = "targetClass + ' - ' + methodName") + public int increateAndGet() { + return count++; + } + + private int count = 0; +} \ No newline at end of file diff --git a/litemall-core/src/main/java/org/linlinjava/litemall/core/Application.java b/litemall-core/src/main/java/org/linlinjava/litemall/core/Application.java index e8a98e3c9..82ff7e6c0 100644 --- a/litemall-core/src/main/java/org/linlinjava/litemall/core/Application.java +++ b/litemall-core/src/main/java/org/linlinjava/litemall/core/Application.java @@ -3,9 +3,11 @@ import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cache.annotation.EnableCaching; @SpringBootApplication(scanBasePackages = {"org.linlinjava.litemall.db", "org.linlinjava.litemall.core"}) @MapperScan("org.linlinjava.litemall.db.dao") +@EnableCaching public class Application { public static void main(String[] args) { diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallAdService.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallAdService.java index 0dbd202c6..b0966a7ae 100644 --- a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallAdService.java +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallAdService.java @@ -4,6 +4,7 @@ import org.linlinjava.litemall.db.dao.LitemallAdMapper; import org.linlinjava.litemall.db.domain.LitemallAd; import org.linlinjava.litemall.db.domain.LitemallAdExample; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; @@ -57,15 +58,18 @@ public int countSelective(String name, String content, Integer page, Integer siz return (int) adMapper.countByExample(example); } + @CacheEvict(value = "homepage", allEntries = true) public int updateById(LitemallAd ad) { ad.setUpdateTime(LocalDateTime.now()); return adMapper.updateByPrimaryKeySelective(ad); } + @CacheEvict(value = "homepage", allEntries = true) public void deleteById(Integer id) { adMapper.logicalDeleteByPrimaryKey(id); } + @CacheEvict(value = "homepage", allEntries = true) public void add(LitemallAd ad) { ad.setAddTime(LocalDateTime.now()); ad.setUpdateTime(LocalDateTime.now()); diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallBrandService.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallBrandService.java index 3229f2011..d749c228d 100644 --- a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallBrandService.java +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallBrandService.java @@ -5,6 +5,7 @@ import org.linlinjava.litemall.db.domain.LitemallBrand; import org.linlinjava.litemall.db.domain.LitemallBrand.Column; import org.linlinjava.litemall.db.domain.LitemallBrandExample; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; @@ -71,15 +72,18 @@ public int countSelective(String id, String name, Integer page, Integer size, St return (int) brandMapper.countByExample(example); } + @CacheEvict(value = "homepage", allEntries = true) public int updateById(LitemallBrand brand) { brand.setUpdateTime(LocalDateTime.now()); return brandMapper.updateByPrimaryKeySelective(brand); } + @CacheEvict(value = "homepage", allEntries = true) public void deleteById(Integer id) { brandMapper.logicalDeleteByPrimaryKey(id); } + @CacheEvict(value = "homepage", allEntries = true) public void add(LitemallBrand brand) { brand.setAddTime(LocalDateTime.now()); brand.setUpdateTime(LocalDateTime.now()); diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallCategoryService.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallCategoryService.java index bb24da7dc..093988006 100644 --- a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallCategoryService.java +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallCategoryService.java @@ -4,6 +4,7 @@ import org.linlinjava.litemall.db.dao.LitemallCategoryMapper; import org.linlinjava.litemall.db.domain.LitemallCategory; import org.linlinjava.litemall.db.domain.LitemallCategoryExample; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; @@ -88,15 +89,18 @@ public int countSelective(String id, String name, Integer page, Integer size, St return (int) categoryMapper.countByExample(example); } + @CacheEvict(value = {"category", "homepage"}, allEntries = true) public int updateById(LitemallCategory category) { category.setUpdateTime(LocalDateTime.now()); return categoryMapper.updateByPrimaryKeySelective(category); } + @CacheEvict(value = "category", allEntries = true) public void deleteById(Integer id) { categoryMapper.logicalDeleteByPrimaryKey(id); } + @CacheEvict(value = "category", allEntries = true) public void add(LitemallCategory category) { category.setAddTime(LocalDateTime.now()); category.setUpdateTime(LocalDateTime.now()); diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallCouponService.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallCouponService.java index e99f0663f..cc34a3d65 100644 --- a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallCouponService.java +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallCouponService.java @@ -7,6 +7,7 @@ import org.linlinjava.litemall.db.domain.*; import org.linlinjava.litemall.db.domain.LitemallCoupon.Column; import org.linlinjava.litemall.db.util.CouponConstant; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -161,11 +162,13 @@ public void add(LitemallCoupon coupon) { couponMapper.insertSelective(coupon); } + @CacheEvict(value = "homepage") public int updateById(LitemallCoupon coupon) { coupon.setUpdateTime(LocalDateTime.now()); return couponMapper.updateByPrimaryKeySelective(coupon); } + @CacheEvict(value = "homepage") public void deleteById(Integer id) { couponMapper.logicalDeleteByPrimaryKey(id); } diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallCouponUserService.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallCouponUserService.java index b291b0d04..ec4dfe117 100644 --- a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallCouponUserService.java +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallCouponUserService.java @@ -5,6 +5,7 @@ import org.linlinjava.litemall.db.domain.LitemallCouponUser; import org.linlinjava.litemall.db.domain.LitemallCouponUserExample; import org.linlinjava.litemall.db.util.CouponUserConstant; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; @@ -29,6 +30,12 @@ public Integer countUserAndCoupon(Integer userId, Integer couponId) { return (int)couponUserMapper.countByExample(example); } + /** + * 用户领取优惠券 + * todo 检查重复领取 + * @param couponUser + */ + @CacheEvict(value = "homepage", key = "#couponUser.userId") public void add(LitemallCouponUser couponUser) { couponUser.setAddTime(LocalDateTime.now()); couponUser.setUpdateTime(LocalDateTime.now()); @@ -106,7 +113,7 @@ public LitemallCouponUser findById(Integer id) { return couponUserMapper.selectByPrimaryKey(id); } - + @CacheEvict(value = "homepage", key = "#couponUser.userId", condition = "#couponUser.userId != null") public int update(LitemallCouponUser couponUser) { couponUser.setUpdateTime(LocalDateTime.now()); return couponUserMapper.updateByPrimaryKeySelective(couponUser); diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallGoodsService.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallGoodsService.java index 1ff3e24c2..7eb9c8839 100644 --- a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallGoodsService.java +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallGoodsService.java @@ -5,6 +5,7 @@ import org.linlinjava.litemall.db.domain.LitemallGoods; import org.linlinjava.litemall.db.domain.LitemallGoods.Column; import org.linlinjava.litemall.db.domain.LitemallGoodsExample; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; @@ -232,15 +233,18 @@ public Integer queryOnSale() { return (int) goodsMapper.countByExample(example); } + @CacheEvict(value = "homepage", allEntries = true) public int updateById(LitemallGoods goods) { goods.setUpdateTime(LocalDateTime.now()); return goodsMapper.updateByPrimaryKeySelective(goods); } + @CacheEvict(value = "homepage", allEntries = true) public void deleteById(Integer id) { goodsMapper.logicalDeleteByPrimaryKey(id); } + @CacheEvict(value = "homepage", allEntries = true) public void add(LitemallGoods goods) { goods.setAddTime(LocalDateTime.now()); goods.setUpdateTime(LocalDateTime.now()); diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallGrouponRulesService.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallGrouponRulesService.java index c3472efee..88efd6311 100644 --- a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallGrouponRulesService.java +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallGrouponRulesService.java @@ -7,6 +7,7 @@ import org.linlinjava.litemall.db.domain.LitemallGoods; import org.linlinjava.litemall.db.domain.LitemallGrouponRules; import org.linlinjava.litemall.db.domain.LitemallGrouponRulesExample; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -141,10 +142,12 @@ public int countSelective(String goodsId, Integer page, Integer limit, String so return (int) mapper.countByExample(example); } + @CacheEvict(value = "homepage", allEntries = true) public void delete(Integer id) { mapper.logicalDeleteByPrimaryKey(id); } + @CacheEvict(value = "homepage", allEntries = true) public int updateById(LitemallGrouponRules grouponRules) { grouponRules.setUpdateTime(LocalDateTime.now()); return mapper.updateByPrimaryKeySelective(grouponRules); diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallGrouponService.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallGrouponService.java index 3ddfd05e5..f2641d1da 100644 --- a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallGrouponService.java +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallGrouponService.java @@ -5,6 +5,7 @@ import org.linlinjava.litemall.db.dao.LitemallGrouponMapper; import org.linlinjava.litemall.db.domain.LitemallGroupon; import org.linlinjava.litemall.db.domain.LitemallGrouponExample; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -91,6 +92,7 @@ public int countGroupon(Integer grouponId) { return (int) mapper.countByExample(example); } + @CacheEvict(value = "homepage", allEntries = true) public int updateById(LitemallGroupon groupon) { groupon.setUpdateTime(LocalDateTime.now()); return mapper.updateByPrimaryKeySelective(groupon); @@ -102,6 +104,7 @@ public int updateById(LitemallGroupon groupon) { * @param groupon * @return */ + @CacheEvict(value = "homepage", allEntries = true) public int createGroupon(LitemallGroupon groupon) { groupon.setAddTime(LocalDateTime.now()); groupon.setUpdateTime(LocalDateTime.now()); diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallTopicService.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallTopicService.java index 25cac3dd3..9bf7ae913 100644 --- a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallTopicService.java +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallTopicService.java @@ -5,6 +5,7 @@ import org.linlinjava.litemall.db.domain.LitemallTopic; import org.linlinjava.litemall.db.domain.LitemallTopic.Column; import org.linlinjava.litemall.db.domain.LitemallTopicExample; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; @@ -97,6 +98,7 @@ public int countSelective(String title, String subtitle, Integer page, Integer s return (int) topicMapper.countByExample(example); } + @CacheEvict(value = "homepage", allEntries = true) public int updateById(LitemallTopic topic) { topic.setUpdateTime(LocalDateTime.now()); LitemallTopicExample example = new LitemallTopicExample(); @@ -104,10 +106,12 @@ public int updateById(LitemallTopic topic) { return topicMapper.updateByExampleSelective(topic, example); } + @CacheEvict(value = "homepage", allEntries = true) public void deleteById(Integer id) { topicMapper.logicalDeleteByPrimaryKey(id); } + @CacheEvict(value = "homepage", allEntries = true) public void add(LitemallTopic topic) { topic.setAddTime(LocalDateTime.now()); topic.setUpdateTime(LocalDateTime.now()); diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/HomeCacheManager.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/HomeCacheManager.java deleted file mode 100644 index e0ad689c8..000000000 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/HomeCacheManager.java +++ /dev/null @@ -1,81 +0,0 @@ -package org.linlinjava.litemall.wx.service; - -import java.time.LocalDateTime; -import java.util.HashMap; -import java.util.Map; - -/** - * 简单缓存的数据 - */ -public class HomeCacheManager { - public static final boolean ENABLE = false; - public static final String INDEX = "index"; - public static final String CATALOG = "catalog"; - public static final String GOODS = "goods"; - - private static Map> cacheDataList = new HashMap<>(); - - /** - * 缓存首页数据 - * - * @param data - */ - public static void loadData(String cacheKey, Map data) { - Map cacheData = cacheDataList.get(cacheKey); - //有记录,则先丢弃 - if (cacheData != null) { - cacheData.remove(cacheKey); - } - - cacheData = new HashMap<>(); - //深拷贝 - cacheData.putAll(data); - cacheData.put("isCache", "true"); - //设置缓存有效期为10分钟 - cacheData.put("expireTime", LocalDateTime.now().plusMinutes(10)); - cacheDataList.put(cacheKey, cacheData); - } - - public static Map getCacheData(String cacheKey) { - return cacheDataList.get(cacheKey); - } - - /** - * 判断缓存中是否有数据 - * - * @return - */ - public static boolean hasData(String cacheKey) { - if (!ENABLE) - return false; - - Map cacheData = cacheDataList.get(cacheKey); - if (cacheData == null) { - return false; - } else { - LocalDateTime expire = (LocalDateTime) cacheData.get("expireTime"); - if (expire.isBefore(LocalDateTime.now())) { - return false; - } else { - return true; - } - } - } - - /** - * 清除所有缓存 - */ - public static void clearAll() { - cacheDataList = new HashMap<>(); - } - - /** - * 清除缓存数据 - */ - public static void clear(String cacheKey) { - Map cacheData = cacheDataList.get(cacheKey); - if (cacheData != null) { - cacheDataList.remove(cacheKey); - } - } -} diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCatalogController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCatalogController.java index 4602e85ce..3904d125d 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCatalogController.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxCatalogController.java @@ -5,8 +5,8 @@ import org.linlinjava.litemall.core.util.ResponseUtil; import org.linlinjava.litemall.db.domain.LitemallCategory; import org.linlinjava.litemall.db.service.LitemallCategoryService; -import org.linlinjava.litemall.wx.service.HomeCacheManager; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.Cacheable; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -75,12 +75,8 @@ public Object index(Integer id, * @return 所有分类数据 */ @GetMapping("all") + @Cacheable(value = "catalog") public Object queryAll() { - //优先从缓存中读取 - if (HomeCacheManager.hasData(HomeCacheManager.CATALOG)) { - return ResponseUtil.ok(HomeCacheManager.getCacheData(HomeCacheManager.CATALOG)); - } - // 所有一级分类目录 List l1CatList = categoryService.queryL1(); @@ -108,8 +104,6 @@ public Object queryAll() { data.put("currentCategory", currentCategory); data.put("currentSubCategory", currentSubCategory); - //缓存数据 - HomeCacheManager.loadData(HomeCacheManager.CATALOG, data); return ResponseUtil.ok(data); } @@ -120,6 +114,7 @@ public Object queryAll() { * @return 当前分类栏目 */ @GetMapping("current") + @Cacheable(value = "category", key = "#p0") public Object current(@NotNull Integer id) { // 当前分类 LitemallCategory currentCategory = categoryService.findById(id); diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxGoodsController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxGoodsController.java index 12c509e03..3210b232a 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxGoodsController.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxGoodsController.java @@ -10,8 +10,8 @@ import org.linlinjava.litemall.db.domain.*; import org.linlinjava.litemall.db.service.*; import org.linlinjava.litemall.wx.annotation.LoginUser; -import org.linlinjava.litemall.wx.service.GetRegionService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.Cacheable; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -242,6 +242,8 @@ public Object category(@NotNull Integer id) { * @return 根据条件搜素的商品详情 */ @GetMapping("list") + // 目前的拉取策略是拉取100项(全部),只根据,可缓存 by mail@dongguochao.com + @Cacheable(value = "category", key = "#categoryId + #brandId + #isNew + #isHot", condition = "#keyword != null && #keyword.length() != 0") public Object list( Integer categoryId, Integer brandId, diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxHomeController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxHomeController.java index 3d2941cae..73fcfe6ef 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxHomeController.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxHomeController.java @@ -8,8 +8,9 @@ import org.linlinjava.litemall.db.domain.LitemallGoods; import org.linlinjava.litemall.db.service.*; import org.linlinjava.litemall.wx.annotation.LoginUser; -import org.linlinjava.litemall.wx.service.HomeCacheManager; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -58,28 +59,28 @@ public class WxHomeController { private static ThreadPoolExecutor executorService = new ThreadPoolExecutor(9, 9, 1000, TimeUnit.MILLISECONDS, WORK_QUEUE, HANDLER); + /** + * todo 建议重写 + * by blackdog1987@gmail.com + * @param key + * @return + */ @GetMapping("/cache") + @CacheEvict(value = {"homepage", "category"}, allEntries = true) public Object cache(@NotNull String key) { - if (!key.equals("litemall_cache")) { - return ResponseUtil.fail(); - } - - // 清除缓存 - HomeCacheManager.clearAll(); + logger.warn("缓存已经由cacheable实现,不再需要清除缓存"); return ResponseUtil.ok("缓存已清除"); } /** - * 首页数据 + * 首页数据。获取内容包含:广告Ad,分类category,优惠券coupon,couponUser,商品goods,品牌brand,主题topic,团购groupon。 + * 获取首页添加了缓存,在对缓存内容进行写操作的时候,需要对缓存进行evict操作。 * @param userId 当用户已经登录时,非空。为登录状态为null * @return 首页数据 */ @GetMapping("/index") + @Cacheable(value = "homepage", key = "'' +#p0") public Object index(@LoginUser Integer userId) { - //优先从缓存中读取 - if (HomeCacheManager.hasData(HomeCacheManager.INDEX)) { - return ResponseUtil.ok(HomeCacheManager.getCacheData(HomeCacheManager.INDEX)); - } ExecutorService executorService = Executors.newFixedThreadPool(10); Map data = new HashMap<>(); @@ -92,6 +93,7 @@ public Object index(@LoginUser Integer userId) { if(userId == null){ couponListCallable = () -> couponService.queryList(0, 3); } else { + // 获取登录用户可以领取的优惠券列表 couponListCallable = () -> couponService.queryAvailableList(userId,0, 3); } @@ -143,8 +145,6 @@ public Object index(@LoginUser Integer userId) { catch (Exception e) { e.printStackTrace(); } - //缓存数据 - HomeCacheManager.loadData(HomeCacheManager.INDEX, data); executorService.shutdown(); return ResponseUtil.ok(data); } diff --git a/pom.xml b/pom.xml index 325c07cb9..19c15c2d0 100644 --- a/pom.xml +++ b/pom.xml @@ -25,6 +25,9 @@ litemall-wx-api litemall-admin-api litemall-all + litemall-cache + litemall-cache/litemall-redis + litemall-cache/litemall-ehcache @@ -54,6 +57,21 @@ litemall-all ${project.version} + + org.linlinjava + litemall-cache + ${project.version} + + + org.linlinjava + litemall-redis + ${project.version} + + + org.linlinjava + litemall-ehcache + ${project.version} + @@ -141,11 +159,11 @@ - - org.springframework.boot - spring-boot-devtools - true - + + + + +