提问者:小点点

Spring启动战争文件在雄猫上不起作用


我在现有的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();
}

}

共2个答案

匿名用户

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