最近在配置 Mybatis 时,使用外部 properties 文件配置数据库信息时出现异常:java.net.MalformedURLException。网上查来好久才解决掉,这里记录一下。
异常代码如下:
Caused by: java.net.MalformedURLException: no protocol: mysqlDb.properties
at java.net.URL.<init>(URL.java:610)
at java.net.URL.<init>(URL.java:507)
at java.net.URL.<init>(URL.java:456)
at org.apache.ibatis.io.Resources.getUrlAsStream(Resources.java:216)
at org.apache.ibatis.io.Resources.getUrlAsProperties(Resources.java:247)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.propertiesElement(XMLConfigBuilder.java:233)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:106)
... 32 more
properties文件如下:
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/hukan?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=123456
mybatis-config.xml 文件如下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties url="mysqlDb.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- 数据库引擎 -->
<property name="driver" value="${driver}"/>
<!-- 数据库地址 -->
<property name="url" value="${url}"/>
<!-- 用户名 -->
<property name="username" value="${username}"/>
<!-- 密码 -->
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
在网上查了很久,主要有两个解决方法:
1、
url=jdbc:mysql://localhost:3306/hukan?useSSL=true&useUnicode=true&characterEncoding=UTF-8
url 地址配置错误,因为可能是直接从字符串复制的,使用了转义字符,所以出现错误。只要把 & 改成 & 即可解决。
但这并没有解决我的问题……
2、properties 文件的编码错误,使用的默认编码不是 utf-8。修改文件编码即可解决。然而这也不是引起我程序异常的原因……
正在我一筹莫展的时候,我想到了MyBatis中文官网 ,进入网站我找了配置文件示例
<properties resource="org/mybatis/example/config.properties">
<property name="username" value="dev_user"/>
<property name="password" value="F2Fa3!33TYyg"/>
</properties>
看到这里我拍了拍我的脑袋,终于解决了我的问题。
因为我引入数据库配置文件竟然使用的 url……
<properties url="mysqlDb.properties"/>
当我改成
<properties resource="mysqlDb.properties"/>
程序终于可以正常运行了