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 не получилось.
Ответ Алексея ниже про черную магию прочитал, но пока не осознал.
Это черная магия 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