springboot文件监听
pom.xml引包
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
FileListener
package com.lanxum.domas.config;
import com.lanxum.domas.service.ListenerService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import java.io.File;
/**
* Created by JiangJunpeng on 2020/4/26.<br>
*/
@Slf4j
public class FileListener extends FileAlterationListenerAdaptor {
// 声明业务服务
private ListenerService listenerService;
// 采用构造函数注入服务
public FileListener(ListenerService listenerService) {
this.listenerService = listenerService;
}
// 文件创建执行
@Override
public void onFileCreate(File file) {
log.info(listenerService.listenAndUploadFiles(file));
}
// 文件创建修改
@Override
public void onFileChange(File file) {
// log.info(listenerService.test("【修改】", file));
}
// 文件创建删除
@Override
public void onFileDelete(File file) {
// log.info(listenerService.test("【删除】", file));
}
// 目录创建
@Override
public void onDirectoryCreate(File directory) {
// log.info(listenerService.test("【新建目录】", directory));
}
// 目录修改
@Override
public void onDirectoryChange(File directory) {
// log.info(listenerService.test("【修改目录】", directory));
}
// 目录删除
@Override
public void onDirectoryDelete(File directory) {
// log.info(listenerService.test("【删除目录】", directory));
}
// 轮询开始
@Override
public void onStart(FileAlterationObserver observer) {
}
// 轮询结束
@Override
public void onStop(FileAlterationObserver observer) {
}
}
FileListenerFactory
package com.lanxum.domas.config;
import com.lanxum.domas.service.ListenerService;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.HiddenFileFilter;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.File;
import java.util.concurrent.TimeUnit;
/**
* Created by JiangJunpeng on 2020/4/26.<br>
*/
@Component
public class FileListenerFactory {
// 设置轮询间隔
private final long interval = TimeUnit.SECONDS.toMillis(1);
// 自动注入业务服务
@Autowired
private ListenerService listenerService;
public FileAlterationMonitor getMonitor() {
// 创建过滤器
IOFileFilter directories = FileFilterUtils.and(
FileFilterUtils.directoryFileFilter(),
HiddenFileFilter.VISIBLE);
IOFileFilter files = FileFilterUtils.and(
FileFilterUtils.fileFileFilter(),
FileFilterUtils.suffixFileFilter(".xml"));
IOFileFilter filter = FileFilterUtils.or(directories, files);
// 装配过滤器
FileAlterationObserver observer = new FileAlterationObserver(new File("/usr/mnt/"), filter);
// 向监听者添加监听器,并注入业务服务
observer.addListener(new FileListener(listenerService));
// 返回监听者
return new FileAlterationMonitor(interval, observer);
}
}
FileListenerRunner
package com.lanxum.domas.config;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
/**
* Created by JiangJunpeng on 2020/4/26.<br>
*/
@Component
@Slf4j
public class FileListenerRunner implements CommandLineRunner {
@Autowired
private FileListenerFactory fileListenerFactory;
@Override
public void run(String... args) {
// 创建监听者
FileAlterationMonitor fileAlterationMonitor = fileListenerFactory.getMonitor();
try {
// do not stop this thread
fileAlterationMonitor.start();
} catch (Exception e) {
log.error("文件监听服务异常:" + e.toString());
e.printStackTrace();
}
}
}
ListenerService
package com.lanxum.domas.service;
import java.io.File;
/**
* Created by JiangJunpeng on 2020/4/26.<br>
*/
public interface ListenerService {
String listenAndUploadFiles(File file);
}
ListenerServiceImpl
package com.lanxum.domas.service.impl;
import cn.hutool.core.io.FileUtil;
import cn.hutool.http.HttpUtil;
import com.lanxum.domas.config.ParamConfig;
import com.lanxum.domas.service.ListenerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.File;
import java.util.HashMap;
/**
* Created by JiangJunpeng on 2020/4/26.<br>
*/
@Service
@Transactional
@Slf4j
public class ListenerServiceImpl implements ListenerService {
@Autowired
private ParamConfig paramConfig;
@Override
public String listenAndUploadFiles(File file) {
try {
return file.getAbsolutePath();
}
} catch (Exception e) {
log.error("listenAndUploadFiles: " + e);
e.printStackTrace();
return file.getAbsolutePath();
}
}
}