WANG 6 éve
szülő
commit
6adfd0bfbf

+ 5 - 0
examcloud-core-basic-base/pom.xml

@@ -14,6 +14,11 @@
 			<artifactId>examcloud-web</artifactId>
 			<version>${examcloud.version}</version>
 		</dependency>
+		<dependency>
+			<groupId>cn.com.qmth.examcloud</groupId>
+			<artifactId>examcloud-support</artifactId>
+			<version>${examcloud.version}</version>
+		</dependency>
 		<dependency>
 			<groupId>cn.com.qmth.examcloud.reports</groupId>
 			<artifactId>examcloud-reports-commons</artifactId>

+ 23 - 17
examcloud-core-basic-dao/src/main/java/cn/com/qmth/examcloud/core/basic/dao/AppRepo.java

@@ -1,17 +1,23 @@
-package cn.com.qmth.examcloud.core.basic.dao;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.repository.query.QueryByExampleExecutor;
-
-import cn.com.qmth.examcloud.core.basic.dao.entity.AppEntity;
-
-/**
- * 类注释
- *
- * @author WANGWEI
- * @date 2018年6月11日
- * @Copyright (c) 2018-? http://qmth.com.cn All Rights Reserved.
- */
-public interface AppRepo extends JpaRepository<AppEntity, Long>, QueryByExampleExecutor<AppEntity> {
-
-}
+package cn.com.qmth.examcloud.core.basic.dao;
+
+import java.util.List;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.data.repository.query.QueryByExampleExecutor;
+
+import cn.com.qmth.examcloud.core.basic.dao.entity.AppEntity;
+
+/**
+ * 类注释
+ *
+ * @author WANGWEI
+ * @date 2018年6月11日
+ * @Copyright (c) 2018-? http://qmth.com.cn All Rights Reserved.
+ */
+public interface AppRepo extends JpaRepository<AppEntity, Long>, QueryByExampleExecutor<AppEntity> {
+
+	@Query(value = "select id,code from AppEntity a where id >= :beginId and id < :endId order by id ASC")
+	List<Object[]> findIdList(@Param("beginId") Long beginId, @Param("endId") Long endId);
+}

+ 16 - 0
examcloud-core-basic-dao/src/main/java/cn/com/qmth/examcloud/core/basic/dao/entity/AppEntity.java

@@ -80,4 +80,20 @@ public class AppEntity extends JpaEntity {
 		this.code = code;
 	}
 
+	public String getSecretKey() {
+		return secretKey;
+	}
+
+	public void setSecretKey(String secretKey) {
+		this.secretKey = secretKey;
+	}
+
+	public Long getTimeRange() {
+		return timeRange;
+	}
+
+	public void setTimeRange(Long timeRange) {
+		this.timeRange = timeRange;
+	}
+
 }

+ 70 - 0
examcloud-core-basic-service/src/main/java/cn/com/qmth/examcloud/core/basic/service/cache/AppCache.java

@@ -0,0 +1,70 @@
+package cn.com.qmth.examcloud.core.basic.service.cache;
+
+import java.util.List;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.google.common.collect.Lists;
+
+import cn.com.qmth.examcloud.commons.helpers.ObjectHolder;
+import cn.com.qmth.examcloud.core.basic.dao.AppRepo;
+import cn.com.qmth.examcloud.core.basic.dao.entity.AppEntity;
+import cn.com.qmth.examcloud.support.cache.bean.AppCacheBean;
+import cn.com.qmth.examcloud.web.cache.FullObjectRedisCache;
+import cn.com.qmth.examcloud.web.helpers.GlobalHelper;
+
+@Service
+public class AppCache extends FullObjectRedisCache<AppCacheBean> {
+
+	@Autowired
+	AppRepo appRepo;
+
+	@Override
+	public AppCacheBean loadFromResource(Object... keys) {
+		Long appId = (Long) keys[0];
+		AppEntity a = GlobalHelper.getPresentEntity(appRepo, appId, AppEntity.class);
+
+		AppCacheBean b = new AppCacheBean();
+		b.setCode(a.getCode());
+		b.setId(a.getId());
+		b.setName(a.getName());
+		b.setSecretKey(a.getSecretKey());
+		b.setTimeRange(a.getTimeRange());
+
+		return b;
+	}
+
+	@Override
+	protected String getKeyPrefix() {
+		return "$_APP:";
+	}
+
+	@Override
+	protected List<Object[]> getKeys(ObjectHolder<Long> beginIndex, ObjectHolder<Boolean> empty) {
+		if (beginIndex.isNull()) {
+			beginIndex.set(0L);
+		}
+		Long begin = beginIndex.get();
+		Long end = begin + 500;
+
+		List<Object[]> list = appRepo.findIdList(begin, end);
+
+		List<Object[]> ret = Lists.newArrayList();
+
+		empty.set(CollectionUtils.isEmpty(list));
+		if (empty.get()) {
+			return ret;
+		}
+
+		for (Object[] cur : list) {
+			Long id = (Long) cur[0];
+			Object[] e = new Object[]{id};
+			ret.add(e);
+			beginIndex.set(id + 1);
+		}
+		return ret;
+	}
+
+}

+ 20 - 0
examcloud-core-basic-starter/src/main/java/cn/com/qmth/examcloud/core/basic/starter/CoreBasicApp.java

@@ -1,5 +1,6 @@
 package cn.com.qmth.examcloud.core.basic.starter;
 
+import org.apache.logging.log4j.ThreadContext;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
@@ -11,7 +12,9 @@ import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
+import cn.com.qmth.examcloud.core.basic.service.cache.AppCache;
 import cn.com.qmth.examcloud.web.bootstrap.AppBootstrap;
+import cn.com.qmth.examcloud.web.support.SpringContextHolder;
 
 @SpringBootApplication
 @Configuration
@@ -41,7 +44,24 @@ public class CoreBasicApp {
 	 * @throws Exception
 	 */
 	public static void main(String[] args) throws Exception {
+
 		AppBootstrap.run(CoreBasicApp.class, args);
+
+		initCache();
 	}
 
+	/**
+	 * 初始化缓存
+	 *
+	 * @author WANGWEI
+	 */
+	private static void initCache() {
+		new Thread(new Runnable() {
+			@Override
+			public void run() {
+				ThreadContext.put("TRACE_ID", Thread.currentThread().getName());
+				SpringContextHolder.getBean(AppCache.class).loadAllFromResource();
+			}
+		}, "cache").start();
+	}
 }