将Springboot War部署到tomcat 8.5

时间:2018-10-16 16:39:12

标签: java spring maven spring-boot tomcat

当我尝试在命令提示符下将war文件部署到外部tomcat服务器时,我已经使用maven构建了spring boot war文件。我有一个例外。

在类路径资源[org / springframework / boot / devtools / autoconfigure / DevToolsDataSourceAutoConfiguration.class]中定义的名称为'inMemoryDatabaseShutdownExecutor'的bean创建时出错:通过方法'inMemoryDatabaseShutdownExecutor'参数0表示的依赖关系未满足;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建在类路径资源[org / springframework / boot / autoconfigure / jdbc / DataSourceConfiguration $ Hikari.class]中定义的名称为“ dataSource”的bean时出错:通过工厂方法进行Bean实例化失败;嵌套的异常是org.springframework.beans.BeanInstantiationException:无法实例化[com.zaxxer.hikari.HikariDataSource]:工厂方法'dataSource'引发了异常;嵌套异常为java.lang.IllegalStateException:无法加载驱动程序类:oracle.jdbc.OracleDriver

我正在使用两个application.properties文件,一个在src / main / resources中,它具有对Oracle的实际数据源配置,另一个在src / test / resources中,它具有内存数据库中H2的数据源。

请让我知道是否遗漏任何东西,例如将属性文件放置在Tomcat文件夹下的config等文件中。

3 个答案:

答案 0 :(得分:0)

我想您已经在src / main / java下的application.properties上将oracle.jdbc.OracleDriver设置为驱动程序类名称,对吗?您还记得在pom.xml上包含这种依赖关系吗?

<dependency>
      <groupId>com.oracle</groupId>
          <artifactId>ojdbc14</artifactId>
      <version>10.2.0.4.0</version>
</dependency>

修改

尝试将其添加到tomcat的context.xml:

  <Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource"
           maxTotal="100" maxIdle="30" maxWaitMillis="10000"
           username="xxx" password="xxx" driverClassName="oracle.jdbc.OracleDriver"
           url="jdbc:oracle:thin:@localhost:1521:xe"/>  

答案 1 :(得分:0)

好的,这的根本原因是我的war文件中没有oracle6 jar-即使我在pom.xml中添加了依赖项。

<dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc</artifactId>
            <version>6</version>
            <scope>system</scope>
            <systemPath>${basedir}/lib/ojdbc6.jar</systemPath>
        </dependency>

因此,我已将jar明确添加到我的Tomcat库中,并且可以正常工作。

答案 2 :(得分:0)

我使用下面的编程方式添加了数据源配置并且它起作用了,不知道为什么不能从 application.properties 中选择它。

@Configuration
public class DatasourceConfig {
@Bean
public DataSource datasource() {
    return DataSourceBuilder.create()
      .driverClassName("com.mysql.cj.jdbc.Driver")
      .url("jdbc:mysql://localhost:3306/test_db")
      .username("username")
      .password("password")
      .build(); 
   }
}

感谢 Baeldung 文章 here