ibatis dtd文件及问题案例

DTD文件简介

DTD:Document Type Definition的简写,是一套关于标记符的语法规则。它是XML1.0版规格的一部分,是XML文件的验证机制,属于XML文件组成的一部分。

DTD 是一种保证XML文档格式正确的有效方法,可以通过比较XML文档和DTD文件来看文档是否符合规范,元素和标签使用是否正确。一个DTD文档包含:元素的定义规则,元素间关系的定义规则,元素可使用的属性,可使用的实体或符号规则。

DTD文件的使用

DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

内部的 DOCTYPE 声明

假如 DTD 被包含在您的 XML 源文件中,它应当通过下面的语法包装在一个 DOCTYPE 声明中:

案例

问题描述

在使用ibatis过程中遇到过这样一个问题,sql文件在运行test case 及测试环境下都没有问题,但是到了线上环境,忽然间sql不能执行了,总是运行很长时间然后报出一个mapper文件的错误。

代码及报错情况见下面:

代码:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="XXX.MQProviderDao">
    <resultMap id="result_map" type="XXX.MQInfoDetail">
        <result column="topic_name" property="topicName" jdbcType="VARCHAR"/>
    </resultMap>
    <sql id="column_list">
       topic_name
    </sql>
    <select id="selectTopic"  resultType="java.lang.String">
        select DISTINCT topic_name from tb_mq_provider
    </select>
</mapper>

报错:

这里写图片描述

调试步骤:
(1)第一次看到这个问题的时候首先怀疑的是sql写的有问题,于是对这个sql做了各种修改的尝试。-失败
(2)访问了一下这个工程中的其他接口,全部失败
(3)然后开始考虑timeout问题,这个timeout并没有报出是哪里timeout了,因为工程中用的cobar,所以第一个怀疑是连接cobar时候超时了,所以找到DBA要来配置的详细信息做了ping和telnet测试,测试结果都显示是可以正常连接到DB的。
(4)幸好此时老大来帮忙,一下就定位到了dtd文件可能声明的有问题,于是和其他工程对比了一下发现:

我的DTD声明:

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

正常访问工程的DTD声明:

<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd" >

而mqbatis的那个链接在线上环境是不能访问到的,因为很多服务器是不能访问外网的。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值