您的位置:首页 > 编程语言 > Java开发

Spring boot整合mybatis

2018-02-01 17:09 417 查看
Spring boot整合mybatis项目在启动的时候,Dao层注入失败,错误信息如下所示:

***************************
APPLICATION FAILED TO START
***************************

Description:

A component required a bean of type 'com.person.job.admin.dao.XxlJobInfoDao' that could not be found.

Action:

Consider defining a bean of type 'com.person.job.admin.dao.XxlJobInfoDao' in your configuration.


解决方案我采用的是使用注解

@MapperScan("com.person.job.admin.dao")


Spring boot整合mybatis的时候需要做一些配置,同时要继承VFS

配置文件MybatisAutoConfiguration对SqlSessionFactoryBean进行了属性注入

@Configuration
@MapperScan("com.fiberhome.job.admin.dao")
public class MybatisAutoConfiguration {

@Autowired
private Environment env;

@Bean
public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource)
throws Exception {
SqlSessionFactoryBean factory = new SqlSessionFactoryBean();

factory.setDataSource(dataSource);
factory.setVfs(SpringBootVFS.class);
factory.setTypeAliasesSuperType(POJO.class);

factory.setTypeAliasesPackage(env.getProperty("mybatis.type-aliases-package"));//指定entity包路径
factory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(env.getProperty("mybatis.mapper-locations")));//指定xml文件位置

return factory;
}
}


SpringBootVFS继承VFS

public class SpringBootVFS extends VFS {

private final ResourcePatternResolver resourceResolver;

public SpringBootVFS() {
this.resourceResolver = new PathMatchingResourcePatternResolver(getClass().getClassLoader());
}

@Override
public boolean isValid() {
return true;
}

@Override
protected List<String> list(URL url, String path) throws IOException {
Resource[] resources = resourceResolver.getResources("classpath*:" + path + "/**/*.class");
List<String> resourcePaths = new ArrayList<String>();
for (Resource resource : resources) {
resourcePaths.add(preserveSubpackageName(resource.getURI(), path));
}
return resourcePaths;
}

private static String preserveSubpackageName(final URI uri, final String rootPath) {
final String uriStr = uri.toString();
final int start = uriStr.indexOf(rootPath);
return uriStr.substring(start);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息