代码之家  ›  专栏  ›  技术社区  ›  Chloe

Spring Boot+Flyway+AWS:原因:java.sql.sqlException:找不到合适的驱动程序

  •  1
  • Chloe  · 技术社区  · 6 年前

    我得到这个,除了在AWS弹性豆茎,但应用程序在本地工作。

    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
    

    正确指定了JDBC URL。我有这个 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 在战争档案中。

    我不知道这是否重要,但我最近为SpringSecurityOAuth2添加了一个JDBC令牌存储,并在主类中添加了它。

    @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();
        }
    

    我不知道它是否重要(以前从未发生过),但有一个空的环境变量集

    2018年8月1日07:44:38.290 info[main]org.apache.catalina.startup.versionloggerlistener.log命令行参数:-djdbc_connection_string=

    2 回复  |  直到 6 年前
        1
  •  0
  •   Mark Rotteveel    6 年前

    您需要添加 spring.datasource.driver-class-name 配置属性:

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

    JDBC自动驱动程序加载仅适用于应用程序的初始(系统)类路径上的驱动程序,但位于 WEB-INF/lib 稍后添加到上下文类路径,无法自动加载。

    这意味着您需要显式地加载它们,如果您指定的话,这就是Spring引导所做的。 spring.datasource.driver类名称 (或环境变量 SPRING_DATASOURCE_DRIVER_CLASS_NAME 如你所知)。

        2
  •  0
  •   Chloe    6 年前

    我可以通过设置环境变量来修复它

    SPRING_DATASOURCE_DRIVER_CLASS_NAME=com.mysql.jdbc.Driver
    

    自动焊接系统变成

    2018年8月1日17:01:03.505 info[main]org.apache.catalina.startup.versionloggerlistener.log命令行参数:-dspring_datasource_driver_class_name=com.mysql.jdbc.driver

    我不知道为什么它突然需要那个财产。我正在使用 flyway-core-3.2.1.jar . 我没有在中指定版本 https://flywaydb.org/documentation/plugins/springboot 这就是它所得到的。