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好像没有利用这个,而是直接拿的属性,是不是应该也利用一下这个?
6条答案
按热度按时间dffbzjpn1#
这个方法是通过URL推测出DriverClassName,Druid提供的有的。
xam8gpfp2#
但是Spring的并不需要设置URL,可以根据类路径中存在的Class推断出URL
gojuced73#
那也仅限于内存数据库H2这种,其他数据库URL是必须设置的,个人感觉没人会连URL都不设置吧...那个默认的URL仅限于Demo用吧,一般就算用内存数据库也会指定db文件的存储位置吧。
xzv2uavs4#
我这个就是一个测试项目。。。
4smxwvx55#
先设置一个URL吧,不要太懒啦,必填项也就那一个,嘿嘿,我看看 有必要的话给加上~
tyg4sfes6#
OK,已经加上了