alibaba / druid

阿里云计算平台DataWorks(https://help.aliyun.com/document_detail/137663.html) 团队出品,为监控而生的数据库连接池
https://github.com/alibaba/druid/wiki
Apache License 2.0
27.9k stars 8.57k forks source link

SpringBoot+Druid+JPA+H2 启动报错 #1929

Open beihaifeiwu opened 7 years ago

beihaifeiwu commented 7 years ago

DataSourceProperties 有一系列的determineXXX方法,Spring的DataSourceAutoConfiguration会利用这个去检测类路径下的H2这种可以内嵌运行的数据库,所以在不提供spring.datasource.xxx属性时,DataSource也是会被自动配置的:

    public String determineUrl() {
        if (StringUtils.hasText(this.url)) {
            return this.url;
        }
        String url = this.embeddedDatabaseConnection.getUrl(determineDatabaseName());
        if (!StringUtils.hasText(url)) {
            throw new DataSourceBeanCreationException(this.embeddedDatabaseConnection,
                    this.environment, "url");
        }
        return url;
    }

    public String determineDriverClassName() {
        if (StringUtils.hasText(this.driverClassName)) {
            Assert.state(driverClassIsLoadable(),
                    "Cannot load driver class: " + this.driverClassName);
            return this.driverClassName;
        }
        String driverClassName = null;

        if (StringUtils.hasText(this.url)) {
            driverClassName = DatabaseDriver.fromJdbcUrl(this.url).getDriverClassName();
        }

        if (!StringUtils.hasText(driverClassName)) {
            driverClassName = this.embeddedDatabaseConnection.getDriverClassName();
        }

        if (!StringUtils.hasText(driverClassName)) {
            throw new DataSourceBeanCreationException(this.embeddedDatabaseConnection,
                    this.environment, "driver class");
        }
        return driverClassName;
    }

Druid好像没有利用这个,而是直接拿的属性,是不是应该也利用一下这个?

lihengming commented 7 years ago

这个方法是通过URL推测出DriverClassName,Druid提供的有的。

beihaifeiwu commented 7 years ago

但是Spring的并不需要设置URL,可以根据类路径中存在的Class推断出URL

lihengming commented 7 years ago

那也仅限于内存数据库H2这种,其他数据库URL是必须设置的,个人感觉没人会连URL都不设置吧...那个默认的URL仅限于Demo用吧,一般就算用内存数据库也会指定db文件的存储位置吧。

beihaifeiwu commented 7 years ago

我这个就是一个测试项目。。。

lihengming commented 7 years ago

先设置一个URL吧,不要太懒啦,必填项也就那一个,嘿嘿,我看看 有必要的话给加上~

beihaifeiwu commented 7 years ago

OK,已经加上了

spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.username=sa
spring.datasource.password=