Spring Boot + Flyway + AWS: вызвано: java.sql.SQLException: подходящего драйвера не найдено

Я получаю это, кроме AWS Elastic Beanstalk, но приложение работает локально.

01-Aug-2018 07:44:54.815 SEVERE [localhost-startStop-1] org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start: 
 org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.api.FlywayException: Unable to obtain Jdbc connection from DataSource
Caused by: org.flywaydb.core.api.FlywayException: Unable to obtain Jdbc connection from DataSource
Caused by: java.sql.SQLException: No suitable driver found for jdbc:mysql://d-use1-xx.xxxxxxxxxxx.us-east-1.rds.amazonaws.com:3306/xxxxxxxxxxx

URL-адрес JDBC указан правильно. У меня это в file.war/WEB-INF/classes/application.properties

spring.datasource.url = jdbc:mysql://d-use1-xx.xxxxxxxxxx.us-east-1.rds.amazonaws.com:3306/xxxxxxxxx
spring.datasource.username = xxxx
spring.datasource.password = xxxxxxxxx

У меня есть \WEB-INF\lib\mysql-connector-java-5.1.46.jar в файле WAR.

Я не знаю, имеет ли это значение, но недавно я добавил JDBC TokenStore для Spring Security OAuth2 и добавил его в основной класс.

@SpringBootApplication
@MapperScan("com.xxxxxx.xxxxxx.mapper")
public class XxxxxxxxxxxxApplication extends SpringBootServletInitializer {

    @Bean(name = "OAuth")
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource secondaryDataSource() {
        return DataSourceBuilder.create().build();
    }

Я не знаю, имеет ли это значение (никогда раньше не было), но была установлена ​​пустая переменная среды

01-Aug-2018 07:44:38.290 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -DJDBC_CONNECTION_STRING=

добавьте конфигурацию вашего пролетного пути && версию mysql, о которой идет речь

GolamMazid Sajib 01.08.2018 18:13

Я использую Spring Boot. Конфигурации пролетного пути нет. См. flywaydb.org/documentation/plugins/springboot. Мой локальный MySQL - mysql Ver 15.1 Distrib 10.1.30-MariaDB. AWS DB - это MySQL 5.6.39.

Chloe 01.08.2018 18:20

Единственная настройка Flyway в моем application.properties - это flyway.baselineOnMigrate = true.

Chloe 01.08.2018 18:40
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
736
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я смог исправить это, установив переменную среды

SPRING_DATASOURCE_DRIVER_CLASS_NAME=com.mysql.jdbc.Driver

В какой AWS превращается

01-Aug-2018 17:01:03.505 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -DSPRING_DATASOURCE_DRIVER_CLASS_NAME=com.mysql.jdbc.Driver

Не знаю, зачем ему вдруг понадобилась эта собственность. Я использую flyway-core-3.2.1.jar. Я не указывал версию в https://flywaydb.org/documentation/plugins/springboot, так что она подхватила.

Ответ принят как подходящий

Вам необходимо добавить свойство конфигурации spring.datasource.driver-class-name:

spring.datasource.driver-class-name = com.mysql.jdbc.Driver

Автоматическая загрузка драйвера JDBC работает только для драйверов в исходном (системном) пути к классу приложения, но драйверы, расположенные в WEB-INF/lib, добавляются в путь класса контекста позже и не могут быть загружены автоматически.

Это означает, что вам нужно явно загрузить их, что и делает Spring Boot, если вы укажете spring.datasource.driver-class-name (или переменную среды SPRING_DATASOURCE_DRIVER_CLASS_NAME, как вы выяснили).

Другие вопросы по теме