Browse Source

接入xxl-job,飞桨解析模块

wh-mc-dev
parent
commit
3bf148ca72
8 changed files with 129 additions and 10 deletions
  1. 2
      src/main/java/com/qniao/zsh/api/command/paddle/admin/PaddleAdminCommandController.java
  2. 14
      src/main/java/com/qniao/zsh/api/command/xxljob/admin/XxlJobAdminCommandController.java
  3. 7
      src/main/java/com/qniao/zsh/application/service/createspider/CreateSpiderApplicationService.java
  4. 4
      src/main/java/com/qniao/zsh/application/service/paddle/PaddleApplicationService.java
  5. 91
      src/main/java/com/qniao/zsh/application/service/xxljob/XxlJobApplicationService.java
  6. 12
      src/main/java/com/qniao/zsh/infrastructure/util/LinuxCommandUtil.java
  7. 7
      src/main/java/com/qniao/zsh/infrastructure/util/xxl/XxlJobDemo.java
  8. 2
      src/main/resources/application-local.yml

2
src/main/java/com/qniao/zsh/api/command/paddle/admin/PaddleAdminCommandController.java

@ -25,7 +25,7 @@ public class PaddleAdminCommandController {
@ApiOperation("飞桨文本解析")
@PostMapping("/analysis")
public PaddleVo analysis(@RequestBody PaddleDto paddleDto) throws IOException {
public PaddleVo analysis(@RequestBody PaddleDto paddleDto) throws IOException, InterruptedException {
return paddleApplicationService.runPaddle(paddleDto);
}

14
src/main/java/com/qniao/zsh/api/command/xxljob/admin/XxlJobAdminCommandController.java

@ -0,0 +1,14 @@
package com.qniao.zsh.api.command.xxljob.admin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author wh
* @date 2023/4/23
*/
@RestController
@RequestMapping("admin/xxl-job")
public class XxlJobAdminCommandController {
}

7
src/main/java/com/qniao/zsh/application/service/createspider/CreateSpiderApplicationService.java

@ -1,5 +1,6 @@
package com.qniao.zsh.application.service.createspider;
import com.qniao.zsh.application.service.xxljob.XxlJobApplicationService;
import com.qniao.zsh.domain.aggregate.spiderstate.entity.SpiderState;
import com.qniao.zsh.domain.aggregate.spiderstate.repository.SpiderStateRepository;
import lombok.extern.slf4j.Slf4j;
@ -16,11 +17,15 @@ public class CreateSpiderApplicationService {
@Resource
private SpiderStateRepository spiderStateRepository;
@Resource
private XxlJobApplicationService xxlJobApplicationService;
public Long create(String spiderName){
SpiderState spiderState = new SpiderState();
spiderState.setSpiderName(spiderName);
return spiderStateRepository.save(spiderState);
Long id = spiderStateRepository.save(spiderState);
xxlJobApplicationService.add(spiderName);
return id;
}

4
src/main/java/com/qniao/zsh/application/service/paddle/PaddleApplicationService.java

@ -19,7 +19,7 @@ import java.util.List;
@Service
public class PaddleApplicationService {
public PaddleVo runPaddle(PaddleDto paddleDto) throws IOException {
public PaddleVo runPaddle(PaddleDto paddleDto) throws IOException, InterruptedException {
//linux
// String result = ScriptRunnerHelper.handle("python3",
//win
@ -29,7 +29,7 @@ public class PaddleApplicationService {
paddleDto.getArticleId(),
paddleDto.getPaperMillId(),
paddleDto.getContent()));
String[] strings = result.split("\r\n");
String[] strings = result.split("\n");
result = strings[strings.length - 1];
JSONObject jsonResult = JSONUtil.parseObj(result);
PaddleVo paddleVo = new PaddleVo();

91
src/main/java/com/qniao/zsh/application/service/xxljob/XxlJobApplicationService.java

@ -0,0 +1,91 @@
package com.qniao.zsh.application.service.xxljob;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpStatus;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.qniao.zsh.infrastructure.config.LoginRequestConfig;
import com.xxl.job.core.biz.AdminBiz;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
/**
* @author wh
* @date 2023/4/23
*/
@Service
public class XxlJobApplicationService {
public int login() {
Map<String, Object> paramMap = new HashMap<>(2);
paramMap.put("userName", "admin");
paramMap.put("password", "123456");
paramMap.put("ifRemember", "on");
HttpResponse response = HttpRequest.post("http://localhost:8080/xxl-job-admin/login/")
.form(paramMap)
.timeout(20000)
.execute();
String body = response.body();
JSONObject jsonInfo = JSONUtil.parseObj(body);
return Integer.parseInt(jsonInfo.getStr("code"));
}
public int add(String jobDesc) {
login();
String cron = "* 0/15 * * * ?";
Map<String, Object> paramMap = new HashMap<>(2);
paramMap.put("jobGroup", 2);
paramMap.put("jobDesc", jobDesc);
paramMap.put("author", "wh");
paramMap.put("scheduleType", "CRON");
paramMap.put("scheduleConf", cron);
paramMap.put("misfireStrategy", "DO_NOTHING");
paramMap.put("executorRouteStrategy", "FIRST");
paramMap.put("executorHandler", "spiderTest");
paramMap.put("executorBlockStrategy", "SERIAL_EXECUTION");
paramMap.put("glueType", "BEAN");
HttpResponse response = HttpRequest.post("http://localhost:8080/xxl-job-admin/jobinfo/add")
.form(paramMap)
.timeout(20000)
.execute();
String body = response.body();
JSONObject jsonInfo = JSONUtil.parseObj(body);
return Integer.parseInt(jsonInfo.getStr("code"));
}
public int update(String jobDesc) {
login();
String cron = "* 0/20 * * * ?";
Map<String, Object> paramMap = new HashMap<>(2);
paramMap.put("jobGroup", 2);
paramMap.put("jobDesc", jobDesc);
paramMap.put("author", "wh");
paramMap.put("scheduleType", "CRON");
paramMap.put("scheduleConf", cron);
paramMap.put("misfireStrategy", "DO_NOTHING");
paramMap.put("executorRouteStrategy", "FIRST");
paramMap.put("executorHandler", "spiderTest");
paramMap.put("executorBlockStrategy", "SERIAL_EXECUTION");
paramMap.put("glueType", "BEAN");
HttpResponse response = HttpRequest.post("http://localhost:8080/xxl-job-admin/jobinfo/add")
.form(paramMap)
.timeout(20000)
.execute();
String body = response.body();
JSONObject jsonInfo = JSONUtil.parseObj(body);
return Integer.parseInt(jsonInfo.getStr("code"));
}
}

12
src/main/java/com/qniao/zsh/infrastructure/util/LinuxCommandUtil.java

@ -4,7 +4,10 @@ import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.text.StrBuilder;
import cn.hutool.core.util.StrUtil;
import com.qniao.zsh.infrastructure.config.SpiderDirectoryConfig;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Scope;
import java.io.BufferedReader;
import java.io.File;
@ -18,17 +21,23 @@ import java.nio.charset.StandardCharsets;
*/
@Slf4j
@Scope("prototype")
public class LinuxCommandUtil {
/**
* 运行scrapy的工具类
*
* @param spiderName 爬虫名
* @return 控制台输出
* @throws IOException 线程
*/
@XxlJob("runScrapy")
public static String startScrapy(String spiderName) throws IOException {
if (spiderName == null) {
spiderName = XxlJobHelper.getJobParam();
}
// 要执行的shell命令
String scrapy = " scrapy crawl {} -s LOG_FILE=spider-debug.log ";
String command = StrUtil.format(scrapy,spiderName);
String command = StrUtil.format(scrapy, spiderName);
// 创建ProcessBuilder对象
ProcessBuilder builder = new ProcessBuilder("/bin/sh", "-c", command);
//配置工作目录
@ -53,6 +62,5 @@ public class LinuxCommandUtil {
return retStrBuilder.toString();
}
}

7
src/main/java/com/qniao/zsh/infrastructure/util/xxl/XxlJobDemo.java

@ -1,6 +1,7 @@
package com.qniao.zsh.infrastructure.util.xxl;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;
@ -8,9 +9,9 @@ import org.springframework.stereotype.Component;
public class XxlJobDemo {
@XxlJob("myJobHandler")
public ReturnT<String> myJobHandler(String param) throws Exception {
// your jobHandler code here
return ReturnT.SUCCESS;
public void test() {
String jobParamStr = XxlJobHelper.getJobParam();
System.out.println("成功调取:" + jobParamStr);
}
}

2
src/main/resources/application-local.yml

@ -30,7 +30,7 @@ xxl-job-executor-ip: 127.0.0.1
### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
# 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
#xxl.job.admin.addresses: http://127.0.0.1:8808/xxl-job-admin
xxl.job.admin.addresses: http://xxl-job-admin-dev.qniao.cn/xxl-job-admin
xxl.job.admin.addresses: http://192.168.10.198/xxl-job-admin
# 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
xxl.job.executor.appname: ztb-factory-dev
# 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;

Loading…
Cancel
Save