---初始化项目

This commit is contained in:
2025-09-19 16:14:08 +08:00
parent 902d3d7e3b
commit afee7c03ac
767 changed files with 75809 additions and 82 deletions

View 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>

View File

@ -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);
}

View File

@ -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();
}
}

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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) {
}
}

View File

@ -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;
}

View File

@ -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);
}
}

View File

@ -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;
}

View File

@ -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;
}