一套数据库访问的配置主要由以下部分构成
1.1 dataSource
bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>${jdbc.driver}</value>
</property>
<property name="url">
<value>${jdbc.url}</value>
</property>
……
1.2 SqlSessionFactory
<bean id="tysSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations">
<array>
<value>classpath:mapping/*Mapper.xml</value>
<value>classpath*:com/*/mapping/**/*.xml</value>
</array>
</property>
</bean>
1.3 MapperScannerConfigurer
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.xx.xx.dao"/>
<property name="sqlSessionFactoryBeanName" value="tysSqlSessionFactory" />
</bean>
以上为每个spring + myibatis构建的工程的必备配置。如果存在多个数据源,不加以区分SqlSessionFactory,会引起访问数据库的异常,应为系统不会自动的区分当前的数据源指的是哪一个数据库。
所以如果存在多个数据源需要俩套配置。配置是请注意一下位置
1: SqlSessionFactory中的mapperLocations配置,如果存在多个,且某个存在于jar中,请使用如下的方法进行处理
<value>classpath*:com/*/mapping/**/*.xml</value>
2: 在配置MapperScannerConfigurer时sqlSessionFactoryBeanName的配置
按照一般的规则大部分人喜欢配置成
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
但是在高版本的spring中,sqlSessionFactory的初始化快于dataSource的生成,dataSources的生成依赖于读取配置文件,等操作,所以导致sqlSessionFactory的初始化失败,而使用
<property name="sqlSessionFactoryBeanName" value="tysSqlSessionFactory" />
即可避免该问题。