2017-05-17 1 views
0

Ich möchte einen weiteren Kern zu meinem Solr 5.5.0 Embedded-Server-Umgebung hinzufügen. "In meiner Welt" erstelle ich einen eingebetteten Server und lasse die Kernkonfigurationen mit Federdaten laden. Aber mit meiner Lösung scheint es, dass alle Daten in den Standardkern "collection1" gelangen. Bisher konnte ich neben Spring-Boot kein Beispiel finden. Aber das ist keine Option.Wie konfiguriere ich mehrere Kerne auf eingebetteten Solr mit rohen Feder-Daten-Solr

Meine Konfiguration sieht wie folgt aus so weit:

@Import({ 
    AppctxSolrEmbedded.class, 
    AppctxSolrHttp.class 
}) 
@EnableSolrRepositories(value = "de.my.application.*.repository", multicoreSupport = true) 
@Configuration 
public class AppctxSolr { 

    public @Bean SolrTemplate solrTemplate(
      @Named("solrClient") SolrClient solrClient) { 
     return new SolrTemplate(solrClient, "collection1"); 
    } 

    public @Bean SolrTemplate operatorSolrTemplate(
      @Named("solrClient") SolrClient solrClient) { 
     return new SolrTemplate(solrClient, "operator1"); 
    } 
} 

@Dev @Qual @RemoteDev 
@Configuration 
public class AppctxSolrEmbedded { 

    @Bean 
    public EmbeddedSolrServerFactoryBean solrClient(
      @Value("${solr.server}") String solrHome) { 
     EmbeddedSolrServerFactoryBean factory = new EmbeddedSolrServerFactoryBean(); 
     factory.setSolrHome(solrHome); 
     return factory; 
    } 
} 

@Prod 
@Configuration 
public class AppctxSolrHttp { 

    @Bean 
    public HttpSolrClientFactoryBean solrClient(
      @Value("${solr.server}") String baseURL) { 
     HttpSolrClientFactoryBean factory = new HttpSolrClientFactoryBean(); 
     factory.setUrl(baseURL); 
     return factory; 
    } 
} 

Antwort

2

Hier ist, wie ich es tun würde,

@Configuration 
@EnableSolrRepositories(multicoreSupport = true) 
public class MulticoreSolrConfiguration { 

    @Autowired 
    private SolrClient solrClient; 

    @Bean 
    public SolrOperations solrTemplate() throws ParserConfigurationException, SAXException, IOException { 
    return new SolrTemplate(this.solrClient); 
    } 

    @Bean 
    public MulticoreSolrClientFactory multicoreSolrClientFactory() 
     throws ParserConfigurationException, SAXException, IOException { 
    return new MulticoreSolrClientFactory(this.solrClient, "operator1", "collection1"); 
    } 

    @Bean(name = "operatorSolrClient") 
    public SolrClient operatorSolrClient() throws IOException, SAXException, ParserConfigurationException { 
    return this.multicoreSolrClientFactory().getSolrClient("operator1"); 
    } 

    @Bean(name = "operatorSolrTemplate") 
    public SolrTemplate operatorSolrTemplate() throws IOException, SAXException, ParserConfigurationException { 
    return new SolrTemplate(this.operatorSolrClient()); 
    } 
} 

    @Bean(name = "collectionSolrClient") 
    public SolrClient collectionSolrClient() throws IOException, SAXException, ParserConfigurationException { 
    return this.multicoreSolrClientFactory().getSolrClient("collection1"); 
    } 

    @Bean(name = "collectionSolrTemplate") 
    public SolrTemplate collectionSolrTemplate() throws IOException, SAXException, ParserConfigurationException { 
    return new SolrTemplate(this.collectionSolrClient()); 
    } 
} 

Und dann statt AppctxSolrEmbedded und AppctxSolrHttp, können Sie so etwas wie dieses

tun
@Configuration 
class SolrConfiguration { 

    private final SolrProperties solrProperties; // Has details about solr host, port, directory ..... 

    @Autowired 
    public SolrConfiguration(final SolrProperties solrProperties) { 
    this.solrProperties = solrProperties; 
    } 

    @Bean 
    SolrClient solrClient() { 
    final SolrClient solrClient; 
    if (this.solrProperties.isEmbedded()) { 
     solrClient = createEmbeddedSolrClient(); 
    } else { 
     solrClient = createStandaloneSolrClient(); 
    } 

    return solrClient; 
    } 

    private SolrClient createEmbeddedSolrClient() { 
    final String solrConfigurationFolder = this.solrProperties.getSolr().getHome(); 

    final EmbeddedSolrServerFactoryBean factoryBean = new EmbeddedSolrServerFactoryBean(); 
    factoryBean.setSolrHome(solrConfigurationFolder); 

    return factoryBean.getSolrClient(); 
    } 

    private SolrClient createStandaloneSolrClient() { 
    final String solrUrl = this.solrProperties.getHost(); 

    return new HttpSolrClient(solrUrl); 
    } 
} 

Wie Sie sehen können, erstelle ich basierend auf einigen Embeddedsolrclient oder Standaloneclient Eigenschaften festgelegt. Sie können es auf Profil basierend ändern (Autowire-Umgebung und nach Profil suchen)

+0

Vielen Dank, das hat mein Problem gelöst. –

Verwandte Themen