diff --git a/spring-boot-docs/src/main/asciidoc/howto.adoc b/spring-boot-docs/src/main/asciidoc/howto.adoc index 3501c8f16ae..0696db8b4cc 100644 --- a/spring-boot-docs/src/main/asciidoc/howto.adoc +++ b/spring-boot-docs/src/main/asciidoc/howto.adoc @@ -1881,6 +1881,27 @@ bean. +[[howto-configure-a-component-that-is-used-by-JPA]] +=== Configure a component that is used by JPA +If you want to configure a component that will be used by JPA then you need to ensure +that the component is initialized before JPA. Where the component is auto-configured +Spring Boot will take care of this for you. For example, when Flyway is auto-configured, +Hibernate is configured to depend upon Flyway so that the latter has a chance to +initialize the database before Hibernate tries to use it. + +If you are configuring a component yourself, you can use an +`EntityManagerFactoryDependsOnPostProcessor` subclass as a convenient way of setting up +the necessary dependencies. For example, if you are using Hibernate Search with +Elasticsearch as its index manager then any `EntityManagerFactory` beans must be +configured to depend on the `elasticsearchClient` bean: + +[source,java,indent=0] +---- +include::{code-examples}/elasticsearch/HibernateSearchElasticsearchExample.java[tag=configuration] +---- + + + [[howto-database-initialization]] == Database initialization An SQL database can be initialized in different ways depending on what your stack is. Or diff --git a/spring-boot-docs/src/main/java/org/springframework/boot/elasticsearch/HibernateSearchElasticsearchExample.java b/spring-boot-docs/src/main/java/org/springframework/boot/elasticsearch/HibernateSearchElasticsearchExample.java new file mode 100644 index 00000000000..58f8b9a4854 --- /dev/null +++ b/spring-boot-docs/src/main/java/org/springframework/boot/elasticsearch/HibernateSearchElasticsearchExample.java @@ -0,0 +1,48 @@ +/* + * Copyright 2012-2016 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.elasticsearch; + +import javax.persistence.EntityManagerFactory; + +import org.springframework.boot.autoconfigure.data.jpa.EntityManagerFactoryDependsOnPostProcessor; +import org.springframework.context.annotation.Configuration; + +/** + * Example configuration for configuring Hibernate to depend on Elasticsearch so that + * Hibernate Search can use Elasticsearch as its index manager. + * + * @author Andy Wilkinson + */ +public class HibernateSearchElasticsearchExample { + + // tag::configuration[] + /** + * {@link EntityManagerFactoryDependsOnPostProcessor} that ensures that + * {@link EntityManagerFactory} beans depend on the {@code elasticsearchClient} bean. + */ + @Configuration + static class ElasticsearchJpaDependencyConfiguration + extends EntityManagerFactoryDependsOnPostProcessor { + + ElasticsearchJpaDependencyConfiguration() { + super("elasticsearchClient"); + } + + } + // end::configuration[] + +}