2015-07-12 113 views
1

我的設置在我的本地工作,但不是在我將其部署到CloudFoundry/mongolab時。@EnableMongoAuditing MongoDB on Cloud Foundry/mongolab

該配置與docs非常相似。

我的地方Spring配置

@Configuration 
@Profile("dev") 
@EnableMongoAuditing 
@EnableMongoRepositories(basePackages = "com.foo.model") 
public class SpringMongoConfiguration extends AbstractMongoConfiguration { 

@Override 
protected String getDatabaseName() { 
    return "myDb"; 
} 

@Override 
public Mongo mongo() throws Exception { 
    return new MongoClient("localhost"); 
} 

@Bean 
public AuditorAware<User> myAuditorProvider() { 
    return new SpringSecurityAuditorAware(); 
} 

} 

這是Cloud Foundry的設置

@Configuration 
@Profile("cloud") 
@EnableMongoAuditing 
@EnableMongoRepositories(basePackages = "com.foo.model") 
public class SpringCloudMongoDBConfiguration extends AbstractMongoConfiguration { 

private Cloud getCloud() { 
    CloudFactory cloudFactory = new CloudFactory(); 
    return cloudFactory.getCloud(); 
} 

@Bean 
public MongoDbFactory mongoDbFactory() { 
    Cloud cloud = getCloud(); 
    MongoServiceInfo serviceInfo = (MongoServiceInfo) cloud.getServiceInfo(cloud.getCloudProperties().getProperty("cloud.services.mongo.id")); 
    String serviceID = serviceInfo.getId(); 
    return cloud.getServiceConnector(serviceID, MongoDbFactory.class, null); 
} 

@Override 
protected String getDatabaseName() { 
    Cloud cloud = getCloud(); 
    return cloud.getCloudProperties().getProperty("cloud.services.mongo.id"); 
} 

@Override 
public Mongo mongo() throws Exception { 
    Cloud cloud = getCloud(); 
    return new MongoClient(cloud.getCloudProperties().getProperty("cloud.services.mongo.connection.host")); 
} 

@Bean 
public MongoTemplate mongoTemplate() { 
    return new MongoTemplate(mongoDbFactory()); 
} 

@Bean 
public AuditorAware<User> myAuditorProvider() { 
    return new SpringSecurityAuditorAware(); 
} 

} 

,當我嘗試將文檔保存在Cloud Foundry中,我得到的錯誤是:

OUT ERROR: org.springframework.data.support.IsNewStrategyFactorySupport - Unexpected error 
OUT java.lang.IllegalArgumentException: Unsupported entity com.foo.model.project.Project! Could not determine IsNewStrategy. 
OUT at org.springframework.data.mongodb.core.MongoTemplate.insert(MongoTemplate.java:739) 
OUT at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) 
OUT at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 

任何想法?它是我的配置文件等..? 預先感謝 尼克拉斯

回答

3

如果爲實體獲得的蒙哥映射元數據不掃描在應用程序啓動實體這通常引起的。缺省情況下,AbstractMongoConfiguration使用實際配置類的包在啓動時查找@Document帶註釋的類。

異常消息使我認爲SpringCloudMongoDBConfiguration未位於com.foo.model.project的任何超級軟件包中。有兩種解決方案:

  • 堅持將應用程序配置類放入應用程序的根包中。這將導致您的應用程序包被掃描以獲取域類,獲取的元數據以及預期的新檢測工作。
  • 通過覆蓋MongoConfiguration.getMappingBasePackage()手動將包含域類的軟件包交給基礎結構。

您可能會看到配置在本地環境中工作的原因是映射元數據可能通過非持久化持久性操作(例如查詢)以及從此處開始的一切操作獲得。

+1

謝謝奧利弗。當我通過AbstractMongoConfiguration類時,我一定錯過了(或誤解)。我將配置文件移到了根目錄下,它可以在本地和開發中使用。乾杯! – Niclas

相關問題