2017-08-18 1 views
0

Dies ist ein Follow-up zu der Frage Making spring-data-mongodb multi-tenant Oliver Gierke erklärt Optionen, wie Multi-Tenancy für eine SpringDataMongo-Anwendung einrichten. Ich folgte seinem "Sammelansatz" und war ziemlich erfolgreich. Bisher. Probleme entstehen, wenn ich die verwendete MongoTemplate anpassen möchte. Werfen Sie einen Blick auf dieses Beispiel:MongoTemplate in MultiTenant Feder Daten Mongo Anwendung

@SpringBootApplication 
public class MultiTenantMongoApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(MultiTenantMongoApplication.class, args); 
    } 

    @Bean 
    public MongoTemplate mongoTemplate(Mongo mongo, @Value("${random.name}") String randomName) throws Exception { 
     String dbname = "db_" + randomName; 
     MongoTemplate mongoTemplate = new MongoTemplate(mongo, dbname) { 
      @SuppressWarnings("unused") 
      public void shutdown() { 
       mongo.dropDatabase(dbname); 
      } 
     }; 
     return mongoTemplate; 
    } 
} 

@Document(collection="#{tenantProvider.getTenantCollectionName('Metric')}") 
public class Metric { 

} 

@Repository 
public interface MetricRepository extends MongoRepository<Metric, ObjectId>{} 

@Component 
public class TenantProvider { 
    public String getTenantCollectionName(String collectionName) { 
     ... 
    } 
} 

Daraus ergibt sich folgende Fehler:

SpelEvaluationException: EL1007E: Property or field 'tenantProvider' cannot be found on null

Wenn ich die Definition der MongoTemplate Bohne in der Anwendungsklasse alles zu entfernen ist in Ordnung und läuft nach Wunsch. Offensichtlich wird der Property Provider nicht richtig konfiguriert, wenn die MongoTemplate angepasst wird. Warum passiert dies? Und was kann ich tun, um die Immobilie zu erhalten?

Antwort

0

Ich denke, der obige Fehler ist wegen der SpEL-Ausdruck. Sie können auf diese Weise versuchen, mithilfe des folgenden SPEL-Ausdrucks auf die TenantProvider-Klasse zuzugreifen.

oder Sie können einen vollständig qualifizierten Klassennamen für TenantProvider im obigen Ausdruck hinzufügen.

+0

Nein, das ändert nichts – Gregor

Verwandte Themen