如果使用这个配置的话会很不方便,不如使用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,不知道会不会也算个误区!!
领取专属 10元无门槛券
私享最新 技术干货