springboot + mybatis 部署

  |   0 评论   |   395 浏览

    用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();
    

    然后在这里面调用开始抓取数据的启动。这样就木有问题啦。

    后续待更新..

    评论

    发表评论

    validate