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>