我如何使用部署在战争 Spring Boot 应用程序中的 mysql jdbc 驱动程序

     2023-03-25     187

关键词:

【中文标题】我如何使用部署在战争 Spring Boot 应用程序中的 mysql jdbc 驱动程序【英文标题】:How I can use the mysql jdbc driver deployed inside a war spring boot application 【发布时间】:2020-03-02 12:27:59 【问题描述】:

我使用 JPA 和 mysql 创建了一个 Spring Boot 应用程序。当我将应用程序部署为 jar 文件时,一切正常。如果我按照客户的要求将应用程序部署为 tomcat 8.0 上的 war 文件,则应用程序无法找到 jdbc 驱动程序,除非我将其放在 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 引用位于war 文件中的jdbc 驱动程序? 我的 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>

【问题讨论】:

您正在自己配置数据源。让 Spring Boot 为你做这件事。此外,DriverManagerDataSource 并不是真正用于生产,因为它不是连接池。所以放弃你的DataSource bean 定义(删除@Bean 方法)并将所需的spring.datasource.* 属性添加到application.properties 并重新启动你的应用程序。 【参考方案1】:

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

    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 应用程序战争部署到 AWS Elastic Beanstalk?

】如何将SpringBoot应用程序战争部署到AWSElasticBeanstalk?【英文标题】:HowtodeploySpringBootapplicationwartoAWSElasticBeanstalk?【发布时间】:2015-09-0701:55:01【问题描述】:之前有人问过类似的问题,但我看到的所有答案都是“它只是有效!... 查看详情

在tomcat 8上部署战争时未加载Spring Boot应用程序

】在tomcat8上部署战争时未加载SpringBoot应用程序【英文标题】:Springbootappnotloadingwhendeployingwarontomcat8【发布时间】:2017-12-1721:03:58【问题描述】:这是我的build.gradlepluginsid\'net.ltgt.apt\'version\'0.10\'id\'org.springframework.boot\'version\'1.5.4. 查看详情

如何使用 Tomcat 部署(和访问)Spring Boot 战争? (使用入门指南)

】如何使用Tomcat部署(和访问)SpringBoot战争?(使用入门指南)【英文标题】:Howtodeploy(andaccess)SpringBootwarwithTomcat?(usingGettingstartedguide)【发布时间】:2015-03-2723:52:51【问题描述】:如何创建(和访问)基于ServingWebContentwithSpringMV... 查看详情

Tomcat中的spring-boot应用程序战争部署,现有的spring web应用程序失败

...描述】:在我的tomcat中包含现有的springWeb应用程序(它不使用springboot),现在我开发了新的应用程序使用springboot,当我部 查看详情

为 Spring Boot 应用程序生成战争

...。最终目标是下载此文件,构建一个.war文件,然后将其部署到我的tomcat服务器。我已将以下内容添加到build.gradle应用插件:“战争 查看详情

Spring boot --> 在战争部署期间动态添加 jars(不是在战争生成期间)

】Springboot-->在战争部署期间动态添加jars(不是在战争生成期间)【英文标题】:Springboot-->Addjarsdynamicallyduringwardeployment(notduringwargeneration)【发布时间】:2019-02-1310:31:00【问题描述】:我已经删除了嵌入式tomcat并生成了战争... 查看详情

如何在 OpenShift 上部署多模块 maven spring boot 应用程序

】如何在OpenShift上部署多模块mavenspringboot应用程序【英文标题】:Howtodeploymulti-modulemavenspringbootapplicationonOpenShift【发布时间】:2016-12-3010:47:03【问题描述】:我有一个多模块spring-boot项目,我想在Openshift上部署它,我也在那里安... 查看详情

如何在 Spring Boot 中使用 Tomcat JNDI JDBC 数据源

】如何在SpringBoot中使用TomcatJNDIJDBC数据源【英文标题】:HowdoyouuseaTomcatJNDIJDBCdatasourceinSpringBoot【发布时间】:2014-04-0119:52:00【问题描述】:我有一个SpringBoot应用程序并希望作为WAR部署到Tomcat7。作为其中的一部分,我需要将配置... 查看详情

从 Spring Boot 项目部署战争

】从SpringBoot项目部署战争【英文标题】:deployingwarfromspringbootproject【发布时间】:2018-07-0513:52:55【问题描述】:我正在尝试基于spring-boot项目创建可部署的WAR,但是当我运行mvncleaninstall时出现以下异常嵌套异常是java.lang.IllegalArgu... 查看详情

在哪里以及如何免费部署 Java Spring Boot 应用程序? [关闭]

】在哪里以及如何免费部署JavaSpringBoot应用程序?[关闭]【英文标题】:WhereandhowtodeployaJavaSpringBootapplicationforfree?[closed]【发布时间】:2020-08-0721:28:32【问题描述】:我想知道在哪里以及如何部署使用SpringBoot构建的JavaWeb应用程序... 查看详情

部署在tomcat上的Spring Boot无法启动

...用程序。作为一个可执行的战争,它运行良好。由于我将使用AngularJ作为前端,因此将Spring项目放在可执行jar中并不是很实用,因为我将在浏览器中进行调试并希望能够快速编辑js源文 查看详情

如何在外部 tomcat 中部署 Spring-boot REST API

】如何在外部tomcat中部署Spring-bootRESTAPI【英文标题】:HowtodeploySpring-bootRESTAPIinexternaltomcat【发布时间】:2017-11-2301:31:51【问题描述】:我有一个没有任何网页的Spring-bootgradle应用程序。这个应用程序有RESTapi,当我将它作为Springboo... 查看详情

当部署在外部服务器上作为战争时,spring boot 是使用外部服务器还是嵌入式服务器?

】当部署在外部服务器上作为战争时,springboot是使用外部服务器还是嵌入式服务器?【英文标题】:Doesspringbootusesexternalserver,orembeddedserverwhendeployedonexternalserveraswar?【发布时间】:2020-08-2013:12:32【问题描述】:我知道如果我们想... 查看详情

如何在tomcat服务器上部署spring boot web应用

】如何在tomcat服务器上部署springbootweb应用【英文标题】:Howtodeployspringbootwebapplicationontomcatserver【发布时间】:2016-04-0301:57:19【问题描述】:我已经创建了SpringBootWeb应用程序,但我无法在tomcat上部署SpringBootWeb应用程序WAR文件,... 查看详情

如何使用spring dev工具在docker中自动重新加载spring boot应用程序

】如何使用springdev工具在docker中自动重新加载springboot应用程序【英文标题】:Howtoautoreloadspringbootapplicationindockerusingspringdevtools【发布时间】:2017-02-2618:01:18【问题描述】:我按照link将我的应用程序直接部署到本地docker并对其进... 查看详情

如何在谷歌云中部署 Spring Boot 应用程序?

】如何在谷歌云中部署SpringBoot应用程序?【英文标题】:Howtodeployaspringbootappingooglecloud?【发布时间】:2020-11-2201:07:56【问题描述】:我正在尝试将JavaSpringBoot应用部署到GoogleCloud,但遇到了一些问题。我尝试了两种方法:https://cl... 查看详情

如何在 Eclipse 上调试远程部署的 Spring Boot 应用程序和 Maven

】如何在Eclipse上调试远程部署的SpringBoot应用程序和Maven【英文标题】:Howtodebugremotedeployedspringbootapp&mavenoneclipse【发布时间】:2015-05-2521:42:56【问题描述】:我已经在URL上的提供商服务器上部署了应用程序:http://my.domain.net/my-... 查看详情

Jboss7:Undertow Spring Boot 抛出 404

...为JBoss构建一个战争文件我的战争正在正确构建,我正在使用*-war.original作为JBoss的部署部署似乎很好但是当我调用控制器时,它会抛出404使用嵌入式服务器,它工 查看详情