添加依賴
<!-- apache commons io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
自定義繼承FileAlterationListenerAdaptor
import com.dream.user.restservice.controllers.UserController;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
/**
* 監聽文件變動
*/
public class FileListenerAdaptor extends FileAlterationListenerAdaptor {
private static final Logger logger = LoggerFactory.getLogger(FileListenerAdaptor.class);
/**
* File created Event.
*
* @param file The file created (ignored)
*/
@Override
public void onFileCreate(final File file) {
logger.info("監聽{}創建",file.getName());
}
/**
* File changed Event.
*
* @param file The file changed (ignored)
*/
@Override
public void onFileChange(final File file) {
logger.info("監聽{}修改",file.getName());
}
/**
* File deleted Event.
*
* @param file The file deleted (ignored)
*/
@Override
public void onFileDelete(final File file) {
logger.info("監聽{}刪除",file.getName());
}
}
實現spring的監聽事件ApplicationListener<ContextRefreshedEvent>
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
public class ContextRefreshedListener implements ApplicationListener<ContextRefreshedEvent> {
@Autowired
FileAlterationMonitor monitor;
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
try {
//開始監聽
monitor.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
FileListenerConfig配置
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.util.ResourceUtils;
import java.io.File;
@Configuration
public class FileListenerConfig {
@Bean
public ContextRefreshedListener contextRefreshedListener() {
return new ContextRefreshedListener();
}
@Bean
public FileListenerAdaptor fileListener(){return new FileListenerAdaptor();}
@Bean
public FileAlterationMonitor fileMonitor(FileListenerAdaptor fileListener) throws Exception{
FileAlterationMonitor fileMonitor = new FileAlterationMonitor();//默認是10s監聽一次
//獲取絕對路徑
Resource resource = new ClassPathResource("");
String workPath = resource.getFile().getAbsolutePath();
int index = workPath.indexOf("target");
workPath = workPath.substring(0,index-1)+"/src/main/resources/";
//指定觀察者監聽的目錄
File file = ResourceUtils.getFile(workPath);
//實例化觀察者
FileAlterationObserver observer = new FileAlterationObserver(file);
observer.addListener(fileListener);
//監視器添加觀察者
fileMonitor.addObserver(observer);
return fileMonitor;
}
}