我正在向Cloud Foundry部署Grails应用程序,其中可搜索插件'compassConnection'设置为使用RAM索引。问题是Cloud Foundry应用了一些神奇的自动配置来设置'compassConnection'以使用基于文件的索引。
如果我使用基于磁盘的索引并且Cloud Foundry需要重新配置以使其在其环境中工作,那就没关系了,但我希望RAM索引配置保持不变。
任何想法如何使我的工作?
感谢, 奥利
答案 0 :(得分:2)
我在浏览AbstractCloudBeanPostprocessor中的Cloud Foundry插件源代码后找到了问题的原因。填充罗盘连接的方法不会检查它是否是RAM索引,而是盲目地将其设置为磁盘上的某个位置。
/**
* Update the location of the Searchable Lucene index.
* @param beanFactory the Spring bean factory
* @param appConfig the application config
*/
protected void fixCompass(ConfigurableListableBeanFactory beanFactory, ConfigObject appConfig) {
def compassBean = beanFactory.getBeanDefinition('compass')
String indexLocation = getCompassIndexRootLocation(appConfig) + '/searchable-index'
appConfig.searchable.compassConnection = indexLocation
compassBean.propertyValues.addPropertyValue 'compassConnection', indexLocation
log.debug "Updated Compass connection details: $indexLocation"
}
我认为这应该检查是否存在RAM索引并仅将其设置为磁盘位置。一种可能的解决方法是创建我自己的BeanDefinitionRegistryPostProcessor并撤消云代工厂插件的功能。