SpringBoot监听目录
1. 集成common-io包
自动监听目录下所有文件的变化:
在公安网内外网交互的时候,外网数据是直接传输不到内网中的,内网数据不能传输到外网中. 但是外网一些数据需要传输到内网,供内网办公人员使用!
maven依赖
<!--集成common-io工具包-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.7</version>
</dependency>
// 其他:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--使用lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--开启配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
2. 创建监听器
package com.fgaejiang.io;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.*;
/**
* 创建 监听器
*
* @author <发哥讲Java-694204477@qq.com>
* @version 1.0
* @date 2021/6/9 21:10
*/
@Slf4j
@Component
public class FileListener extends FileAlterationListenerAdaptor {
@Autowired
DoingService doingService;
/**
* 文件创建执行
*/
public void onFileCreate(File file) {
log.info("[新建]:" + file.getAbsolutePath());
doingService.doParsingTask(file);
}
/**
* 文件创建修改
*/
public void onFileChange(File file) {
log.info("[修改]:" + file.getAbsolutePath());
// 执行业务逻辑
doingService.doSomething(file);
}
/**
* 文件删除
*/
public void onFileDelete(File file) {
log.info("[删除]:" + file.getAbsolutePath());
}
/**
* 目录创建
*/
public void onDirectoryCreate(File directory) {
log.info("[新建]:" + directory.getAbsolutePath());
}
/**
* 目录修改
*/
public void onDirectoryChange(File directory) {
log.info("[修改]:" + directory.getAbsolutePath());
}
/**
* 目录删除
*/
public void onDirectoryDelete(File directory) {
log.info("[删除]:" + directory.getAbsolutePath());
}
public void onStart(FileAlterationObserver observer) {
// TODO Auto-generated method stub
super.onStart(observer);
}
public void onStop(FileAlterationObserver observer) {
// TODO Auto-generated method stub
super.onStop(observer);
}
}
3. 监听器工厂,用于生产不同的文件监听器
package com.fgaejiang.io;
import lombok.extern.slf4j.Slf4j;
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.stereotype.Component;
import javax.management.monitor.Monitor;
import java.io.File;
/**
* 监听器工厂,用于生产不同的文件监听器
*
* @author <发哥讲Java-694204477@qq.com>
* @version 1.0
* @date 2021/6/9 21:22
*/
@Slf4j
@Component
public class FileListenerFactory {
@Autowired
WorkConfig workConfig;
@Autowired
FileListener fileListener;
/**
* 获取一个 监听目录的线程
*
* @return 执行线程
*/
public FileAlterationMonitor getMonitor() {
// 创建文件过滤器
// 前缀过滤器
IOFileFilter prefixFileFilter = FileFilterUtils.prefixFileFilter("hello");
// 后缀过滤器
IOFileFilter suffixFileFilter = FileFilterUtils.suffixFileFilter(".txt");
// 其他
// IOFileFilter directories = FileFilterUtils.and(
// FileFilterUtils.directoryFileFilter(),
// HiddenFileFilter.VISIBLE);
// IOFileFilter files = FileFilterUtils.and(
// FileFilterUtils.fileFileFilter(),
// FileFilterUtils.suffixFileFilter(".log"));
// 俩者满足其一
IOFileFilter filter = FileFilterUtils.or(prefixFileFilter, suffixFileFilter);
// 装配过滤器
FileAlterationObserver observer = new FileAlterationObserver(new File(workConfig.getBakPath()), filter);
// 向监听者添加监听器
observer.addListener(fileListener);
// 返回监听者
return new FileAlterationMonitor(workConfig.getInterval(), observer);
}
}
4.监听器工厂,用于生产不同的文件监听器
package com.fgaejiang.io;
import lombok.extern.slf4j.Slf4j;
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.stereotype.Component;
import javax.management.monitor.Monitor;
import java.io.File;
/**
* 监听器工厂,用于生产不同的文件监听器
*
* @author <发哥讲Java-694204477@qq.com>
* @version 1.0
* @date 2021/6/9 21:22
*/
@Slf4j
@Component
public class FileListenerFactory {
@Autowired
WorkConfig workConfig;
@Autowired
FileListener fileListener;
/**
* 获取一个 监听目录的线程
*
* @return 执行线程
*/
public FileAlterationMonitor getMonitor() {
// 创建文件过滤器
// 前缀过滤器
IOFileFilter prefixFileFilter = FileFilterUtils.prefixFileFilter("hello");
// 后缀过滤器
IOFileFilter suffixFileFilter = FileFilterUtils.suffixFileFilter(".txt");
// 其他
// IOFileFilter directories = FileFilterUtils.and(
// FileFilterUtils.directoryFileFilter(),
// HiddenFileFilter.VISIBLE);
// IOFileFilter files = FileFilterUtils.and(
// FileFilterUtils.fileFileFilter(),
// FileFilterUtils.suffixFileFilter(".log"));
// 俩者满足其一
IOFileFilter filter = FileFilterUtils.or(prefixFileFilter, suffixFileFilter);
// 装配过滤器
FileAlterationObserver observer = new FileAlterationObserver(new File(workConfig.getBakPath()), filter);
// 向监听者添加监听器
observer.addListener(fileListener);
// 返回监听者
return new FileAlterationMonitor(workConfig.getInterval(), observer);
}
}
5. 项目启动加载
package com.fgaejiang.io;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import java.util.concurrent.Executor;
/**
* 我还没有写描述
*
* @author <发哥讲Java-694204477@qq.com>
* @version 1.0
* @date 2021/6/9 21:04
*/
@Component
@Slf4j
public class ApplicationBizRunner implements ApplicationRunner {
@Autowired
FileListenerFactory fileListenerFactory;
@Autowired
Executor customExecutor;
@Override
public void run(ApplicationArguments args) throws Exception {
FileAlterationMonitor monitor = fileListenerFactory.getMonitor();
// 在线程池中执行.. todo 不能使用线程池执行,
// customExecutor.execute(monitor);
monitor.start();
System.out.println("***************监控开始***************");
}
}
运行效果:
源代码:springboot-common-io · 发哥讲Java/frames - 码云 - 开源中国 (gitee.com)