---初始化项目
This commit is contained in:
24
powerjob-server/powerjob-server-extension/pom.xml
Normal file
24
powerjob-server/powerjob-server-extension/pom.xml
Normal file
@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>powerjob-server</artifactId>
|
||||
<groupId>tech.powerjob</groupId>
|
||||
<version>5.1.2</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>powerjob-server-extension</artifactId>
|
||||
<version>${project.parent.version}</version>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>8</maven.compiler.source>
|
||||
<maven.compiler.target>8</maven.compiler.target>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
@ -0,0 +1,24 @@
|
||||
package tech.powerjob.server.extension;
|
||||
|
||||
/**
|
||||
* 锁服务,所有方法都不允许抛出任何异常!
|
||||
*
|
||||
* @author tjq
|
||||
* @since 2020/4/2
|
||||
*/
|
||||
public interface LockService {
|
||||
|
||||
/**
|
||||
* 上锁(获取锁),立即返回,不会阻塞等待锁
|
||||
* @param name 锁名称
|
||||
* @param maxLockTime 最长持有锁的时间,单位毫秒(ms)
|
||||
* @return true -> 获取到锁,false -> 未获取到锁
|
||||
*/
|
||||
boolean tryLock(String name, long maxLockTime);
|
||||
|
||||
/**
|
||||
* 释放锁
|
||||
* @param name 锁名称
|
||||
*/
|
||||
void unlock(String name);
|
||||
}
|
||||
@ -0,0 +1,37 @@
|
||||
package tech.powerjob.server.extension.alarm;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import tech.powerjob.common.OmsConstant;
|
||||
import tech.powerjob.common.PowerSerializable;
|
||||
import tech.powerjob.common.utils.CommonUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
/**
|
||||
* 报警内容
|
||||
*
|
||||
* @author tjq
|
||||
* @since 2020/8/1
|
||||
*/
|
||||
public interface Alarm extends PowerSerializable {
|
||||
|
||||
String fetchTitle();
|
||||
|
||||
default String fetchContent() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
JSONObject content = JSONObject.parseObject(JSONObject.toJSONString(this));
|
||||
content.forEach((key, originWord) -> {
|
||||
sb.append(key).append(": ");
|
||||
String word = String.valueOf(originWord);
|
||||
if (StringUtils.endsWithIgnoreCase(key, "time") || StringUtils.endsWithIgnoreCase(key, "date")) {
|
||||
try {
|
||||
if (originWord instanceof Long) {
|
||||
word = CommonUtils.formatTime((Long) originWord);
|
||||
}
|
||||
}catch (Exception ignore) {
|
||||
}
|
||||
}
|
||||
sb.append(word).append(OmsConstant.LINE_SEPARATOR);
|
||||
});
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,39 @@
|
||||
package tech.powerjob.server.extension.alarm;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 报警目标
|
||||
*
|
||||
* @author tjq
|
||||
* @since 2023/7/16
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class AlarmTarget implements Serializable {
|
||||
|
||||
private String name;
|
||||
/**
|
||||
* 手机号
|
||||
*/
|
||||
private String phone;
|
||||
/**
|
||||
* 邮箱地址
|
||||
*/
|
||||
private String email;
|
||||
/**
|
||||
* webHook
|
||||
*/
|
||||
private String webHook;
|
||||
/**
|
||||
* 扩展字段
|
||||
*/
|
||||
private String extra;
|
||||
|
||||
private Map<String, Objects> attributes;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
package tech.powerjob.server.extension.alarm;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 报警接口
|
||||
*
|
||||
* @author tjq
|
||||
* @since 2020/4/19
|
||||
*/
|
||||
public interface Alarmable {
|
||||
|
||||
void onFailed(Alarm alarm, List<AlarmTarget> alarmTargets);
|
||||
}
|
||||
@ -0,0 +1,44 @@
|
||||
package tech.powerjob.server.extension.dfs;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* 分布式文件服务
|
||||
*
|
||||
* @author tjq
|
||||
* @since 2023/7/16
|
||||
*/
|
||||
public interface DFsService {
|
||||
|
||||
/**
|
||||
* 存储文件
|
||||
* @param storeRequest 存储请求
|
||||
* @throws IOException 异常
|
||||
*/
|
||||
void store(StoreRequest storeRequest) throws Exception;
|
||||
|
||||
/**
|
||||
* 下载文件
|
||||
* @param downloadRequest 文件下载请求
|
||||
* @throws IOException 异常
|
||||
*/
|
||||
void download(DownloadRequest downloadRequest) throws Exception;
|
||||
|
||||
/**
|
||||
* 获取文件元信息
|
||||
* @param fileLocation 文件位置
|
||||
* @return 存在则返回文件元信息
|
||||
* @throws IOException 异常
|
||||
*/
|
||||
Optional<FileMeta> fetchFileMeta(FileLocation fileLocation) throws Exception;
|
||||
|
||||
/**
|
||||
* 清理 powerjob 认为“过期”的文件
|
||||
* 部分存储系统自带生命周期管理(如阿里云OSS,则不需要单独实现该方法)
|
||||
* @param bucket bucket
|
||||
* @param days 天数,需要清理超过 X 天的文件
|
||||
*/
|
||||
default void cleanExpiredFiles(String bucket, int days) {
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,22 @@
|
||||
package tech.powerjob.server.extension.dfs;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* download request
|
||||
*
|
||||
* @author tjq
|
||||
* @since 2023/7/16
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class DownloadRequest implements Serializable {
|
||||
|
||||
private transient File target;
|
||||
|
||||
private FileLocation fileLocation;
|
||||
}
|
||||
@ -0,0 +1,32 @@
|
||||
package tech.powerjob.server.extension.dfs;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* 文件路径
|
||||
*
|
||||
* @author tjq
|
||||
* @since 2023/7/16
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@Accessors(chain = true)
|
||||
public class FileLocation {
|
||||
|
||||
/**
|
||||
* 存储桶
|
||||
*/
|
||||
private String bucket;
|
||||
|
||||
/**
|
||||
* 名称
|
||||
*/
|
||||
private String name;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format("%s.%s", bucket, name);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,32 @@
|
||||
package tech.powerjob.server.extension.dfs;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* FileMeta
|
||||
*
|
||||
* @author tjq
|
||||
* @since 2023/7/16
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class FileMeta {
|
||||
|
||||
/**
|
||||
* 文件大小
|
||||
*/
|
||||
private long length;
|
||||
/**
|
||||
* 最后修改时间
|
||||
*/
|
||||
private Date lastModifiedTime;
|
||||
|
||||
/**
|
||||
* 元数据
|
||||
*/
|
||||
private Map<String, Object> metaInfo;
|
||||
}
|
||||
@ -0,0 +1,22 @@
|
||||
package tech.powerjob.server.extension.dfs;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* StoreRequest
|
||||
*
|
||||
* @author tjq
|
||||
* @since 2023/7/16
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class StoreRequest implements Serializable {
|
||||
|
||||
private transient File localFile;
|
||||
|
||||
private FileLocation fileLocation;
|
||||
}
|
||||
Reference in New Issue
Block a user