主要利用initializingbean对象和scheduledexecutor线程池,来实现统一封装的;
1,可重新弄加载初始化bean对象 接口类配置
public interface IReloadConfig{
//重新加载api
void reload();
}
2.抽象的公共方法,可项目启动初始化加载bean,也可手动触发时间,决定某一个bean对象进行重新加载配置
public absract class AbstractReloadConfig implements IReloadConfig,InitializingBean,DisposableBean{
//更新执行器
private Runnable runnable;//起线程执行
//定义线程池,1个线程池,无界队列,
private ScheduledExecutorService service;//service.submit可对当前bean对象重新加载配置
@Override
public final void afterPropertiesSet() throws Exception{
service = Executors.newSingleThreadScheduledExecutor();//定义线程池
this.runnable = createRunnable();//公共方法,不同bean对象初始化操作
this.runnable,run();
}
@Override
public final void destroy() throw Exception{
if(service != null){
service.shutdoen();//bean对象在项目停止的时候,销毁对象的同事,杀掉调度
}
}
@Override
public final void reload(){
try{
service.submit(this.runnable);//重新加载某对象时,会使用改方法,重新初始化bean对象
}catch(Exception e){
}
}
//抽取公共方法,方便初始化加载
protected abstract Runnable createRunnable();
}
3.样例,初始化某一bead对象,例如获取数据字典配置
@Service("ConfigUpdateTime")
public class commConfig extend AbstractReloadCOnfig{
//定义接收对象
private Map<String,Object> commfig;
@Overrid
protected Runnable createRunnable(){
return () -> {
logger.info();
//组装数据结构,commfig;
logger.info("结束");
};
}
//该bean对象,初始化加载完数据之后,可针对获取的数据,抽取公共方法,例如转账参数,1 -> 2
public Sting transform()String source{
//略
}
}