Skip to content

Commit 303b377

Browse files
committed
GroovyScript
1 parent 62a049a commit 303b377

33 files changed

Lines changed: 669 additions & 381 deletions
Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.codingapi.springboot.script;
22

3-
import com.codingapi.springboot.script.runner.TempClearRunner;
3+
import com.codingapi.springboot.script.properties.GroovyScriptProperties;
4+
import com.codingapi.springboot.script.runner.GroovyScriptEngineRunner;
5+
import org.springframework.boot.context.properties.ConfigurationProperties;
46
import org.springframework.context.annotation.Bean;
57
import org.springframework.context.annotation.ComponentScan;
68
import org.springframework.context.annotation.Configuration;
@@ -10,8 +12,14 @@
1012
public class AutoConfiguration {
1113

1214
@Bean
13-
public TempClearRunner tempClearRunner() {
14-
return new TempClearRunner();
15+
public GroovyScriptEngineRunner tempClearRunner() {
16+
return new GroovyScriptEngineRunner();
17+
}
18+
19+
@Bean
20+
@ConfigurationProperties(prefix = "codingapi.script")
21+
public GroovyScriptProperties groovyScriptProperties(){
22+
return new GroovyScriptProperties();
1523
}
1624

1725
}

springboot-starter-script/src/main/java/com/codingapi/springboot/script/GroovyScript.java

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
package com.codingapi.springboot.script;
22

3-
import com.codingapi.springboot.script.cache.TempGroovyScriptContext;
3+
import com.codingapi.springboot.script.temp.TempGroovyScriptContext;
44
import com.codingapi.springboot.script.meta.GroovyMetadata;
55
import com.codingapi.springboot.script.repository.GroovyScriptRepositoryContext;
6-
import com.codingapi.springboot.script.parser.GroovyMetadataParserService;
7-
import com.codingapi.springboot.script.strategy.GroovyMetadataGenerateStrategyContext;
6+
import com.codingapi.springboot.script.scanner.GroovyMetadataScannerUtils;
87
import lombok.AllArgsConstructor;
98
import lombok.Getter;
109
import lombok.Setter;
@@ -155,7 +154,7 @@ public GroovyScript build() {
155154
* 临时存储
156155
* 数据将会定时清理
157156
*/
158-
public void temp(){
157+
public void temp() {
159158
TempGroovyScriptContext.getInstance().save(this);
160159
}
161160

@@ -173,19 +172,20 @@ public void save() {
173172
/**
174173
* 删除对象
175174
*/
176-
public void remove(){
175+
public void remove() {
177176
GroovyScriptRepositoryContext.getInstance().delete(this.getKey());
178177
// 清理临时数据
179178
TempGroovyScriptContext.getInstance().remove(this.getKey());
180179
}
181180

182181
/**
183182
* 复制对象
183+
*
184184
* @param key 新的key
185185
* @return 脚本对象
186186
*/
187-
public GroovyScript copy(String key){
188-
return new GroovyScript(key,script,description,method,returnType,binds,requests,typeOne,typeTwo,tag,remark,createTime,updateTime);
187+
public GroovyScript copy(String key) {
188+
return new GroovyScript(key, script, description, method, returnType, binds, requests, typeOne, typeTwo, tag, remark, createTime, updateTime);
189189
}
190190

191191

@@ -311,12 +311,7 @@ public <T> T invoke(TransactionMode transactionMode) {
311311
* 构建脚本元数据信息
312312
*/
313313
public GroovyMetadata toMetadata() {
314-
GroovyMetadata metadata = GroovyMetadataGenerateStrategyContext.getInstance().generate(this);
315-
if (metadata != null) {
316-
return metadata;
317-
}
318-
GroovyMetadataParserService groovyMetaDataParserService = new GroovyMetadataParserService(this);
319-
return groovyMetaDataParserService.parser();
314+
return GroovyMetadataScannerUtils.scanner(this);
320315
}
321316

322317

springboot-starter-script/src/main/java/com/codingapi/springboot/script/GroovyScriptRuntimeContext.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.codingapi.springboot.script;
22

3+
import com.codingapi.springboot.script.properties.PropertiesContext;
34
import lombok.Getter;
45

56
import java.util.Map;
@@ -9,12 +10,10 @@ public class GroovyScriptRuntimeContext {
910
@Getter
1011
private final static GroovyScriptRuntimeContext instance = new GroovyScriptRuntimeContext();
1112

12-
public static final int DEFAULT_MAX_CACHE_SIZE = 10 * 1024;
13-
1413
private final GroovyScriptRuntime scriptRuntime;
1514

1615
private GroovyScriptRuntimeContext() {
17-
int maxCacheSize = Integer.parseInt(System.getProperty("DEFAULT_MAX_CACHE_SIZE", String.valueOf(DEFAULT_MAX_CACHE_SIZE)));
16+
int maxCacheSize = PropertiesContext.getInstance().getShellMaxCacheSize();
1817
System.out.println("GroovyScriptRuntimeContext max cache size:" + maxCacheSize);
1918
this.scriptRuntime = new GroovyScriptRuntime(maxCacheSize);
2019
}

springboot-starter-script/src/main/java/com/codingapi/springboot/script/annotation/GroovyScript.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import java.lang.annotation.*;
44

55
/**
6-
* 脚本字段
6+
* 脚本字段,用于获取对象下的脚本key数据
77
*/
88
@Target({ElementType.FIELD})
99
@Retention(RetentionPolicy.RUNTIME)

springboot-starter-script/src/main/java/com/codingapi/springboot/script/annotation/ScriptFunction.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,4 @@
2020
*/
2121
String description() default "";
2222

23-
/**
24-
* 参数
25-
*/
26-
ScriptField[] parameters() default {};
27-
2823
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.codingapi.springboot.script.annotation;
2+
3+
import java.lang.annotation.*;
4+
5+
/**
6+
* 脚本函数参数
7+
*/
8+
@Target({ElementType.PARAMETER})
9+
@Retention(RetentionPolicy.RUNTIME)
10+
@Documented
11+
public @interface ScriptParameter {
12+
13+
/**
14+
* 名称
15+
*/
16+
String name() default "";
17+
18+
/**
19+
* 描述
20+
*/
21+
String description() default "";
22+
23+
}

springboot-starter-script/src/main/java/com/codingapi/springboot/script/annotation/ScriptType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import java.lang.annotation.*;
44

55
/**
6-
* 脚本对象
6+
* 脚本对象类型
77
*/
88
@Target({ElementType.TYPE})
99
@Retention(RetentionPolicy.RUNTIME)

springboot-starter-script/src/main/java/com/codingapi/springboot/script/cache/GroovyScriptCacheContext.java

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.codingapi.springboot.script.GroovyScript;
44
import com.codingapi.springboot.script.meta.GroovyMetadata;
55
import com.codingapi.springboot.script.repository.GroovyScriptRepositoryContext;
6+
import com.codingapi.springboot.script.temp.TempGroovyScriptContext;
67
import lombok.Getter;
78

89
import java.util.HashMap;
@@ -11,7 +12,7 @@
1112
import java.util.Map;
1213

1314
/**
14-
* 脚本数据上下文管理对象
15+
* 脚本数据缓存上下文管理对象
1516
*/
1617
public class GroovyScriptCacheContext {
1718

@@ -92,8 +93,9 @@ public int count() {
9293
public GroovyScript getGroovyScript(String key) {
9394
GroovyScript groovyScript = this.cache.get(key);
9495
if (groovyScript == null) {
96+
// 临时的数据不存到cache对象下
9597
groovyScript = TempGroovyScriptContext.getInstance().getGroovyScript(key);
96-
if(groovyScript==null) {
98+
if (groovyScript == null) {
9799
groovyScript = GroovyScriptRepositoryContext.getInstance().get(key);
98100
if (groovyScript != null) {
99101
this.cache.put(key, groovyScript);
@@ -131,23 +133,6 @@ public String getScript(String key) {
131133
return "";
132134
}
133135

134-
135-
/**
136-
* 获取脚本编辑信息
137-
*
138-
* @param key 脚本可以
139-
*/
140-
public Map<String, Object> getEditorScript(String key) {
141-
Map<String, Object> map = new HashMap<>();
142-
GroovyScript script = this.getGroovyScript(key);
143-
if (script != null) {
144-
map.put("script", script.getScript());
145-
map.put("metadata", script.toMetadata());
146-
}
147-
return map;
148-
}
149-
150-
151136
/**
152137
* 批量加载脚本
153138
*

springboot-starter-script/src/main/java/com/codingapi/springboot/script/controller/GroovyScriptController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import com.codingapi.springboot.script.GroovyScript;
88
import com.codingapi.springboot.script.GroovyScriptRuntimeContext;
99
import com.codingapi.springboot.script.cache.GroovyScriptCacheContext;
10-
import com.codingapi.springboot.script.cache.TempGroovyScriptContext;
10+
import com.codingapi.springboot.script.temp.TempGroovyScriptContext;
1111
import com.codingapi.springboot.script.meta.GroovyMetadata;
1212
import com.codingapi.springboot.script.pojo.ScriptCompileRequest;
1313
import com.codingapi.springboot.script.pojo.ScriptSaveRequest;

springboot-starter-script/src/main/java/com/codingapi/springboot/script/meta/GroovyMetadata.java

Lines changed: 6 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
package com.codingapi.springboot.script.meta;
22

33
import com.codingapi.springboot.script.GroovyScript;
4-
import com.codingapi.springboot.script.annotation.ScriptType;
5-
import com.codingapi.springboot.script.parser.GroovyTypeParser;
4+
import com.codingapi.springboot.script.strategy.ScriptTypeMappingContext;
65
import lombok.Getter;
76

87
import java.util.ArrayList;
@@ -14,77 +13,49 @@
1413
/**
1514
* 脚本对象元数据结构
1615
*/
16+
@Getter
1717
public class GroovyMetadata {
1818

1919
/**
2020
* 请求参数
2121
*/
22-
@Getter
2322
private final List<GroovyField> requests;
2423

2524
/**
2625
* 绑定参数
2726
*/
28-
@Getter
2927
private final List<GroovyField> binds;
3028

3129
/**
3230
* 程序主函数名称
3331
*/
34-
@Getter
35-
private String mainMethod;
32+
private final String mainMethod;
3633

3734
/**
3835
* 返回类型
3936
*/
40-
@Getter
41-
private String returnType;
37+
private final String returnType;
4238

4339
/**
4440
* 字段类型
4541
*/
46-
@Getter
4742
private final Map<String, GroovyType> types;
4843

4944
/**
5045
* 脚本说明
5146
*/
52-
@Getter
53-
private String description;
54-
55-
56-
private transient final GroovyScript groovyScript;
47+
private final String description;
5748

5849

5950
public GroovyMetadata(GroovyScript groovyScript) {
60-
this.groovyScript = groovyScript;
6151
this.types = new HashMap<>();
6252
this.requests = new ArrayList<>();
6353
this.binds = new ArrayList<>();
6454
this.description = groovyScript.getDescription();
6555
this.mainMethod = groovyScript.getMethod();
66-
this.returnType = groovyScript.getReturnType().getSimpleName();
56+
this.returnType = ScriptTypeMappingContext.getInstance().mapping(groovyScript.getReturnType()).getSimpleName();
6757
}
6858

69-
/**
70-
* 通过class构建 脚本类型数据
71-
*
72-
* @param clazz class类型
73-
*/
74-
public void buildType(Class<?> clazz) {
75-
String dataType = clazz.getSimpleName();
76-
GroovyType groovyType = this.types.get(dataType);
77-
if (groovyType == null) {
78-
GroovyTypeParser groovyTypeParser = new GroovyTypeParser(clazz, this);
79-
groovyType = groovyTypeParser.parser(this.groovyScript);
80-
groovyType.setDataType(dataType);
81-
ScriptType scriptType = clazz.getAnnotation(ScriptType.class);
82-
if (scriptType != null) {
83-
groovyType.setDescription(scriptType.description());
84-
}
85-
this.put(dataType, groovyType);
86-
}
87-
}
8859

8960
/**
9061
* 增加请求参数数据对象

0 commit comments

Comments
 (0)