001/*
002 * Copyright 2012-2018 the original author or authors.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *      http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017package org.springframework.boot.autoconfigure.solr;
018
019import java.util.Arrays;
020import java.util.Optional;
021
022import org.apache.solr.client.solrj.SolrClient;
023import org.apache.solr.client.solrj.impl.CloudSolrClient;
024import org.apache.solr.client.solrj.impl.HttpSolrClient;
025
026import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
027import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
028import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
029import org.springframework.boot.context.properties.EnableConfigurationProperties;
030import org.springframework.context.annotation.Bean;
031import org.springframework.context.annotation.Configuration;
032import org.springframework.util.StringUtils;
033
034/**
035 * {@link EnableAutoConfiguration Auto-configuration} for Solr 4.x.
036 *
037 * @author Christoph Strobl
038 * @since 1.1.0
039 */
040@Configuration
041@ConditionalOnClass({ HttpSolrClient.class, CloudSolrClient.class })
042@EnableConfigurationProperties(SolrProperties.class)
043public class SolrAutoConfiguration {
044
045        private final SolrProperties properties;
046
047        private SolrClient solrClient;
048
049        public SolrAutoConfiguration(SolrProperties properties) {
050                this.properties = properties;
051        }
052
053        @Bean
054        @ConditionalOnMissingBean
055        public SolrClient solrClient() {
056                this.solrClient = createSolrClient();
057                return this.solrClient;
058        }
059
060        private SolrClient createSolrClient() {
061                if (StringUtils.hasText(this.properties.getZkHost())) {
062                        return new CloudSolrClient.Builder(Arrays.asList(this.properties.getZkHost()),
063                                        Optional.empty()).build();
064                }
065                return new HttpSolrClient.Builder(this.properties.getHost()).build();
066        }
067
068}