问题描述
- 初始化某个repository
-
(1)问题描述:启动时,要对多个模块进行数据初始化,并将数据放入缓存,如:
attributeRepository.init();
analyticRepository.init();
categoryRepository.init();
subCategoryRepository.init();
scheduleRepository.init();
... ...
nodeRepository.init();
现在的问题是:系统操作过程中,需要对某个模块单独进行初始化,而某个模块初始化前,可能需要先初始化其依赖的模块。
(2)思路:每个模块对应一个字符串,该字符串与service或repository同名,如“attributeRepository”、“analyticRepository”等。然后将该字符串及service或repository放入map中,这样就可以根据传入的字符串得到要初始化的模块。接着,需要定义一个map,其key存放模块对应的字符串,value为该字符串对应的repository所依赖的其他repositorys。
(3)具体做法:
@Autowired
private NodeRepository nodeRepository;
@Autowired
private RuleRepository ruleRepository;
@Autowired
private ScheduleRepository scheduleRepository;
@Autowired
private AttributeRepository attributeRepository;
@Autowired
private AnalyticRepository analyticRepository;
@Autowired
private CurrencyRepository currencyRepository;
@Autowired
private CategoryRepository categoryRepository;
@Autowired
private SubCategoryRepository subCategoryRepository;
/**- 传入参数,执行下面的这个方法
/
private void initRepositorys(String repository) throws SecurityException, NoSuchFieldException, InstantiationException, IllegalAccessException{
InitializingRepository initializingRepository = this.getRepository(repository);
//获得依赖的初始化repositorys
InitializingRepository[] replyOnRepositorysMap = this.getReplyOnRepositorys(repository);
//对某个repository执行初始化
this.refreshRepository(initializingRepository, replyOnRepositorysMap);
}
/*- 获取要初始化的repository
- @param repository
- @return
/
public InitializingRepository getRepository(String repository){
Map repositorysMap = new HashMap();
repositorysMap.put("attributeRepository", attributeRepository);
repositorysMap.put("analyticRepository", analyticRepository);
repositorysMap.put("categoryRepository", categoryRepository);
repositorysMap.put("subCategoryRepository", subCategoryRepository);
repositorysMap.put("scheduleRepository", scheduleRepository);
repositorysMap.put("nodeRepository", nodeRepository);
repositorysMap.put("currencyRepository", currencyRepository);
repositorysMap.put("ruleRepository", ruleRepository);
repositorysMap.put("holdingHistoryModelRepository", holdingHistoryModelRepository);
repositorysMap.put("ruleTemplateRepository", ruleTemplateRepository);
repositorysMap.put("ruleMnemonicRepository", ruleMnemonicRepository);
repositorysMap.put("incidentRepository", incidentRepository);
return repositorysMap.get(repository);
}
/* - 获取要初始化的repository相关的repositorys
- @param repository
- @return
/
public InitializingRepository[] getReplyOnRepositorys(String repository){
Map replyOnRepositorysMap = new HashMap();
replyOnRepositorysMap.put("incidentRepository", new InitializingRepository[]{attributeRepository});
return replyOnRepositorysMap.get(repository);
}
/* - 对某个repository执行初始化
- @param initializingRepository
- @param replyOnRepositorysMap
/
public void refreshRepository(InitializingRepository initializingRepository, InitializingRepository[] replyOnRepositorysMap){
try {
//先初始化依赖的repositorys,再初始化repository
if(replyOnRepositorysMap!=null && replyOnRepositorysMap.length>0){
for(int i=0; i<replyOnRepositorysMap.length; i++){
replyOnRepositorysMap[i].init();
}
}
initializingRepository.init();
} catch (RepositoryInitializingException e) {
e.printStackTrace();
}
}
private void initRepositorys(String repository) throws SecurityException, NoSuchFieldException, InstantiationException, IllegalAccessException{
InitializingRepository initializingRepository = this.getRepository(repository);
//获得依赖的初始化repositorys
InitializingRepository[] replyOnRepositorysMap = this.getReplyOnRepositorys(repository);
//对某个repository执行初始化
this.refreshRepository(initializingRepository, replyOnRepositorysMap);
}
/* - 获取要初始化的repository
- @param repository
- @return
/
public InitializingRepository getRepository(String repository){
Map repositorysMap = new HashMap();
repositorysMap.put("attributeRepository", attributeRepository);
repositorysMap.put("analyticRepository", analyticRepository);
repositorysMap.put("categoryRepository", categoryRepository);
repositorysMap.put("subCategoryRepository", subCategoryRepository);
repositorysMap.put("scheduleRepository", scheduleRepository);
repositorysMap.put("nodeRepository", nodeRepository);
repositorysMap.put("currencyRepository", currencyRepository);
repositorysMap.put("ruleRepository", ruleRepository);
repositorysMap.put("holdingHistoryModelRepository", holdingHistoryModelRepository);
repositorysMap.put("ruleTemplateRepository", ruleTemplateRepository);
repositorysMap.put("ruleMnemonicRepository", ruleMnemonicRepository);
repositorysMap.put("incidentRepository", incidentRepository);
return repositorysMap.get(repository);
}
/* - 获取要初始化的repository相关的repositorys
- @param repository
- @return
/
public InitializingRepository[] getReplyOnRepositorys(String repository){
Map replyOnRepositorysMap = new HashMap();
replyOnRepositorysMap.put("incidentRepository", new InitializingRepository[]{attributeRepository});
return replyOnRepositorysMap.get(repository);
}
/* - 对某个repository执行初始化
- @param initializingRepository
- @param replyOnRepositorysMap
/
public void refreshRepository(InitializingRepository initializingRepository, InitializingRepository[] replyOnRepositorysMap){
try {
//先初始化依赖的repositorys,再初始化repository
if(replyOnRepositorysMap!=null && replyOnRepositorysMap.length>0){
for(int i=0; i, InitializingRepository {
/* - 根据nodeIds查询非close且状态为A的incidents
- @param nodeIds
- @return
- @throws RepositoryException
/
public List getIncidentsByNodeIds(Collection nodeIds) throws RepositoryException;
/* - 根据IncidentId查询Incident
- @param id
- @return
/
public Incident getIncidentById(Integer incidentId);
/* - 保存incident
- @param incident
*/
public void saveOrUpdateIncident(Incident incident) throws RepositoryException;
}
在InitializingRepository 中定义了init方法(具体init方法执行了哪些操作略)。
public interface InitializingRepository {
public void init() throws RepositoryInitializingException;
}
- 传入参数,执行下面的这个方法
时间: 2024-10-26 03:57:40