Spring boot 如何使用部署在war spring引导应用程序中的mysql jdbc驱动程序

Spring boot 如何使用部署在war spring引导应用程序中的mysql jdbc驱动程序,spring-boot,tomcat,web-deployment,Spring Boot,Tomcat,Web Deployment,我使用JPA和mysql创建了一个spring引导应用程序。当我将应用程序部署为jar文件时,一切正常。如果我按照客户的要求将应用程序作为war文件部署到tomcat 8.0上,则除非我将其放在tomcat_HOME/lib目录中,否则应用程序无法找到jdbc驱动程序。我的客户不知道如何将驱动程序放入TOMCAT_HOME/lib。我得到这个错误: Caused by: java.sql.SQLException: No suitable driver found for jdbc:mysql:

我使用JPA和mysql创建了一个spring引导应用程序。当我将应用程序部署为jar文件时,一切正常。如果我按照客户的要求将应用程序作为war文件部署到tomcat 8.0上,则除非我将其放在tomcat_HOME/lib目录中,否则应用程序无法找到jdbc驱动程序。我的客户不知道如何将驱动程序放入TOMCAT_HOME/lib。我得到这个错误:

Caused by: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/database_name
    at java.sql.DriverManager.getConnection(DriverManager.java:689)
    at java.sql.DriverManager.getConnection(DriverManager.java:208)
    at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:154)
    at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:145)
    at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:205)
    at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:169)
    at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122)
    at org.hibernate.internal.NonContextualJdbcConnectionAccess.obtainConnection(NonContextualJdbcConnectionAccess.java:35)
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:106)
    ... 65 more
有没有办法让tomcat引用war文件中的jdbc驱动程序? 我的pom.xml文件具有以下依赖项

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

mysql
mysql连接器java
运行时


org.springframework.boot
弹簧启动机tomcat
假如
javax.servlet
javax.servlet-api
3.1.0
假如

我找到了错误的来源。我在没有指定驱动程序类的情况下手动初始化了数据源

    final DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setUrl(env.getProperty("spring.datasource.url"));
    dataSource.setUsername(env.getProperty("spring.datasource.username"));
    dataSource.setPassword(env.getProperty("spring.datasource.password"));
    return dataSource;
有效的代码是:

    final DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setUrl(env.getProperty("spring.datasource.url"));
    dataSource.setUsername(env.getProperty("spring.datasource.username"));
    dataSource.setPassword(env.getProperty("spring.datasource.password"));
    dataSource.setDriverClassName(env.getProperty("spring.datasource.driver-class-name"));
    return dataSource;

您正在自己配置数据源。让Spring Boot为您做到这一点。另外,
drivermanagedatasource
并不是真正用于生产的,因为它不是一个连接池。因此,放弃
DataSource
bean定义(删除
@bean
方法),将所需的
spring.DataSource.*
属性添加到
application.properties
并重新启动应用程序。
    final DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setUrl(env.getProperty("spring.datasource.url"));
    dataSource.setUsername(env.getProperty("spring.datasource.username"));
    dataSource.setPassword(env.getProperty("spring.datasource.password"));
    dataSource.setDriverClassName(env.getProperty("spring.datasource.driver-class-name"));
    return dataSource;