【发布时间】:2017-08-18 18:54:25
【问题描述】:
这是对问题Making spring-data-mongodb multi-tenant 的跟进 Oliver Gierke 解释了如何为 SpringDataMongo 应用程序设置多租户的选项。我按照他的“收藏方式”,相当成功。至今。当我想自定义使用的 MongoTemplate 时,问题就出现了。看看这个例子:
@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) {
...
}
}
这会产生以下错误:
SpelEvaluationException: EL1007E: 属性或字段 'tenantProvider' 在 null 上找不到
当我在应用程序类中删除 MongoTemplate bean 的定义时,一切都很好并且可以按需要运行。 显然,当自定义 MongoTemplate 时,属性提供者没有正确配置。为什么会这样?我该怎么做才能让物业到位?
【问题讨论】:
标签: spring spring-data spring-data-mongodb