druid SpringBoot+Druid+JPA+H2 启动报错

ie3xauqp  于 2022-10-22  发布在  Druid
关注(0)|答案(6)|浏览(367)

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好像没有利用这个,而是直接拿的属性,是不是应该也利用一下这个?

dffbzjpn

dffbzjpn1#

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

xam8gpfp

xam8gpfp2#

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

gojuced7

gojuced73#

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

xzv2uavs

xzv2uavs4#

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

4smxwvx5

4smxwvx55#

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

tyg4sfes

tyg4sfes6#

OK,已经加上了

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

相关问题