优化以下代码private void ensureTask(MonitorTaskDTO taskDTO) { if (StringUtils.isEmpty(taskDTO.getGroupCode())) { throw new TaskRuleExecuteException(ErrorCodeConstant._3004001.getCode(), ErrorCodeConstant._3004001.getMessage()); } if (StringUtils.isEmpty(taskDTO.getAppCode())) { throw new TaskRuleExecuteException(ErrorCodeConstant._3004005.getCode(), ErrorCodeConstant._3004005.getMessage()); } if (StringUtils.isEmpty(taskDTO.getCrmId())) { throw new TaskRuleExecuteException(ErrorCodeConstant._3004003.getCode(), ErrorCodeConstant._3004003.getMessage()); } }
时间: 2023-02-06 08:16:46 浏览: 142
这段代码是在确保传入的任务信息是有效的。
如果任务信息的 groupCode 为空,则会抛出一个 TaskRuleExecuteException 异常,其中的错误码为 ErrorCodeConstant._3004001.getCode(),错误信息为 ErrorCodeConstant._3004001.getMessage()。
如果任务信息的 appCode 为空,则会抛出一个 TaskRuleExecuteException 异常,其中的错误码为 ErrorCodeConstant._3004005.getCode(),错误信息为 ErrorCodeConstant._3004005.getMessage()。
如果任务信息的 crmId 为空,则会抛出一个 TaskRuleExecuteException 异常,其中的错误码为 ErrorCodeConstant._3004003.getCode(),错误信息为 ErrorCodeConstant._3004003.getMessage()。
相关问题
Java低代码爬虫的爬虫总体设计,框架具体配置以及代码详解都要写,至少三千字,谢谢
Java低代码爬虫是一种基于可视化操作的爬虫开发方式,能够帮助开发者快速构建自己的爬虫程序。本文将介绍Java低代码爬虫的总体设计、框架具体配置以及代码详解,帮助读者了解该爬虫的工作原理和使用方法。
一、Java低代码爬虫总体设计
Java低代码爬虫主要由以下三部分组成:
1.可视化界面:用户通过该界面进行爬虫程序的设计和配置,包括爬取的网站地址、数据解析规则、数据存储方式等。
2.爬虫引擎:该引擎负责执行爬虫程序,根据用户配置的规则抓取网页内容,并将解析后的数据存储到指定的数据库中。
3.数据存储:Java低代码爬虫支持多种数据存储方式,包括MySQL、MongoDB、Redis等。
二、框架具体配置
1.环境依赖
Java低代码爬虫需要依赖以下环境:
(1)JDK 1.8或以上版本
(2)Maven
(3)MySQL、MongoDB、Redis等数据库
2.项目结构
Java低代码爬虫的项目结构如下:
```
├── src
│ ├── main
│ │ ├── java
│ │ │ ├── com
│ │ │ │ ├── example
│ │ │ │ │ ├── config
│ │ │ │ │ │ ├── DataSourceConfig.java
│ │ │ │ │ ├── controller
│ │ │ │ │ │ ├── CrawlerController.java
│ │ │ │ │ ├── entity
│ │ │ │ │ │ ├── CrawlerTask.java
│ │ │ │ │ │ ├── Page.java
│ │ │ │ │ ├── parser
│ │ │ │ │ │ ├── Parser.java
│ │ │ │ │ ├── service
│ │ │ │ │ │ ├── CrawlerService.java
│ │ │ │ │ │ ├── impl
│ │ │ │ │ │ │ ├── CrawlerServiceImpl.java
│ │ │ │ │ ├── utils
│ │ │ │ │ │ ├── HttpClientUtils.java
│ │ ├── resources
│ │ │ ├── application.properties
│ ├── test
```
3.配置文件
在src/main/resources目录下,有一个application.properties文件,该文件中需要进行以下配置:
(1)数据库连接信息:
```
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
```
(2)Redis连接信息:
```
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.database=0
spring.redis.timeout=3000ms
spring.redis.password=
```
(3)MongoDB连接信息:
```
spring.data.mongodb.uri=mongodb://localhost:27017/test
```
4.代码详解
Java低代码爬虫的代码实现主要包括以下几个部分:
(1)爬虫任务实体类
```
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CrawlerTask {
private String name;
private String url;
private String parserClassName;
private String storageType;
}
```
(2)页面实体类
```
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Page {
private String url;
private String content;
}
```
(3)数据解析接口
```
public interface Parser {
List<Map<String, Object>> parse(Page page);
}
```
(4)数据存储服务接口
```
public interface CrawlerService {
void save(List<Map<String, Object>> data, String storageType);
}
```
(5)数据存储服务实现类
```
@Service
public class CrawlerServiceImpl implements CrawlerService {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Autowired
private MongoTemplate mongoTemplate;
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public void save(List<Map<String, Object>> data, String storageType) {
if (StringUtils.isEmpty(storageType)) {
storageType = "redis";
}
switch (storageType) {
case "redis":
saveToRedis(data);
break;
case "mongodb":
saveToMongoDB(data);
break;
case "mysql":
saveToMySQL(data);
break;
default:
throw new RuntimeException("unsupported storage type: " + storageType);
}
}
private void saveToRedis(List<Map<String, Object>> data) {
for (Map<String, Object> item : data) {
redisTemplate.opsForHash().putAll(item.get("key").toString(), item);
}
}
private void saveToMongoDB(List<Map<String, Object>> data) {
mongoTemplate.insert(data, "collection_name");
}
private void saveToMySQL(List<Map<String, Object>> data) {
List<Object[]> params = new ArrayList<>();
for (Map<String, Object> item : data) {
params.add(new Object[]{
item.get("field1"),
item.get("field2"),
item.get("field3")
});
}
jdbcTemplate.batchUpdate("INSERT INTO table_name (field1, field2, field3) VALUES (?, ?, ?)", params);
}
}
```
(6)爬虫控制器
```
@RestController
@RequestMapping("/crawler")
public class CrawlerController {
@Autowired
private CrawlerService crawlerService;
@PostMapping("/start")
public void start(@RequestBody CrawlerTask task) throws Exception {
Page page = HttpClientUtils.getPage(task.getUrl());
Parser parser = (Parser) Class.forName(task.getParserClassName()).newInstance();
List<Map<String, Object>> data = parser.parse(page);
crawlerService.save(data, task.getStorageType());
}
}
```
在爬虫控制器中,我们先使用HttpClientUtils获取指定URL的页面内容,然后根据用户配置的解析规则使用反射创建解析器对象,并使用该解析器对页面内容进行解析,最后将解析后的数据存储到指定的数据库中。
三、总结
本文介绍了Java低代码爬虫的总体设计、框架具体配置以及代码详解,该爬虫的可视化界面和自动化配置能够帮助开发者快速构建自己的爬虫程序,大大提高了爬虫开发的效率。
springboot登陆拦截器Java代码
下面是一个简单的 Spring Boot 登录拦截器的示例代码:
```java
@Component
public class LoginInterceptor implements HandlerInterceptor {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 判断用户是否已经登录
String token = request.getHeader("token");
if (StringUtils.isEmpty(token)) {
throw new RuntimeException("用户未登录,请先登录!");
}
Object user = redisTemplate.opsForValue().get(token);
if (user == null) {
throw new RuntimeException("用户未登录,请先登录!");
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
```
在上面的代码中,我们使用了 Redis 存储用户的登录信息。在实际的项目中,你可能会使用其他的存储方案,例如 JWT、Session 等,但是拦截器的实现思路都是类似的。通过拦截器,我们可以在用户访问受保护的资源之前,先判断用户是否已经登录,如果没有登录,则抛出异常并返回给前端。
阅读全文