登录视频课程一讲demo
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

61 lines
1.9 KiB

package com.tptj.project.hg.sso;
import com.fr.log.FineLoggerFactory;
import com.fr.store.StateHubManager;
import com.fr.store.StateHubService;
/**
* @author 秃破天际
* @version 10.0
* Created by 秃破天际 on 2021-05-12
* 一个对于会过期对象的重加载对象的封装
**/
public class TimeoutObjectHolder {
private static StateHubService getService(){
//具体会过期的对象要保存到状态服务器,防止集群情况下冲突
return StateHubManager.applyForTenantService("SsoTimeoutObjectService");
}
private ReLoader loader;
private String key;
public TimeoutObjectHolder(ReLoader loader, String key) {
this.loader = loader;
this.key = key;
}
public static TimeoutObjectHolder init( Object object, long timeout, ReLoader loader, Class tag )throws Exception{
if( null == loader ){
throw new Exception("ReLoader Is Null");
}
if( null == tag ){
throw new Exception("tag Is Null");
}
TimeoutObject obj = new TimeoutObject();
obj.setObject(object);
obj.setTimeout(timeout);
getService().put( tag.getName(), obj );
return new TimeoutObjectHolder( loader, tag.getName() );
}
public <T> T getObj(){
try{
TimeoutObject obj = getService().get(key);
if( obj.isTimeout() ){
TimeoutObject val = (TimeoutObject) loader.reload( obj );
if( null != val ){
obj = val;
getService().put( key, obj );
}else{
throw new Exception( "Timeout Object Reload Failed!" );
}
}
return (T) obj.getObject();
}catch(Exception e){
FineLoggerFactory.getLogger().error( e, e.getMessage() );
}
return null;
}
}