今天配置完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属性名改为:
就不会报错了