用 springboot + mybatis 熟悉搭建第一个项目
配置完自动生成 dao、entity、mapper 之后,在把 controller/dal/service 之类的串起来之后,启动一直报如下错误:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scrawlController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException
查找问题,然后把 spring mvc 那套配置干掉,换成 spring boot, 接着添加依赖,mysql-connector-java
/spring-boot-starter-jdbc
/druid
,新增 application.properties(spring boot 会默认读取这个配置文件),配置好数据库连接,启动依旧报错。
继续,添加 MybatisConfig 类,用于建立数据库连接。这下终于差不多好了,写上来几句话,折腾了好久。
其实不得不吐槽 java 的这套框架,用起来完全没有个标准和官方点的用法,各种 mybatis 配置,bean 配置,spring 配置,注解,你一套我一套。跟 php 框架搭起来的流畅度完全不能比。当然,相比起来是对刚上手的人来讲了。
##日志
加入 slf4j 做日志记录。选择这个日志类库的理由,可以参考这里,随便找的一篇文章。
SLF4J 使你的代码独立于任意一个特定的日志 API
##爬虫
增加 webmagic
依赖,然后会有这样的提示:
SLF4J: Class path contains multiple SLF4J bindings.
日志依赖重复引入,查找 maven 依赖树,在 pom 里增加 exclusions
,然后消除警告。
在使用 webmagic 的过程中,为了把抓到的数据放到 mysql 中存储,又得注入 dao,又出现注不进去的情况,dao 一直是 null。反复各种尝试,调整注解神马的,都没有成功。找到一句话,这么说的,如果注入的 bean 是 null,要么是注入的对象没有被 spring 管理,要么就是 被
注入的对象没有被 spring 管理。所以就出现了 bean 为 null 的情况。
事实也确实是如此。
我的例子里是 被
注入的对象(dao)没有被 spring 管理,原因是,拿官方的例子来看:
Spider.create(new GithubRepoPageProcessor()).addUrl("https://github.com/code4craft").thread(5).run();
里面会对当前的类进行实例化,而这种实例化的方式,spring 是不会帮这个实例注入 bean 的。
解决方式:在新的 controller/service 里,通过注解的方式,引入
@Autowired
GithubRepoPageProcessor githubRepoPageProcessor
Spider.create(githubRepoPageProcessor).addUrl("https://github.com/code4craft").thread(5).run();
然后在这里面调用开始抓取数据的启动。这样就木有问题啦。
后续待更新..
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于