vert.x学习(三)

如果使用这个配置的话会很不方便,不如使用JDBC只需要url、数据库最大连接数以及用户密码就可以了,而使用mysqlclient又是主机地址又是端口号的其实组合在一起就是url啊,感觉方便一些。而且jdbc功能和mysqlClient并没有上面差别。

另一个问题就是数据库带参数查询的问题,在上次的带买中添加一个带参数条件的查询url,并创建相应的handler。

方法中:/user/findById/:id 使用的是restful风格的请求,和springmvc中/user/findById/是一样的,

而具体id的获取是从用户的request中拿到的参数值,而request需要RoutingContext来获取,这里的request应该是vert.x包装过的HttpServerRequest,并不是HttpServerletRequest。

我们对应的selectByIdHandler代码如下:

首先我们根据RoutingContext来获取用户的Request,这是一个HttpServerRequest对象,根据它我们能够获取用户请求参数,请求路径请求头等信息。

获取到id值以后我们只需要执行queryWithParams()方法即可,sql语句使用的是我们JDBC里面的占位符,在vert.x里面json对象使用的频率是非常非常高的,这里查询的参数的值是放到json对象里面的,如果我的sql有多个查询参数,那么参数的值一定要按照顺序添加到json中。

数据库事务部分还没有详细的去看!!

重定向这一部分目前,了解到的并不是使用router,而是routingContext.response().setStatusCode(303)和

routingContext.response().putHeader("location","重定向地址")来实现的,这一点我还是有点吃惊的,因为我原来都不知道303的状态码代表什么意思,这部分后期有时间通过代码来实现吧。

今天其实写的东西很少,一直看文档,然后试验。目前遇到的问题主要在我上次说到的将httpserver 和数据库的内容分开,我按照以前spring的那种方式,分dao service来做,实现起来很难受,主要是vertx对象的问题。后来看了一点网上的文档,实现方式是使用两个verticle,一个处理用户请求,一个处理数据库,然后通过event bus也就是消息总线进行数据传递。

然后我就将我原来的代码进行了改造

分别新建了HttpServerVerticle和DataBaseVerticle,这两个类都继承了AbstractVerticle,然后重写带参的start方法。

HttpServerVerticle:

DataBaseVerticle代码:

之所以代码没有写完就是因为写不下去了,现在问题就卡在event bus这里,http server启动是没用问题的,但是浏览器访问的时候会出现问题,显示下面错误信息:

我的理解是evebt bus发送消息到的地址“database.verticel”,但是没有对应的处理器来消费它。另外一点我不是很明确就是event bus这个所谓的地址指的是什么??官方文档地址:https://vertx.io/docs/vertx-core/java/#event_bus

也可能是我没有注册相应的handler的原因,但是这个又该怎么注册呢??头大,所以一直卡在这个地方,网上找了一些资料,但是也都是讲解event bus的,可能我还需要再去理解一下vert.x。

今天的学习也只能到这里,event bus是vert.x里面非常重要非常重要的内容,自己还需要再去好好理解一下。如果event bus这个问题可以解决,对自己的提高应该有很大帮助,还有一个就是自己可能一直在用现有的思维去学习vert.x,不知道会不会也算个误区!!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180819G1GR4Z00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券