Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring Boot app won't start after upgrade from SB 2.2.7 to SB 2.3.0

I use Java 8, Spring Boot and Hibernate Search and it looks like the app startup stops at Lucene index initialization. Tried to use index files previously built with SB 2.2.7 and no success. Also tried to remove all files made by Lucene and give it a fresh start but no success. Although I put everything in a trace log level, nothing came up in log that could help to find out what's going on.

Please see pom.xml and last few log lines below. If needed, I can provide complete trace log.

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project
    xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.thevegcat</groupId>
    <artifactId>TheVegCat</artifactId>
    <version>0.4.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>The Vegan Catalog</name>
    <description>The Best World Vegan Catalog by H.Lo</description>

    <developers>
        <developer>
            <id>HLo</id>
            <name>Hrvoje Lončar</name>
            <email>[email protected]</email>
        </developer>
    </developers>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.0.RELEASE</version>
        <relativePath />
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <hibernate.version>5.4.16.Final</hibernate.version>
        <groovy-all.version>3.0.4</groovy-all.version>
        <junit-jupiter.version>5.6.2</junit-jupiter.version>
        <tika-core.version>1.24.1</tika-core.version>
        <jsoup.version>1.13.1</jsoup.version>
        <hibernate-search-orm.version>5.11.5.Final</hibernate-search-orm.version>
        <opencsv.version>5.2</opencsv.version>
        <org.eclipse.jdt.annotation.version>2.2.400</org.eclipse.jdt.annotation.version>
        <jacoco.version>0.8.5</jacoco.version>
        <junit-platform-surefire-provider.version>1.3.2</junit-platform-surefire-provider.version>
        <commons-io.version>2.6</commons-io.version>
        <urlrewritefilter.version>4.0.4</urlrewritefilter.version>
        <json-simple.version>1.1.1</json-simple.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>jakarta.validation</groupId>
            <artifactId>jakarta.validation-api</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>${groovy-all.version}</version>
            <type>pom</type>
            <exclusions>
                <exclusion>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
           <groupId>org.hibernate</groupId>
           <artifactId>hibernate-search-orm</artifactId>
           <version>${hibernate-search-orm.version}</version>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>${commons-io.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.tika</groupId>
            <artifactId>tika-core</artifactId>
            <version>${tika-core.version}</version>
        </dependency>

        <dependency>
            <groupId>org.thymeleaf.extras</groupId>
            <artifactId>thymeleaf-extras-springsecurity5</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>javax.persistence-api</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <dependency>
            <groupId>org.tuckey</groupId>
            <artifactId>urlrewritefilter</artifactId>
            <version>${urlrewritefilter.version}</version>
        </dependency>

        <dependency>
            <groupId>org.eclipse.jdt</groupId>
            <artifactId>org.eclipse.jdt.annotation</artifactId>
            <version>${org.eclipse.jdt.annotation.version}</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>${jsoup.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>io.rest-assured</groupId>
            <artifactId>rest-assured</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-launcher</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-junit-jupiter</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.opencsv</groupId>
            <artifactId>opencsv</artifactId>
            <version>${opencsv.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.googlecode.json-simple</groupId>
            <artifactId>json-simple</artifactId>
            <version>${json-simple.version}</version>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>

        <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <dependencies>

                    <dependency>
                        <groupId>org.junit.platform</groupId>
                        <artifactId>junit-platform-surefire-provider</artifactId>
                        <version>${junit-platform-surefire-provider.version}</version>
                    </dependency>

                </dependencies>
            </plugin>

            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>${jacoco.version}</version>
                <executions>

                    <execution>
                        <id>prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>

                    <execution>
                        <id>report</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>

                    <execution>
                        <id>post-unit-test</id>
                        <phase>test</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                        <configuration>
                            <dataFile>target/jacoco.exec</dataFile>
                            <outputDirectory>target/jacoco-ut</outputDirectory>
                        </configuration>
                    </execution>

                </executions>
                <configuration>
                    <systemPropertyVariables>
                        <jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>
                    </systemPropertyVariables>
                </configuration>
            </plugin>

        </plugins>

    </build>

</project>

Last few lines from log:

DEBUG org.hibernate.type.EnumType                                                                          Using NAMED-based conversion for Enum com.thevegcat.app.config.UserRole
TRACE org.hibernate.engine.jdbc.env.internal.NormalizingIdentifierHelperImpl                               Normalizing identifier quoting for object name [veg_user]
TRACE org.hibernate.engine.jdbc.env.internal.NormalizingIdentifierHelperImpl                               Rendering unquoted identifier [veg_user] in lower case for use in DatabaseMetaData
TRACE org.hibernate.engine.jdbc.env.internal.NormalizingIdentifierHelperImpl                               Normalizing identifier quoting for object name [id]
TRACE org.hibernate.engine.jdbc.env.internal.NormalizingIdentifierHelperImpl                               Rendering unquoted identifier [id] in lower case for use in DatabaseMetaData
TRACE org.hibernate.engine.jdbc.env.internal.NormalizingIdentifierHelperImpl                               Normalizing identifier quoting for object name [date_created]
TRACE org.hibernate.engine.jdbc.env.internal.NormalizingIdentifierHelperImpl                               Rendering unquoted identifier [date_created] in lower case for use in DatabaseMetaData
TRACE org.hibernate.engine.jdbc.env.internal.NormalizingIdentifierHelperImpl                               Normalizing identifier quoting for object name [date_last_update]
TRACE org.hibernate.engine.jdbc.env.internal.NormalizingIdentifierHelperImpl                               Rendering unquoted identifier [date_last_update] in lower case for use in DatabaseMetaData
TRACE org.hibernate.engine.jdbc.env.internal.NormalizingIdentifierHelperImpl                               Normalizing identifier quoting for object name [failed_login_attempts]
TRACE org.hibernate.engine.jdbc.env.internal.NormalizingIdentifierHelperImpl                               Rendering unquoted identifier [failed_login_attempts] in lower case for use in DatabaseMetaData
TRACE org.hibernate.engine.jdbc.env.internal.NormalizingIdentifierHelperImpl                               Normalizing identifier quoting for object name [name]
TRACE org.hibernate.engine.jdbc.env.internal.NormalizingIdentifierHelperImpl                               Rendering unquoted identifier [name] in lower case for use in DatabaseMetaData
TRACE org.hibernate.engine.jdbc.env.internal.NormalizingIdentifierHelperImpl                               Normalizing identifier quoting for object name [note]
TRACE org.hibernate.engine.jdbc.env.internal.NormalizingIdentifierHelperImpl                               Rendering unquoted identifier [note] in lower case for use in DatabaseMetaData
TRACE org.hibernate.engine.jdbc.env.internal.NormalizingIdentifierHelperImpl                               Normalizing identifier quoting for object name [password]
TRACE org.hibernate.engine.jdbc.env.internal.NormalizingIdentifierHelperImpl                               Rendering unquoted identifier [password] in lower case for use in DatabaseMetaData
TRACE org.hibernate.engine.jdbc.env.internal.NormalizingIdentifierHelperImpl                               Normalizing identifier quoting for object name [phone]
TRACE org.hibernate.engine.jdbc.env.internal.NormalizingIdentifierHelperImpl                               Rendering unquoted identifier [phone] in lower case for use in DatabaseMetaData
TRACE org.hibernate.engine.jdbc.env.internal.NormalizingIdentifierHelperImpl                               Normalizing identifier quoting for object name [status]
TRACE org.hibernate.engine.jdbc.env.internal.NormalizingIdentifierHelperImpl                               Rendering unquoted identifier [status] in lower case for use in DatabaseMetaData
DEBUG org.hibernate.type.EnumType                                                                          Using NAMED-based conversion for Enum com.thevegcat.app.user.User$Status
TRACE org.hibernate.engine.jdbc.env.internal.NormalizingIdentifierHelperImpl                               Normalizing identifier quoting for object name [time_zone_id]
TRACE org.hibernate.engine.jdbc.env.internal.NormalizingIdentifierHelperImpl                               Rendering unquoted identifier [time_zone_id] in lower case for use in DatabaseMetaData
TRACE org.hibernate.engine.jdbc.env.internal.NormalizingIdentifierHelperImpl                               Normalizing identifier quoting for object name [username]
TRACE org.hibernate.engine.jdbc.env.internal.NormalizingIdentifierHelperImpl                               Rendering unquoted identifier [username] in lower case for use in DatabaseMetaData
TRACE org.hibernate.service.internal.AbstractServiceRegistryImpl                                           Initializing service [role=org.hibernate.engine.transaction.jta.platform.spi.JtaPlatform]
INFO  org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator                          HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
DEBUG org.hibernate.query.spi.NamedQueryRepository                                                         Checking 0 named HQL queries
DEBUG org.hibernate.query.spi.NamedQueryRepository                                                         Checking 0 named SQL queries
TRACE org.hibernate.search.util.configuration.impl.MaskedProperty                                          found a match for key: [hibernate.search.default.directory_provider] value: filesystem
TRACE org.hibernate.search.util.configuration.impl.MaskedProperty                                          found a match for key: [default.directory_provider] value: filesystem
TRACE org.hibernate.search.util.configuration.impl.MaskedProperty                                          found a match for key: [hibernate.search.default.indexBase] value: F:/storage/lucene
TRACE org.hibernate.search.util.configuration.impl.MaskedProperty                                          found a match for key: [default.indexBase] value: F:/storage/lucene
INFO  org.hibernate.search.store.impl.DirectoryProviderHelper                                              HSEARCH000041: Index directory not found, creating: 'F:\storage\lucene\com.thevegcat.app.manufacturer.Manufacturer'
DEBUG org.hibernate.search.store.impl.DirectoryProviderHelper                                              Initialize index: 'F:\storage\lucene\com.thevegcat.app.manufacturer.Manufacturer'
DEBUG org.hibernate.search.backend.impl.lucene.WorkspaceFactory                                            Starting workspace for index com.thevegcat.app.manufacturer.Manufacturer using an exclusive index strategy
DEBUG org.hibernate.search.backend.impl.lucene.SyncWorkProcessor                                           HSEARCH000230: Starting sync consumer thread for index 'com.thevegcat.app.manufacturer.Manufacturer'
DEBUG org.hibernate.search.backend.impl.lucene.WorkspaceHolder                                             HSEARCH000235: Backend for index 'com.thevegcat.app.manufacturer.Manufacturer' started: using a Synchronous batching backend.
WARN  org.hibernate.search.indexes.impl.LuceneEmbeddedIndexFamilyImpl                                      HSEARCH000075: Configuration setting hibernate.search.lucene_version was not specified: using LUCENE_CURRENT.
DEBUG org.hibernate.annotations.common.util.StandardClassLoaderDelegateImpl                                Unable to locate Class [com.thevegcat.app.manufacturer.package-info] using TCCL, falling back to HCANN ClassLoader
DEBUG org.hibernate.search.engine.metadata.impl.AnnotationMetadataProvider                                 package-info not found for package 'com.thevegcat.app.manufacturer'

1 Answers

As of Spring Boot 2.3.0, the default BootstrapMode for JPA repositories is now "deferred" to improve startup time.

Unfortunately we've discovered that this can have side-effects with Hibernate Search; there's an opened issue against Spring Framework that looks very similar to your project. Feel free to subscribe to this issue for further updates.

In the meantime, you can revert to the previous default with the following configuration property:

spring.data.jpa.repositories.bootstrap-mode=default

I'm sorry you ran into this problem - let's hope the rest of your upgrade experience will be flawless!

like image 174
Brian Clozel Avatar answered Sep 05 '25 00:09

Brian Clozel