springboot监听⽂件笔记最近公司项⽬需要对外部配置⽂件进⾏监听,根据⽂件内容进⾏相应的修改。所以就学习了下⼀、类
@Component
public class FileListener extends FileAlterationListenerAdaptor {
private Logger log = Logger(FileListener.class);
柳岩 画皮// 声明业务服务
@Autowired
辛芷蕾 照片Service sevice;
// ⽂件创建执⾏
@Override
public void onFileCreate(File file){
log.info("[新建]:"+ AbsolutePath());
System.out.println("⽂件创建了。。。。。");
}
// ⽂件创建修改
@Override
public void onFileChange(File file){
log.info("[修改]:"+ AbsolutePath());
}
// ⽂件创建删除
@Override
public void onFileDelete(File file){
log.info("[删除]:"+ AbsolutePath());
System.out.println("⽂件被删除");
俞灏明王栎鑫
}
// ⽬录创建
@Override
public void onDirectoryCreate(File directory){
log.info("[⽬录创建]:"+ AbsolutePath());
}
// ⽬录修改
@Override
public void onDirectoryChange(File directory){
log.info("[⽬录修改]:"+ AbsolutePath());
何超英
}
// ⽬录删除
@Override
public void onDirectoryDelete(File directory){
log.info("[⽬录删除]:"+ AbsolutePath());
三圾片名字}
}
注意这个类最⼩监听单位是⽂件夹,不能定向监听⽂件。
⼆、配置监视器
springboot配置中注⼊监视器bean
@Bean
public FileAlterationMonitor monitor(FileListener listener){
FileAlterationMonitor monitor =new FileAlterationMonitor(1000l);
//参数传值是多久检查⼀次⽂件,单位毫秒
String string =Class().getClassLoader().getResource("xxx").toString();
String path = string.substring(string.indexOf("/")+1, string.length());
FileAlterationObserver observer =new FileAlterationObserver(new File(path));//创建观察者
observer.addListener(listener);
monitor.addObserver(observer);
return monitor;
}
三、启动类配置
ApplicationContext context = SpringApplication.run(DemoApplication.class, args);
FileAlterationMonitor monitor = Bean(FileAlterationMonitor.class);
try{
monitor.start();
}catch(Exception e){
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("启动失败");
}
四、关于如何读取外部配置⽂件
⼀般来说,某个项⽬希望通过配置⽂件改变某些参数来调整,但是这些⽂件⼜不能打进jar包,就必须采⽤读取外部配置⽂件的⽅式进⾏。这时候就必须要获得绝对路径。
Properties prop =new Properties();
InputStream input =new FileInputStream(new File("D:/my.properties"));
prop.load(input);
String property = Property("aaa");
读取配置文件失败System.out.println(property);
上⾯这个把路径写死了,我们希望能根据jar包位置来获取路径
Properties prop =new Properties();
String resource =Class().getClassLoader().getResource("").toString();
String substring = resource.substring(0, resource.indexOf("项⽬名")).concat("具体⽂件名");
String s = substring.substring(resource.indexOf("/")+1);
System.out.println(s);
FileInputStream input  =new FileInputStream(new  File(s));
prop.load(input);
这⾥举了个例⼦,是读取项⽬同⽂件夹下的配置⽂件。