2017-07-26 2 views
0

J'ajoute quelques liaisons dans la méthode de personnalisation, en référence à l'accrochage de code ci-dessous. Maintenant, il ya un problème étrange, lors du redémarrage du programme, la méthode de personnalisation est parfois chargée, donc la méthode peut être appelée avec succès, mais parfois ne peut pas être chargé, ce qui conduit à des résultats de requête erronés. J'ai débogué la ressource injectant AdminRepository. Lors du déchargement de personnaliser la méthode, la classe de printemps JdkDynamicTarget n'a pas le cache de la méthode:querydsl par défaut customiser la méthode ne peut pas charger

public interface AdminRepository extends CrudRepository<MonthGprs, String>, 
    QueryDslPredicateExecutor<MonthGprs>, QuerydslBinderCustomizer<QMonthGprs> { 
Logger log = LoggerFactory.getLogger (AdminRepository.class); 
@Override 
default public void customize(QuerydslBindings bindings, QMonthGprs root) { 

    log.debug ("AdminRepository"); 

    bindings.bind (root.appLeftGprs).all (((path, value) -> { 
     Iterator it = value.iterator (); 
     return path.goe ((Float) it.next ()).and (path.loe ((Float) it.next ())); 
    })); 

    bindings.bind (root.wifiLeftGprs).all (((path, value) -> { 
     Iterator it = value.iterator (); 
     return path.between ((Float) it.next (), (Float) it.next ()); 
    })); 

    bindings.bind (root.simInfo.createdDate).all (((path, value) -> { 
     Iterator it = value.iterator (); 
     return path.after ((ZonedDateTime) it.next ()).and (path.before ((ZonedDateTime) it 
       .next ())); 
    })); 

    bindings.bind (String.class) 
      .first ((StringPath path, String value) -> path.containsIgnoreCase (value)); 
} 

} BTW, j'utilise com.querydsl: querydsl-MongoDB: jar: 4.1.4, org.springframework.boot: printemps-démarrage -devtools: jar: 1.4.1.RELEASE, org.springframework: support de contexte de printemps: jar: 4.3.3.RELEASE.

Répondre

0

J'ai trouvé la raison pour laquelle je définissais deux référentiels pour un modèle de domaine, mais dans

org.springframework.data.repository.support.Repositories 

private final Map<Class<?>, String> repositoryBeanNames;

Cette carte maintient une paires clé-valeur, dans laquelle en utilisant la classe comme la clé, le dépôt nom comme valeur. Si le contexte d'application comporte plusieurs référentiels pour le même modèle de domaine, une seule classe de référentiel est chargée. Ainsi, si le référentiel dsl de requête est chargé, la méthode de personnalisation est appelée ou un autre référentiel est chargé.