我正在Spring 3.0环境中从iBatis 2迁移到MyBatis 3。当我尝试部署应用程序,甚至只是运行JUnit测试时,配置初始化失败并出现连接超时错误,如下所示:
在类路径资源[testContext-jndi.xml]中定义名称为'sqlSessionFactory'的bean时出错:init方法的调用失败;嵌套异常是org.apache.ibatis.builder.BuilderException:创建文档实例时出错。原因:java.net.ConnectException:连接超时:连接
它看起来像一个缺少的http代理,但我的eclipse代理设置一直适用于我所有的其他代码。我的DTD定义似乎是正确的。
我正在使用Spring 3.0.0,并在我的类路径中包含以下jar:
相关弹簧配置如下:
fooContext-data.xml - (这是测试/资源配置。当部署到Web容器时,弹簧配置的数据源使用JNDI查找来获取凭据。它们都以相同的方式失败。)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="dataSourceFoo" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" >
<property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@(DESCRIPTION = (LOAD_BALANCE=on)(FAILOVER=on)(ADDRESS=(PROTOCOL=tcp)(HOST=foo1)(PORT=1521))(ADDRESS=(PROTOCOL=tcp)(HOST=foo2)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=foo.bar.boz)))"/>
<property name="username" value="fooUser"/>
<property name="password" value="fooPass"/>
</bean>
<!-- MyBatis stuff -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSourceFoo" />
<property name="configLocation" value="sqlMapConfig.xml" />
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
</beans>
sqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//www.mybatis.org//DTD Config 3.0//EN"
"http://www.mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="ibatis.properties" />
<mappers>
<mapper resource="foo/dao/maps/mybatis/SqlMap1.xml"/>
<mapper resource="foo/dao/maps/mybatis/SqlMap2.xml"/>
<mapper resource="foo/dao/maps/mybatis/SqlMap3.xml"/>
<mapper resource="foo/dao/maps/mybatis/SqlMap4.xml"/>
<mapper resource="foo/dao/maps/mybatis/SqlMap5.xml"/>
<mapper resource="foo/dao/maps/mybatis/SqlMap6.xml"/>
<mapper resource="foo/dao/maps/mybatis/SqlMap7.xml"/>
<mapper resource="foo/dao/maps/mybatis/SqlMap8.xml"/>
<mapper resource="foo/dao/maps/mybatis/SqlMap9.xml"/>
<mapper resource="foo/dao/maps/mybatis/SqlMap10.xml"/>
<mapper resource="foo/dao/maps/mybatis/SqlMap11.xml"/>
<mapper resource="foo/dao/maps/mybatis/SqlMap12.xml"/>
<mapper resource="foo/dao/maps/mybatis/SqlMap13.xml"/>
<mapper resource="foo/dao/maps/mybatis/SqlMap14.xml"/>
<mapper resource="foo/dao/maps/mybatis/SqlMap15.xml"/>
</mappers>
</configuration>
我注意到其他一些人遇到了这个问题,而且它与myBatis xml的DTD出错或网络连接不良有关,导致他们无法提取DTD定义。我不知道如何解决这个问题,因为所有这些基础似乎都包含在我的场景中。
我已经解决了这个问题一天半,抨击了MyBatis和MyBatis-Spring的文档,以及这个网站和其他网站的一些内容。任何想法都将不胜感激。
答案 0 :(得分:1)
我在myBatis用户网站上找到了这个问题的答案: DTD verification when www.mybatis.org is down
原来我的DTD链接不应该在他们面前有www。也就是说,而不是:
<!DOCTYPE configuration
PUBLIC "-//www.mybatis.org//DTD Config 3.0//EN"
"http://www.mybatis.org/dtd/mybatis-3-config.dtd">
他们应该读:
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
我改变了这些,现在它起作用了。