項目中碰到的問題,相同代碼在單元測試中報錯,但起整個項目不報錯。spring一行一行debug解決的。這裏把筆記粘出來給碰到相同問題的同學一點點啓迪(雖然我感覺沒人像我一樣倒黴)
1.
<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.**.mapper.**"/>
</bean>
2.
<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.**.mapper.**"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
3.
<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.**.mapper.**"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="typeAliasesPackage" value="com.aa.dao.domain,com.bb.dao.domain"/>
<property name="mapperLocations" value="classpath*:com/**/mappers/**/*.xml"/>
</bean>
|
public class SqlSessionFactoryBean implements FactoryBean<SqlSessionFactory>, InitializingBean, ApplicationListener<ApplicationEvent>
public class LocalSqlSessionFactoryBean extends SqlSessionFactoryBean implements BeanFactoryAware {
private DataSourceSelecter dataSourceSelecter;
@Override
protected SqlSessionFactory buildSqlSessionFactory() throws IOException {
SqlSessionFactory sqlSessionFactory = super.buildSqlSessionFactory();
// 設置默認的JdbcType
Configuration configuration = sqlSessionFactory.getConfiguration();
configuration.setJdbcTypeForNull(JdbcType.VARCHAR);
if (this.dataSourceSelecter != null) {
Field mapperRegistryField = ReflectionUtils.findField(Configuration.class, "mapperRegistry");
ReflectionUtils.makeAccessible(mapperRegistryField);
ReflectionUtils.setField(mapperRegistryField, configuration, new MultiMapperRegistry(configuration, this.dataSourceSelecter));
}
return sqlSessionFactory;
}
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
if (beanFactory instanceof ListableBeanFactory) {
ListableBeanFactory listableBeanFactory = (ListableBeanFactory) beanFactory;
Map<String, DataSourceSelecter> map =null;
try{
map = listableBeanFactory.getBeansOfType(DataSourceSelecter.class);
}catch (Exception ex){
System.out.println();
}
System.out.println("");
if (map != null && map.size() == 1) {
this.dataSourceSelecter = map.values().iterator().next();
}
}
}
}
|
1.
<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.**.mapper.**"/>
</bean>
2.
<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.**.mapper.**"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
<bean class="com.aa.dao.multidatasource.PatternMatcherDataSourceSelecter" >
<property name="routerMap">
<map>
<entry key="other" value="com.aa.commconf.dao.mapper.**" />
<entry key="fbs" value="com.jiupai.fbs.dao.mapper.**" />
<entry key="payadm" value="com.aa.dao.payadm.mapper" />
</map>
</property>
</bean>
|
<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.**.mapper.**"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
|
public SqlSessionFactory getObject() throws Exception {
if (this.sqlSessionFactory == null) {
this.afterPropertiesSet();
}
return this.sqlSessionFactory;
}
public void afterPropertiesSet() throws Exception {
Assert.notNull(this.dataSource, "Property 'dataSource' is required");
Assert.notNull(this.sqlSessionFactoryBuilder, "Property 'sqlSessionFactoryBuilder' is required");
this.sqlSessionFactory = this.buildSqlSessionFactory();
}
見LocalSqlSessionFactoryBean.buildSqlSessionFactory.
|
1.
<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.**.mapper.**"/>
</bean>
|
<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.**.mapper.**"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
|