Spring启动war文件在tomcat上不起作用

时间:2015-03-10 23:13:26

标签: java spring tomcat spring-boot

我将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();
}

}

2 个答案:

答案 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工作。