当我尝试在命令提示符下将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等文件中。
答案 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