From 974732370bb3c464d71c33c29ae4b470834da19a Mon Sep 17 00:00:00 2001 From: yu Date: Fri, 14 Oct 2022 13:05:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=BAindex=E6=B3=A8=E8=A7=A3=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=B7=BB=E5=8A=A0MongoDB=20=E7=9A=84ttl=E5=B1=9E?= =?UTF-8?q?=E6=80=A7,=E5=B9=B6=E8=AE=BE=E7=BD=AE=E8=BF=87=E6=9C=9F?= =?UTF-8?q?=E6=97=B6=E9=97=B4,=E5=8D=95=E4=BD=8D=E7=A7=92,=E5=BD=93?= =?UTF-8?q?=E8=AE=BE=E7=BD=AEttl=3Dtrue=E6=97=B6=E6=A3=80=E9=AA=8C?= =?UTF-8?q?=E7=B4=A2=E5=BC=95=E6=95=B0=E6=8D=AE=E7=B1=BB=E5=9E=8B=E5=8F=AA?= =?UTF-8?q?=E8=83=BD=E6=98=AFData=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/zfoo/orm/manager/OrmManager.java | 17 ++++++++++++- .../java/com/zfoo/orm/model/anno/Index.java | 4 +++ .../java/com/zfoo/orm/model/vo/IndexDef.java | 25 ++++++++++++++++++- 3 files changed, 44 insertions(+), 2 deletions(-) diff --git a/orm/src/main/java/com/zfoo/orm/manager/OrmManager.java b/orm/src/main/java/com/zfoo/orm/manager/OrmManager.java index eebd91f6..54bfed6a 100644 --- a/orm/src/main/java/com/zfoo/orm/manager/OrmManager.java +++ b/orm/src/main/java/com/zfoo/orm/manager/OrmManager.java @@ -54,6 +54,7 @@ import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.*; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -143,6 +144,11 @@ public class OrmManager implements IOrmManager { if (!hasIndex) { var indexOptions = new IndexOptions(); indexOptions.unique(index.isUnique()); + + if(index.isTtl()){ + indexOptions.expireAfter(index.getExpireAfterSeconds(), TimeUnit.SECONDS) ; + } + if (index.isAscending()) { collection.createIndex(Indexes.ascending(fieldName), indexOptions); } else { @@ -326,7 +332,16 @@ public class OrmManager implements IOrmManager { var fields = ReflectionUtils.getFieldsByAnnoInPOJOClass(clazz, Index.class); for (var field : fields) { var indexAnnotation = field.getAnnotation(Index.class); - IndexDef indexDef = new IndexDef(field, indexAnnotation.ascending(), indexAnnotation.unique()); + + if(indexAnnotation.ttl()) { + if (!field.getGenericType().toString().equals( + "class java.util.Date")){ + throw new IllegalArgumentException(StringUtils.format("[{}]不是Date类型", field.getName())); + } + + } + + IndexDef indexDef = new IndexDef(field, indexAnnotation.ascending(), indexAnnotation.unique(),indexAnnotation.ttl(),indexAnnotation.expireAfterSeconds()); indexDefMap.put(field.getName(), indexDef); } diff --git a/orm/src/main/java/com/zfoo/orm/model/anno/Index.java b/orm/src/main/java/com/zfoo/orm/model/anno/Index.java index 116467a9..4ef1b456 100644 --- a/orm/src/main/java/com/zfoo/orm/model/anno/Index.java +++ b/orm/src/main/java/com/zfoo/orm/model/anno/Index.java @@ -26,4 +26,8 @@ public @interface Index { boolean ascending(); boolean unique(); + + boolean ttl() default false;; + + long expireAfterSeconds() default 0L; } diff --git a/orm/src/main/java/com/zfoo/orm/model/vo/IndexDef.java b/orm/src/main/java/com/zfoo/orm/model/vo/IndexDef.java index 3214b234..86133fb4 100644 --- a/orm/src/main/java/com/zfoo/orm/model/vo/IndexDef.java +++ b/orm/src/main/java/com/zfoo/orm/model/vo/IndexDef.java @@ -25,10 +25,17 @@ public class IndexDef { private boolean ascending; private boolean unique; - public IndexDef(Field field, boolean ascending, boolean unique) { + private boolean ttl; + + private long expireAfterSeconds; + + + public IndexDef(Field field, boolean ascending, boolean unique, boolean ttl, long expireAfterSeconds) { this.field = field; this.ascending = ascending; this.unique = unique; + this.ttl = ttl; + this.expireAfterSeconds = expireAfterSeconds; } public Field getField() { @@ -54,4 +61,20 @@ public class IndexDef { public void setUnique(boolean unique) { this.unique = unique; } + + public boolean isTtl() { + return ttl; + } + + public void setTtl(boolean ttl) { + this.ttl = ttl; + } + + public long getExpireAfterSeconds() { + return expireAfterSeconds; + } + + public void setExpireAfterSeconds(long expireAfterSeconds) { + this.expireAfterSeconds = expireAfterSeconds; + } }