
我是在執行xxl-job定時任務時用aop增強方法動態生成實體物件,但是會報鏈接超時,不知道那里出錯了
這是我得代碼
@Around("routeMongoDB()")
public Object routeMongoDB(ProceedingJoinPoint joinPoint) {
Object result = null;
Object[] args= joinPoint.getArgs();
String db= String.valueOf(args[0]);
Object o = joinPoint.getTarget();
Field[] fields = o.getClass().getDeclaredFields();
MultiMongoTemplate mongoTemplate = null;
try {
for (Field field : fields) {
field.setAccessible(true);
Object fieldObject = field.get(o);
Class fieldclass = fieldObject.getClass();
//找到Template的變數
if (fieldclass == MongoTemplate.class || fieldclass == MultiMongoTemplate.class) {
//查找專案對應的MongFactory
SimpleMongoClientDbFactory simpleMongoClientDbFactory=(SimpleMongoClientDbFactory)templateMuliteMap.get(db);
//實體化
if(simpleMongoClientDbFactory==null){
//根據dbname查詢資料對應地址
this.uri=testMongoUriDao.findByAppId(db).getUri();
//替換資料源
simpleMongoClientDbFactory = new SimpleMongoClientDbFactory(this.uri.replace("#",db));
templateMuliteMap.put(db,simpleMongoClientDbFactory);
}
//如果第一次,賦值成自定義的MongoTemplate子類
if(fieldclass==MongoTemplate.class){
mongoTemplate = new MultiMongoTemplate(simpleMongoClientDbFactory);
}else if(fieldclass==MultiMongoTemplate.class){
mongoTemplate=(MultiMongoTemplate)fieldObject;
}
//設定MongoFactory
mongoTemplate.setMongoDbFactory(simpleMongoClientDbFactory);
//重新賦值
field.set(o, mongoTemplate);
break;
}
}
try {
result = joinPoint.proceed();
//清理ThreadLocal的變數
mongoTemplate.removeMongoDbFactory();
} catch (Throwable t) {
logger.error("", t);
}
} catch (Exception e) {
logger.error("", e);
}
return result;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/244018.html
標籤:Java EE
