我在现有的webapp中添加了Spring Boot。当我运行命令时
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,并且我没有在我的应用程序上下文中配置任何数据源。我还扩展了SpringBootServlet初始化器
@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();
}
}
DataSourceProperties中引发了错误。getDriverClassName()方法。下面是Spring分布的源代码:
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 . data source . driver class name属性为空时,spring会引发此错误。因此,要修复这个错误,请确保application.properties在类路径中。
因此,在深入研究了依赖关系之后,我注意到我有spring-orm和spring-jdbc,尽管我没有使用。我删除了它们,对于嵌入式和本地tomcat来说一切都很好。
但我仍然无法理解为什么以前只为嵌入式tomcat工作。