Mybatis注意点
Mybatis 集成spring时,无法加载外部properties的值:main.properties:
main.db.vtms3000.sIp=127.0.0.1
main.db.vtms3000.sPort=3306
main.db.vtms3000.sUsername=mysql
main.db.vtms3000.sPassword=password
spring加载配置文件:
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>WEB-INF\main.properties</value>
</list>
</property>
<property name="fileEncoding">
<value>UTF-8</value>
</property>
</bean>
<bean id="developDataSource" destroy-method="close"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://${main.db.vtms3000.sIp}:${main.db.vtms3000.sPort}/vtms3000" />
<property name="username" value="${main.db.vtms3000.sUsername}" />
<property name="password" value="${main.db.vtms3000.sPassword}" />
<property name="initialSize" value="20"/>
<property name="maxActive" value="100"/>
<property name="maxIdle" value="30"/>
<property name="maxWait" value="1000"/>
<property name="testOnBorrow" value="true"/>
<property name="testWhileIdle" value="true"/>
<property name="testOnReturn" value="true"/>
<property name="minEvictableIdleTimeMillis" value="300000" />
<property name="timeBetweenEvictionRunsMillis" value="120000" />
<property name="validationQuery" value="select 1 from dual" />
</bean>
<!-- SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="developDataSource" />
<property name="configLocation" value="/WEB-INF/mybatis_config.xml" />
</bean>
<!-- ScanMapperFiles -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.dahuazwan.vtms.mapper"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
</beans>
说明:
${main.db.vtms3000.sIp}、${main.db.vtms3000.sPort}等值从属性文件main.properties获取,但是在实际执行时,取发现无法取到 ${main.db.vtms3000.sIp}的值,抛出异常
Caused by: java.lang.NumberFormatException: For input string: "${main.db.vtms3000.sPort}"
说明无法从main.properties中得到${main.db.vtms3000.sPort}对应的端口号
原因是spring + mybatis配置存在中冲突,只要注释掉<property name="sqlSessionFactory" ref="sqlSessionFactory"/>即可:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.dahuazwan.vtms.mapper"/>
<!--
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
-->
</bean>
页:
[1]