当前位置: 首页 > wzjs >正文

烟台网站公司WordPress火车头规则

烟台网站公司,WordPress火车头规则,凡科网做什么的,大连旅游网站建设用sftp推送zip包到目标服务器 任务类里面,主要功能是,定时采集三张表的数据,并把数据转换成csv,三份csv压缩成一个加密的zip包,通过sftp推送到指定的目录下 配置类 Data Configuration ConfigurationProperties(pre…

用sftp推送zip包到目标服务器

  • 任务类里面,主要功能是,定时采集三张表的数据,并把数据转换成csv,三份csv压缩成一个加密的zip包,通过sftp推送到指定的目录下

配置类

@Data
@Configuration
@ConfigurationProperties(prefix = "sftp.zip")
public class SftpConfig {private String host;private int port = 22;private String username;private String password;private String remoteDir;private String zipPassword;private String cron;
}

任务类SftpTask

import net.lingala.zip4j.ZipFile;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.model.enums.EncryptionMethod;
import net.schmizz.sshj.SSHClient;
import net.schmizz.sshj.sftp.SFTPClient;
import net.schmizz.sshj.sftp.SFTPException;
import net.schmizz.sshj.transport.verification.HostKeyVerifier;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;import java.io.*;
import java.nio.charset.StandardCharsets;
import java.security.PublicKey;
import java.text.SimpleDateFormat;
import java.util.*;@Service
public class SftpTask {Logger logger = LoggerFactory.getLogger(this.getClass());@Autowiredprivate SftpConfig sftpConfig;private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMdd");// 定义表格头private static final String V4_HEADER = "网段名称,是否是专业公司,专业公司名称,单位名称/具体业务信息,单位所属分类,单位性质,所属省份,所属地市,所属区县,使用方式,业务类型,使用状态,管理状态,机房,设备名称,Loopbak地址,接入端口信息";private static final String RA_HEADER = "地址范围,是否是专业公司,专业公司名称,单位名称/具体业务信息,单位所属分类,单位性质,所属省份,所属地市,所属区县,使用方式,业务类型,使用状态,管理状态,机房,设备名称,Loopbak地址,接入端口信息";@Scheduled(cron = "${sftp.zip.cron}")public void executeScheduledTask() {try {logger.info("开始执行SFTP ZIP上传任务: " + new Date());
// 定义压缩包的名字,例如TEST_20250415.zipString zipFileName = "TEST_" + DATE_FORMAT.format(new Date()) + ".zip";createEncryptedZip(zipFileName);uploadViaSftp(zipFileName);new File(zipFileName).delete();logger.info("SFTP ZIP上传任务完成: " + new Date());} catch (Exception e) {logger.error("SFTP ZIP上传任务失败:"+e.getMessage());}}private void createEncryptedZip(String zipFileName) throws Exception {ZipParameters parameters = new ZipParameters();parameters.setEncryptFiles(true);parameters.setEncryptionMethod(EncryptionMethod.ZIP_STANDARD);String previousDayFormatted = getPreviousDayFormatted();ZipFile zipFile = new ZipFile(zipFileName, sftpConfig.getZipPassword().toCharArray());try {String v4FileName = "V4_Subnet_"+previousDayFormatted+".csv";// 1. IPV4地址规划数据CSVaddCsvToZip(zipFile, parameters, v4FileName,V4_HEADER, v4Mapper.getAllDataByDate(),new CsvRowMapper<SftpDto>() {@Overridepublic String mapRow(SftpDto info) {return String.format(Locale.US, "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s",// 如果字段可能为 null,则替换为空字符串 ""info.getSubnet() != null ? info.getSubnet() : "","", // 直接传空字符串"", // 直接传空字符串info.getUnit_business() != null ? info.getUnit_business() : "","", // 直接传空字符串"", // 直接传空字符串450000, // 固定值info.getIp_use_city() != null ? info.getIp_use_city() : "","", // 直接传空字符串"", // 直接传空字符串"", // 直接传空字符串2, // 固定值5, // 固定值info.getRoom() != null ? info.getRoom() : "",info.getDevice_name() != null ? info.getDevice_name() : "",info.getLookback_address() != null ? info.getLookback_address() : "","" // 直接传空字符串);}});//            // 2. IPV6地址规划数据CSVString v6FileName = "V6_Subnet_"+previousDayFormatted+".csv";addCsvToZip(zipFile, parameters, v6FileName,V4_HEADER, v6Mapper.getAllDataByZero(),new CsvRowMapper<SftpDto>() {@Overridepublic String mapRow(SftpDto info) {return String.format(Locale.US, "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s",// 如果字段可能为 null,则替换为空字符串 ""info.getSubnet() != null ? info.getSubnet() : "","", // 直接传空字符串"", // 直接传空字符串info.getUnit_business() != null ? info.getUnit_business() : "","", // 直接传空字符串"", // 直接传空字符串450000, // 固定值info.getIp_use_city() != null ? info.getIp_use_city() : "",info.getIp_use_county() != null ? info.getIp_use_county() : "","", // 直接传空字符串"", // 直接传空字符串2, // 固定值5, // 固定值info.getRoom() != null ? info.getRoom() : "",info.getDevice_name() != null ? info.getDevice_name() : "",info.getLookback_address() != null ? info.getLookback_address() : "","" // 直接传空字符串);}});
//
//            // 3. IP地址备案数据CSVString raFileName = "IP_address_"+previousDayFormatted+".csv";addCsvToZip(zipFile, parameters, raFileName,RA_HEADER, raMapper.getAllDataByZero(),new CsvRowMapper<SftpDto>() {@Overridepublic String mapRow(SftpDto info) {return String.format(Locale.US, "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s",// 如果字段可能为 null,则替换为空字符串 ""info.getAddress() != null ? info.getAddress() : "",info.getIs_profession() != null ? info.getIs_profession() : "",info.getPro_co_name() != null ? info.getPro_co_name() : "","",info.getUnit_type() != null ? info.getUnit_type() : "",info.getUnit_nature() != null ? info.getUnit_nature() : "",info.getIp_use_province() != null ? info.getIp_use_province() : "",info.getIp_use_city() != null ? info.getIp_use_city() : "",info.getIp_use_county() != null ? info.getIp_use_county() : "",info.getUse_type() != null ? info.getUse_type() : "",info.getIp_service_type() != null ? info.getIp_service_type() : "",3, // 固定值8, // 固定值info.getRoom() != null ? info.getRoom() : "",info.getDevice_name() != null ? info.getDevice_name() : "",info.getLookback_address() != null ? info.getLookback_address() : "",info.getInterface_data() !=null ? info.getInterface_data() : "");}});} finally {zipFile.close();}}private interface CsvRowMapper<T> {String mapRow(T item);}private <T> void addCsvToZip(ZipFile zipFile, ZipParameters parameters,String fileName, String header, List<T> dataList, CsvRowMapper<T> rowMapper) throws IOException {File tempFile = File.createTempFile(fileName.replace(".csv", ""), ".csv");try {// 写入CSV内容PrintWriter writer = null;try {writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(tempFile), StandardCharsets.UTF_8));writer.println(header);for (T data : dataList) {writer.println(rowMapper.mapRow(data));}} finally {if (writer != null) {writer.close();}}parameters.setFileNameInZip(fileName);// 添加到ZIPzipFile.addFile(tempFile, parameters);} finally {FileUtils.deleteQuietly(tempFile);}}private void uploadViaSftp(String zipFileName) throws Exception {try (SSHClient ssh = new SSHClient()) {// 跳过主机密钥验证(仅用于测试)ssh.addHostKeyVerifier(new HostKeyVerifier() {@Overridepublic boolean verify(String hostname, int port, PublicKey key) {return true; // 跳过主机密钥验证(仅用于测试)}@Overridepublic List<String> findExistingAlgorithms(String hostname, int port) {return Collections.emptyList();}});ssh.connect(sftpConfig.getHost(), sftpConfig.getPort());// 认证ssh.authPassword(sftpConfig.getUsername(), sftpConfig.getPassword());// 打开 SFTP 客户端并上传文件try (SFTPClient sftp = ssh.newSFTPClient()) {// 确保远程目录存在(支持多层目录)ensureDirectoryExists(sftp, sftpConfig.getRemoteDir());CustomLocalSourceFile customFile = new CustomLocalSourceFile(new File(zipFileName));// 指定远程路径String remotePath = sftpConfig.getRemoteDir() + new File(zipFileName).getName(); // 目标路径sftp.put(customFile, remotePath); // 上传到指定的远程路径}logger.info("文件上传成功:{}",zipFileName);} catch (Exception e) {logger.error("文件上传失败:{}",e.getMessage());}}public static String getPreviousDayFormatted() {// 定义日期格式SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");// 获取当前时间Date now = new Date();// 格式化日期return dateFormat.format(now);}/*** 确保远程目录存在(支持多层目录)** @param sftp      SFTP 客户端* @param remoteDir 远程目录路径* @throws IOException 如果操作失败*/private void ensureDirectoryExists(SFTPClient sftp, String remoteDir) throws IOException {// 分割路径为多个部分String[] dirs = remoteDir.split("/");StringBuilder currentPath = new StringBuilder("/");for (String dir : dirs) {if (!dir.isEmpty()) {currentPath.append(dir).append("/");try {// 检查当前路径是否存在sftp.stat(currentPath.toString());} catch (SFTPException e) {// 如果路径不存在,则创建目录if (e.getMessage().contains("No such file")) {sftp.mkdir(currentPath.toString());} else {// 如果是其他异常,重新抛出throw e;}}}}}
}

配置文件 application.properties

  • sftp.zip.cron : 执行频率
  • sftp.zip.host : 接收端服务器IP地址
  • sftp.zip.port : 协议端口,默认22
  • sftp.zip.username : 接收端服务器登录用户名
  • sftp.zip.password : 接收端服务器登录密码
  • sftp.zip.remote-dir : 接收端文件接收路径
  • sftp.zip.zip-password : 压缩包密码
sftp.zip.cron=0 03 * * * ?
sftp.zip.host=192.168.195.98
sftp.zip.port=22
sftp.zip.username=root
sftp.zip.password=123456
sftp.zip.remote-dir=/mya/test/
sftp.zip.zip-password=666

pom.xml

 <!-- Zip4j for encrypted ZIP --><dependency><groupId>net.lingala.zip4j</groupId><artifactId>zip4j</artifactId><version>2.11.5</version></dependency><!-- JSch for SFTP --><dependency><groupId>com.hierynomus</groupId><artifactId>sshj</artifactId><version>0.32.0</version></dependency><!-- Configuration Processor --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency>
http://www.dtcms.com/wzjs/539413.html

相关文章:

  • 深圳做app网站公司个性化网站建设报价
  • 上海网站建设免网站建设 会议主持稿
  • 阜阳建设部网站鞍山制作公司网站的公司
  • 在南昌市做网站到哪建网页要钱吗
  • 保定建站价格大连建设工业产品网站
  • 网站建设全视频教程下载百度指数分析平台
  • 昆山网站设计公司江苏省张家港保税区建设厅网站
  • 长沙营销网站建设公司国内网站建设代理
  • 建网站价格网网页版梦幻西游大闹天宫困难
  • 做网站的cnfg网站策划书怎么写
  • 网站备案号查询系统微网站建设完不知道怎么推广咋办
  • 网站推广中应注意哪些事项苏州短视频运营
  • 建设银行网站用什么字体网站建设私单合同
  • 建筑公司网站需求进入wordpress
  • 娄底哪里做网站免费网站建设视频教程
  • 百度h5可以做网站吗文具网站建设规划书
  • 个人网站制作视频免费设计图片素材网站
  • 做网站哪个语言好挖掘企业构思的途径
  • 工业产品设计网站推荐wordpress如何汉化版
  • 做家装网站源码新邵县住房和城乡建设局网站
  • 南京鼓楼做网站公司网站首页html代码
  • 管理手机网站给个人网站做百度百科
  • 薪火相传网站建设沈阳做网站需要多少钱
  • 刚做的网站搜全名查不到济宁市建设银行网站
  • 苏州做手机网站搭建网站手机软件
  • 广州市住房 建设局网站网站索引下降如何解决
  • 可以做ppt的网站有哪些内容大连网站设计菲尔莱斯
  • 兰溪建设局网站长沙做互联网平台
  • 顺德建设网站在线网站建设
  • seo怎样新建网站网站建设seo优化公司