PropertySource注解
// file一般为jar包外的路径,配置文件放在跟jar同级的文件夹里或者直接同级
@PropertySource(value = "file:config.properties")
// classpath一般为jar包下的路径(一般在resources目录下)
@PropertySource({"classpath:config.properties"})
示例
config.properties:
# FTP服务器地址
ftp.hostname=10.8.0.86
# FTP服务器端口号
ftp.port=21
# FTP登录帐号
ftp.username=Administrator
# FTP登录密码
ftp.password=bspacs@13386
# 监控目录
root.dir=E:/uploadfile/
# 临时文件目录:保存添加水印的文件
temp.dir=E:/watermake/
# 图片水印路径
icon.path= E://icon.png
MonitorService :
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
import java.io.File;
import java.util.concurrent.TimeUnit;
/**
* @author: HMM
* @date: 2020/8/27 9:04
*/
@Component
@ConfigurationProperties
// file一般为jar包外的路径,配置文件放在跟jar同级的文件夹里或者直接同级
@PropertySource(value = "file:config.properties")
// classpath一般为jar包下的路径
//@PropertySource({"classpath:config.properties"})
public class MonitorService implements ApplicationListener<ContextRefreshedEvent> {
private Logger log = LoggerFactory.getLogger(this.getClass());
@Value("${ftp.hostname}")
private String hostname;
@Value("${ftp.port}")
private int port;
@Value("${ftp.username}")
private String username;
@Value("${ftp.password}")
private String password;
/**
* 本地监控目录
*/
@Value("${root.dir}")
private String rootDir;
/**
* 临时文件目录
*/
@Value("${temp.dir}")
private String tempDir;
/**
* 图片水印地址
*/
@Value("${icon.path}")
private String iconPath;
@Override
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
//保证只执行一次
if (contextRefreshedEvent.getApplicationContext().getParent() == null) {
//需要执行的方法
log.info("文件自动上传服务启动...");
log.info("[监控] 本地文件目录 = {}", rootDir);
log.info("[FTP服务器] hostname = {}; port = {}; username = {}; password = {}", hostname, port, username, password);
try {
// 轮询间隔 1 秒
long interval = TimeUnit.SECONDS.toMillis(1);
//不使用过滤器
FileAlterationObserver observer = new FileAlterationObserver(new File(rootDir));
// 添加监听器
observer.addListener(new FileAlterationListenerAdaptor() {
/**
* 文件创建执行
*/
@Override
public void onFileCreate(File file) {
log.info("[新建]:" + file.getAbsolutePath());
String parent = file.getParent();
// 反斜杠"\" 转 正斜杠 "/"
parent = parent.replaceAll("\\\\", "/");
String path="";
if(parent.contains(rootDir)){
int beginIndex = rootDir.length();
path = parent.substring(beginIndex);
}
FtpClientUtil.uploadFileByWatermark(hostname, port, username, password, path, tempDir, iconPath, file);
}
/**
* 文件创建修改
*/
@Override
public void onFileChange(File file) {
log.info("[修改]:" + file.getAbsolutePath());
}
/**
* 文件删除
*/
@Override
public void onFileDelete(File file) {
log.info("[删除]:" + file.getAbsolutePath());
}
/**
* 目录创建
*/
@Override
public void onDirectoryCreate(File directory) {
log.info("[新建]:" + directory.getAbsolutePath());
}
/**
* 目录修改
*/
@Override
public void onDirectoryChange(File directory) {
log.info("[修改]:" + directory.getAbsolutePath());
}
/**
* 目录删除
*/
@Override
public void onDirectoryDelete(File directory) {
log.info("[删除]:" + directory.getAbsolutePath());
}
@Override
public void onStart(FileAlterationObserver observer) {
// TODO Auto-generated method stub
super.onStart(observer);
}
@Override
public void onStop(FileAlterationObserver observer) {
// TODO Auto-generated method stub
super.onStop(observer);
}
});
//创建文件变化监听器
FileAlterationMonitor monitor = new FileAlterationMonitor(interval, observer);
// 开始监控
monitor.start();
} catch (Exception e) {
log.info("[onApplicationEvent] 文件自动上传服务启动异常, message={}", e.getMessage());
e.printStackTrace();
}
}
}
}
部署
cmd执行 java -jar FileMonitor.jar
命令运行jar包