Cause: org.apache.ibatis.datasource.DataSourceException: Unknown DataSource property:XXX

今天配置完mybatis写好测试代码后遇坑:

Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: 
### Error building SqlSession.
### The error may exist in SQL Mapper Configuration
### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.datasource.DataSourceException: Unknown DataSource property: userName
	at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:23)
	at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:79)
	at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:63)
	at com.caijiyuan.util.GetSqlSession.createSqlSession(GetSqlSession.java:22)
	at com.caijiyuan.util.GetSqlSession.main(GetSqlSession.java:33)
Caused by: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.datasource.DataSourceException: Unknown DataSource property: userName
	at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:106)
	at org.apache.ibatis.builder.xml.XMLConfigBuilder.parse(XMLConfigBuilder.java:89)
	at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:77)
	... 3 more
Caused by: org.apache.ibatis.datasource.DataSourceException: Unknown DataSource property: userName
	at org.apache.ibatis.datasource.unpooled.UnpooledDataSourceFactory.setProperties(UnpooledDataSourceFactory.java:51)
	at org.apache.ibatis.builder.xml.XMLConfigBuilder.dataSourceElement(XMLConfigBuilder.java:270)
	at org.apache.ibatis.builder.xml.XMLConfigBuilder.environmentsElement(XMLConfigBuilder.java:228)
	at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:101)
	... 5 more

问题可以定位到mybatis-config.xml配置文件的dataSource下的userName与userPassword的property的这两句,这两句的name属性的值出了问题,奇怪的是另两个property的name属性却没问题
在这里插入图片描述
原来,在mybatis的数据源配置中,name 属性指定了数据源的属性名,value 属性接收该property的值。这些name属性名是特定的,需要与数据源实现所期望的属性名一致,才能正确地配置数据源而不报错。也就是说name属性的名不是自定义的是由数据源实现库(例如连接池库)所定义的。不同的数据源实现可能有不同的属性名要求,比如驱动程序类名、连接字符串、用户名、密码等,name 属性的值必须与你所使用的数据源实现所期望的属性名一致,才能正确地配置数据源。

一些常见的属性名
driver: 数据库驱动程序的类名或别名。
url: 数据库连接字符串。
username: 数据库用户名。
password: 数据库密码。
maxActive 或 maximumPoolSize: 数据源的最大活动连接数。
initialSize: 数据源的初始连接数。
minIdle 或 minimumIdle: 数据源的最小空闲连接数。
maxIdle 或 maximumIdle: 数据源的最大空闲连接数。
connectionTimeout: 连接超时时间。
idleTimeout: 连接空闲超时时间。
validationQuery: 用于验证连接的 SQL 查询语句。
testOnBorrow: 获取连接时是否执行验证查询。
testWhileIdle: 连接空闲时是否执行验证查询。

但具体取决于所使用的数据源实现库,如果你使用了不正确的属性名,数据源实现库可能无法识别或解析这些属性,从而导致报错。如果使用的是特定的数据源实现库(例如 Apache Commons DBCP、HikariCP 等),可以查阅相关文档或示例代码,了解该库所期望的属性名和配置方式。
因此在代码一个将两个name属性名改为:
在这里插入图片描述
就不会报错了

猜你喜欢

转载自blog.csdn.net/Tommy_Nike/article/details/132835462