Как я могу использовать драйвер mysql jdb c, развернутый в загрузочном приложении war spring - PullRequest
0 голосов
/ 02 марта 2020

Я создал приложение весенней загрузки с использованием JPA и mysql. При развертывании приложения в виде файла JAR все работает нормально. Если я разверну приложение в виде файла war на tomcat 8.0 по требованию моего клиента, приложение не сможет найти драйвер jdb c, если я не помещу его в каталог TOMCAT_HOME / lib. Мой клиент не знает, что добавить драйвер в 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 ссылаться на драйвер jdb c, расположенный в файле war? Мой файл pom. xml имеет следующие зависимости

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

...

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-tomcat</artifactId>
   <scope>provided</scope>
</dependency>   


<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

1 Ответ

0 голосов
/ 02 марта 2020

Я нашел, откуда появилась ошибка. I Инициализировал источник данных вручную без указания класса драйвера

    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;
...