我将spring boot添加到现有的webapp中。当我运行命令
java -jar -Denvironment.type=dev myfile.war
每件事都没事。但是如果我在tomcat上部署,由于某种原因会得到一个非常大的例外。
Failed to instantiate [javax.sql.DataSource]: Factory method 'dataSource' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath.
我正在使用mongodb,我的应用程序上下文中没有配置任何数据源。我还扩展了SpringBootServletInitializer
@SpringBootApplication
public class AdminApp extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(AdminApp.class);
}
public static void main(String[] args) {
SpringApplication.run(AdminApp.class, args);
}
}
任何线索是什么?
我的属性文件
database.url=localhost
database.port=27017
database.name=dbname
database.username=admin
database.password=admin
更新:我也有这个类说明应该使用哪个属性文件。
@Configuration
@PropertySource("classpath:application-${environment.type}.properties")
public class PropertyWithJavaConfig {
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
答案 0 :(得分:0)
DataSourceProperties.getDriverClassName()方法中引发错误。在弹簧分布中找到相同的源代码:
if (!StringUtils.hasText(driverClassName)) {
throw new BeanCreationException(
"Cannot determine embedded database driver class for database type "
+ this.embeddedDatabaseConnection
+ ". If you want an embedded "
+ "database please put a supported one on the classpath.");
}
当spring.datasource.driverClassName属性为空时,Spring会抛出此错误。因此,要修复此错误,请确保application.properties位于类路径中。
答案 1 :(得分:0)
所以,在对依赖关系进行了大量挖掘之后,我注意到我有spring-orm和spring-jdbc,即使我没有使用它。我删除了它们,一切都适用于嵌入式和本地tomcat。
但我仍然无法理解为什么之前只为嵌入式tomcat工作。