Ich erstelle eine Anwendung mit Spring Boot, und ich möchte Dokumente zu Solr abfragen und hinzufügen. So verwende ich Frühling Daten solr dafür, die Maven-Abhängigkeit ist:Wie SolrOperations Bean injizieren, wenn benutzerdefinierte Spring Data Solr-Repository implementieren?
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-solr</artifactId>
</dependency>
Dann erstelle ich eine Konfigurationsklasse für Solr Repository-Konfiguration. Dank Spring ist alles einfach und funktioniert gut.
@Configuration
@EnableSolrRepositories(basePackages = { "xxx.xx.xx.resource.repository.solr" },multicoreSupport = true)
public class SolrConfiguration {
@Bean
public SolrClient solrClient(@Value("${solr.host}") String solrHost) {
return new HttpSolrClient(solrHost);
}
}
Dann möchte ich für das Speichern von Dokumenten eine benutzerdefinierte Funktion hinzuzufügen, da der Standard-Konverter kann nicht mein verschachtelt Java-Objekt konvertieren. Ich beabsichtige, die Bean SolrClient
Bean oder SolrTemplate zum Speichern zu verwenden.
public class HouseSolrRepositoryImpl extends SimpleSolrRepository<House, String> implements HouseSolrRepository{
@Autowired
private SolrClient solrClient;
@Override
public House save(House house) throw Exception{
// Do converting
solrClient.save(doc);
solrClient.commit();
return house;/
}
}
Aber der Weg von autowired SolrClient
wird nicht solrCoreName
auf dem Weg aus dem Dokument-Objekt (@Document(solrCoreName = "gettingstarted")
). Es fordert nur http://localhost:8983/solr
, aber nicht http://localhost:8983/solr/gettingstarted
mit dem Kernnamen.
Ich denke, die solrCoreName
wird während der Initialisierung von Repository-Beans gesetzt, so dass meine Konfiguration es nicht enthält.
Auf der anderen Seite, fand ich SolrOperation
Bean von SimpleSolrRepository
wird auch Null, und alle anderen Abfragen wie findOne()
kann nicht richtig funktionieren.
Funktioniert es für Sie? In meinem Fall erstelle ich immer neue Instanzen, wenn ich die Methode anrufe. – Maralc