Spring Data MongoDBとSpring Batchを使用して、エンティティクラスが保存され、インデックスが作成されるコレクション名をカスタマイズしようとしています。次のようにクラスが宣言されています。Spring用のSpELでBeanを解決できません。データMongoDBコレクション名
@Document
@CompoundIndex(name = "unique_source", def = "{'fid': 1, 'sid': 1}", unique = true, background = true)
public class VariantSource {
...
}
とアイテムライター:
public class VariantSourceMongoWriter extends MongoItemWriter<VariantSource> {
public VariantSourceEntityMongoWriter(MongoOperations mongoOperations, String collectionName) {
setTemplate(mongoOperations);
setCollection(collectionName);
}
}
の保存が正常に動作します:オブジェクトを引数として提供コレクションに書かれています。問題は、インデックスがクラス名(variantSource
)の名前に基づいて、デフォルトコレクションに作成されることです。
public class MongoCollections {
public String getCollectionFilesName() {
return "my_custom_collection_name"; // TODO Dynamic value
}
}
@Configuration
public class MongoCollectionsConfiguration {
@Bean
public MongoCollections mongoCollections() {
return new MongoCollections();
}
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {MongoCollectionsConfiguration.class})
public class VariantSourceMongoWriterTest {
@Autowired
private MongoCollections mongoCollections;
}
私はインスタンスをチェックし、正しくユニットテストにautowiredされ、私はそれがSpeIで動作させることはできません。
このように見えるように@Document
注釈を変更した後:
@Document(collection = "#{@mongoCollections.getCollectionFilesName()}")
次の例外がスローされます。
org.springframework.expression.spel.SpelEvaluationException:EL1057E:(POS 1): Bean 'mongoCollections'へのアクセスを解決するコンテキストにBeanリゾルバが登録されていません
そして、これを使用する場合:
@Document(collection = "#{mongoCollections.getCollectionFilesName()}")
例外は、このいずれかになります。
で見つけることができません指定された最後に、次のように名前のコレクションを作成しますorg.springframework.expression.spel.SpelEvaluationException:EL1007E:(POS 0):プロパティまたはフィールド 'mongoCollectionsは' ヌル
、シンボルが含ま:
@Document(collection = "@mongoCollections.getCollectionFilesName()")