Top.Mail.Ru
Ответы

SpringBoot Gradle + Postgres. Ошибка при BootRun, хотя при публикации WAR всё в порядке

Привет!
Мне передали проект на SpringBoot (внутри lombok, mybatis, liquibase) + Gradle + Postgres.
Не могу понять, почему когда собираю WAR файл и устанавливаю его в Tomcat (драйвер Postgres подключил), то всё запускается нормально -- происходит подключение, создаются таблицы.

А если я пытаюсь запустить bootRun из Intellij Idea либо просто Application запустить, либо gradle bootRun из командной строки, то разваливается с ошибкой. Судя по всему, он не может создать подключение к БД. Но я тут полный ноль, не знаю, куда копать. Подскажите, пожалуйста

Трейс ниже.
Unsatisfied dependency expressed through bean property 'sqlSessionFactory';

nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [..../config/DatasourceConfig.class]: Bean instantiation via factory method failed;

nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception;

nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myBatisConfiguration' defined in class path resource [..../config/DatasourceConfig.class]: Bean instantiation via factory method failed;

nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.Configuration]: Factory method 'myBatisConfiguration' threw exception;

nested exception is org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration.
Cause: org.apache.ibatis.datasource.DataSourceException: There was an error configuring JndiDataSourceTransactionPool.
Cause: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial

Дополнен

Запустился с указанием внешнего Tomcat и Artifact exploded war. С обычным war не получилось.

Ответ Алексея ниже про черную магию прочитал, но пока не осознал.

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Мыслитель
6лет

Это черная магия spring boot.
Да, он запускает томкат, но за магию надо платить - jndi не включен.
Смотрим здесь vinayshivaswamy.blogspot.com / 2014/12/jndi-lookup-in-spring-boot.html
или здесь
stackoverflow.com / questions/24941829/how-to-create-jndi-context-in-spring-boot-with-embedded-tomcat-container/24944671#24944671

Источник: google: spring boot embedded tomcat jndi