Skip to content

Commit

Permalink
2.0
Browse files Browse the repository at this point in the history
  • Loading branch information
wangchirl committed May 2, 2023
1 parent dbda99d commit 387e29b
Show file tree
Hide file tree
Showing 41 changed files with 890 additions and 591 deletions.
41 changes: 29 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@
5. 进入测试项目target目录下,执行脚本

```sh
java -javaagent:本地路径(替换为自己的)\javaagent\target\SuperAgent-jar-with-dependencies.jar=ctlClass=com.shadow.controller.AgentBaseController,tlClass=com.shadow.supports.framework.ScheduleService,tlFieldName=JOB_PARAMETERS_THREAD_LOCAL,debug=true,logger=true,crudFieldName=xxxx,crud=true,proxyType=asm,jobType=spring -jar shadow.jar
java -javaagent:本地路径(替换为自己的)\javaagent\target\SuperAgent-jar-with-dependencies.jar=ctlClass=com.shadow.controller.AgentBaseController,jobType=spring -jar shadow.jar
```

6. 测试定时任务立即执行及CRUD
Expand Down Expand Up @@ -126,7 +126,7 @@

```sh
# 启动项目
java -javaagent:本地路径(替换为自己的)\javaagent\target\SuperAgent-jar-with-dependencies.jar=ctlClass=com.shadow.controller.AgentBaseController,tlClass=com.shadow.supports.framework.ScheduleService,tlFieldName=JOB_PARAMETERS_THREAD_LOCAL,debug=true,logger=true,crudFieldName=xxxx,crud=true,proxyType=asm,jobType=xxl -jar shadow.jar
java -javaagent:本地路径(替换为自己的)\javaagent\target\SuperAgent-jar-with-dependencies.jar=ctlClass=com.shadow.controller.AgentBaseController,jobType=xxl -jar shadow.jar
```

```sh
Expand All @@ -142,26 +142,26 @@

```sh
# 启动项目
java -javaagent:本地路径(替换为自己的)\javaagent\target\SuperAgent-jar-with-dependencies.jar=ctlClass=com.shadow.controller.AgentBaseController,tlClass=com.shadow.supports.framework.ScheduleService,tlFieldName=JOB_PARAMETERS_THREAD_LOCAL,debug=true,logger=true,crudFieldName=xxxx,crud=true,proxyType=asm,jobType=quartz -jar shadow.jar
java -javaagent:本地路径(替换为自己的)\javaagent\target\SuperAgent-jar-with-dependencies.jar=ctlClass=com.shadow.controller.AgentBaseController,jobType=quartz -jar shadow.jar
```

```sh
# 执行定时任务 [quartzTriggerKey] 为 Trigger Bean,[quartzJob]为 job detail ID
curl -H "Content-Type:application/json" -X POST --data "{\"name\":\"shadow\",\"age\":20}" localhost:50084/shadow/api/system/agent/run/quartzTriggerKey?params=quartzJob
curl -H "Content-Type:application/json" -X POST --data "{\"name\":\"shadow\",\"age\":20}" localhost:50084/shadow/api/system/agent/run/quartzTriggerKey?params=测试
# 修改 cron 表达式为 0/3 * * * * ?
curl localhost:50084/shadow/api/system/agent/crud/1/quartzTriggerKey@quartzJob?cron=0/3%20*%20*%20*%20*%20?
```

> Quartz 定时任务存在特殊性:
>
> - 除了指定 taskKey 的 trigger 外,还需要额外指定 job detail 的 ID,此处使用了 params 请求参数来传递 job detail 的值
> - 除了指定 taskKey 的 trigger 外,还需要额外指定 job detail 的 ID,quartzTriggerKey@quartzJob
> - 其参数传递不能使用 ThreadLocal 方式,需要使用其 JobDataMap 的方式

- spring job 测试

```sh
# 启动项目
java -javaagent:本地路径(替换为自己的)\javaagent\target\SuperAgent-jar-with-dependencies.jar=ctlClass=com.shadow.controller.AgentBaseController,tlClass=com.shadow.supports.framework.ScheduleService,tlFieldName=JOB_PARAMETERS_THREAD_LOCAL,debug=true,logger=true,crudFieldName=xxxx,crud=true,proxyType=asm,jobType=spring -jar shadow.jar
java -javaagent:本地路径(替换为自己的)\javaagent\target\SuperAgent-jar-with-dependencies.jar=ctlClass=com.shadow.controller.AgentBaseController,jobType=spring -jar shadow.jar
```

```sh
Expand All @@ -178,12 +178,12 @@

```sh
# 启动项目
java -javaagent:本地路径(替换为自己的)\javaagent\target\SuperAgent-jar-with-dependencies.jar=ctlClass=com.shadow.controller.AgentBaseController,tlClass=com.shadow.supports.framework.ScheduleService,tlFieldName=JOB_PARAMETERS_THREAD_LOCAL,debug=true,logger=true,crudFieldName=xxxx,crud=true,proxyType=asm,jobType=simple -jar shadow.jar
java -javaagent:本地路径(替换为自己的)\javaagent\target\SuperAgent-jar-with-dependencies.jar=ctlClass=com.shadow.controller.AgentBaseController,jobType=simple -jar shadow.jar
```

```sh
# 执行定时任务 [simple1] 为 spring 容器 Bean 名称
curl localhost:50084/shadow/api/system//agent/run/simple1?testSimple
curl localhost:50084/shadow/api/system//agent/run/simple1?params=testSimple
# 修改 cron 表达式为 0/3 * * * * ?
curl localhost:50084/shadow/api/system/agent/crud/1/simple2?cron=0/3%20*%20*%20*%20*%20?
```
Expand Down Expand Up @@ -212,10 +212,27 @@



#### 8、Attach 机制 - 可动态替换定时任务类型 TODO
#### 8、Attach 机制 - 可动态替换定时任务类型

> 测试类:com.shadow.agent.AttachAgentTest
>
> ```sh
> originJobType=xxl&jobType=simple&ctlClass=com.shadow.controller.AgentBaseController&methodName=testMethod&iocFieldName=ioc&tlClass=com.shadow.supports.framework.ScheduleService&tlFieldName=JOB_PARAMETERS_THREAD_LOCAL&debug=true
> ```
> - IDEA 测试
>
> - 加入启动参数
>
> ```sh
> # IDEA vm options
> -javaagent:本地路径(替换为自己的)\javaagent\target\SuperAgent-jar-with-dependencies.jar=jobType=xxl,ctlClass=com.shadow.controller.AgentBaseController,jobType=spring,logger=true
> ```
>
> - 执行 com.shadow.agent.AttachAgentTest
>
> > 注意:originJobType 的值是原始定时任务类型,支持重复操作
>
> - jar 测试
>
> - 启动参数
>
> ```sh
> java -javaagent:本地路径(替换为自己的)\javaagent\target\SuperAgent-jar-with-dependencies.jar=jobType=xxl,ctlClass=com.shadow.controller.AgentBaseController,jobType=spring,logger=true -jar shadow.jar
> ```
133 changes: 124 additions & 9 deletions javaagent+schedule项目POSTMAN测试.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"raw": "{\n\t\"name\":\"王钦\",\n\t\"age\":20\n}"
},
"url": {
"raw": "localhost:50084/shadow/api/system/agent/run/xxl2?params=王钦",
"raw": "localhost:50084/shadow/api/system/agent/run/xxl1?params=测试",
"host": [
"localhost"
],
Expand All @@ -33,12 +33,12 @@
"system",
"agent",
"run",
"xxl2"
"xxl1"
],
"query": [
{
"key": "params",
"value": "王钦"
"value": "测试"
}
]
}
Expand All @@ -62,7 +62,7 @@
"raw": "{\n\t\"name\":\"王钦\",\n\t\"age\":20\n}"
},
"url": {
"raw": "localhost:50084/shadow/api/system/agent/run/quartzTriggerKey?params=quartzJob",
"raw": "localhost:50084/shadow/api/system/agent/run/quartzTriggerKey?params=测试",
"host": [
"localhost"
],
Expand All @@ -78,7 +78,7 @@
"query": [
{
"key": "params",
"value": "quartzJob"
"value": "测试"
}
]
}
Expand All @@ -102,7 +102,7 @@
"raw": "{\n\t\"name\":\"王钦\",\n\t\"age\":20\n}"
},
"url": {
"raw": "localhost:50084/shadow/api/system/agent/run/spring2?params=王钦1",
"raw": "localhost:50084/shadow/api/system/agent/run/spring2?params=测试",
"host": [
"localhost"
],
Expand All @@ -118,7 +118,7 @@
"query": [
{
"key": "params",
"value": "王钦1"
"value": "测试"
}
]
}
Expand All @@ -142,7 +142,7 @@
"raw": "{\n\t\"name\":\"王钦\",\n\t\"age\":20\n}"
},
"url": {
"raw": "localhost:50084/shadow/api/system/agent/run/simple1?params=王钦1",
"raw": "localhost:50084/shadow/api/system/agent/run/simple1?params=测试",
"host": [
"localhost"
],
Expand All @@ -158,7 +158,122 @@
"query": [
{
"key": "params",
"value": "王钦1"
"value": "测试"
}
]
}
},
"response": []
},
{
"name": "Xxl 定时任务 - 查",
"request": {
"method": "GET",
"header": [],
"body": {
"mode": "raw",
"raw": ""
},
"url": "localhost:50084/shadow/api/system/agent/crud/1/1"
},
"response": []
},
{
"name": "Quartz 定时任务 - 增删改查",
"request": {
"method": "GET",
"header": [],
"body": {
"mode": "raw",
"raw": ""
},
"url": {
"raw": "localhost:50084/shadow/api/system/agent/crud/1/quartzTriggerKey@quartzJob?cron=0/2 * * * * ?",
"host": [
"localhost"
],
"port": "50084",
"path": [
"shadow",
"api",
"system",
"agent",
"crud",
"1",
"quartzTriggerKey@quartzJob"
],
"query": [
{
"key": "cron",
"value": "0/2 * * * * ?"
}
]
}
},
"response": []
},
{
"name": "Spring 定时任务 - 增删改查",
"request": {
"method": "GET",
"header": [],
"body": {
"mode": "raw",
"raw": ""
},
"url": {
"raw": "localhost:50084/shadow/api/system/agent/crud/1/spring1?cron=0/2 * * * * ?",
"host": [
"localhost"
],
"port": "50084",
"path": [
"shadow",
"api",
"system",
"agent",
"crud",
"1",
"spring1"
],
"query": [
{
"key": "cron",
"value": "0/2 * * * * ?"
}
]
}
},
"response": []
},
{
"name": "Simple 定时任务 - 增删改查",
"request": {
"method": "GET",
"header": [],
"body": {
"mode": "raw",
"raw": ""
},
"url": {
"raw": "localhost:50084/shadow/api/system/agent/crud/1/simple2?cron=0/2 * * * * ?",
"host": [
"localhost"
],
"port": "50084",
"path": [
"shadow",
"api",
"system",
"agent",
"crud",
"1",
"simple2"
],
"query": [
{
"key": "cron",
"value": "0/2 * * * * ?"
}
]
}
Expand Down
27 changes: 14 additions & 13 deletions src/main/java/com/shadow/agent/BaseAgent.java
Original file line number Diff line number Diff line change
@@ -1,25 +1,26 @@
package com.shadow.agent;

import com.shadow.common.RequestArgsVO;
import com.shadow.utils.CommonConstants;

import java.util.Map;

class BaseAgent {

static void handleCommonDefaultArgs(Map<String, String> resolveArgs) {
// 1、DEBUG
resolveArgs.putIfAbsent(CommonConstants.DEBUG, "false");
// 2、CRUD 相关
resolveArgs.putIfAbsent(CommonConstants.TASK_CRUD, "true");
resolveArgs.computeIfAbsent(CommonConstants.SIMPLE_JOB_IOC_FIELD_NAME, k -> CommonConstants.DEFAULT_SIMPLE_JOB_IOC_FIELD_NAME);
// 3、HTTP_REQUEST_URI
if (resolveArgs.get(CommonConstants.HTTP_REQUEST_PREFIX_URI) != null) {
resolveArgs.put(CommonConstants.HTTP_REQUEST_PREFIX_URI, resolveArgs.get(CommonConstants.HTTP_REQUEST_PREFIX_URI) + CommonConstants.PATH_SUFFIX);
static void handleCommonDefaultArgs(RequestArgsVO argsBean) {
// 1、SIMPLE JOB IOC
if (argsBean.getCrudFieldName() == null) {
argsBean.setCrudFieldName(CommonConstants.DEFAULT_SIMPLE_JOB_IOC_FIELD_NAME);
}
// 2、HTTP_REQUEST_URI
if (argsBean.getHttpUri() != null) {
argsBean.setHttpUri(argsBean.getHttpUri() + CommonConstants.PATH_SUFFIX);
} else {
resolveArgs.put(CommonConstants.HTTP_REQUEST_PREFIX_URI, CommonConstants.DEFAULT_HTTP_PATH_PREFIX + CommonConstants.PATH_SUFFIX);
argsBean.setHttpUri(CommonConstants.DEFAULT_HTTP_PATH_PREFIX + CommonConstants.PATH_SUFFIX);
}
// 3、IOC_FIELD_NAME
if (argsBean.getIocFieldName() == null) {
argsBean.setIocFieldName(CommonConstants.DEFAULT_IOC_FIELD_VALUE);
}
// 4、IOC_FIELD_NAME
resolveArgs.computeIfAbsent(CommonConstants.IOC_FIELD_NAME, k -> CommonConstants.DEFAULT_IOC_FIELD_VALUE);
}

}
Loading

0 comments on commit 387e29b

Please sign in to comment.