001/*
002 * Copyright 2012-2016 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 org.apache.solr.client.solrj.SolrClient;
020import org.apache.solr.client.solrj.impl.CloudSolrClient;
021import org.apache.solr.client.solrj.impl.HttpSolrClient;
022
023import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
024import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
025import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
026import org.springframework.boot.context.properties.EnableConfigurationProperties;
027import org.springframework.context.annotation.Bean;
028import org.springframework.context.annotation.Configuration;
029import org.springframework.util.StringUtils;
030
031/**
032 * {@link EnableAutoConfiguration Auto-configuration} for Solr 4.x.
033 *
034 * @author Christoph Strobl
035 * @since 1.1.0
036 */
037@Configuration
038@ConditionalOnClass({ HttpSolrClient.class, CloudSolrClient.class })
039@EnableConfigurationProperties(SolrProperties.class)
040public class SolrAutoConfiguration {
041
042        private final SolrProperties properties;
043
044        private SolrClient solrClient;
045
046        public SolrAutoConfiguration(SolrProperties properties) {
047                this.properties = properties;
048        }
049
050        @Bean
051        @ConditionalOnMissingBean
052        public SolrClient solrClient() {
053                this.solrClient = createSolrClient();
054                return this.solrClient;
055        }
056
057        private SolrClient createSolrClient() {
058                if (StringUtils.hasText(this.properties.getZkHost())) {
059                        return new CloudSolrClient(this.properties.getZkHost());
060                }
061                return new HttpSolrClient(this.properties.getHost());
062        }
063
064}