当前位置:首页 > 服务端 > spark中利用Sql2o连接数据的例子BlogService

spark中利用Sql2o连接数据的例子BlogService

最近在看学习Spark Framework.

这是一个web框架,宗旨正如其官网LInk所示:Spark - A micro framework for creating web applications in Kotlin and Java 8 with minimal effort

我按着它的例子来学习.这里碰见了BlogService项目[传送门],也算是其主线一步步搭上来的例子了.  // 对应的github[传送门]

 

我本机是Mysql,需要注意:

Mysql并没有UUID数据类型,我用的是char(50)来代替,所以整个项目也要对应的修改引用类型。

至于char(50)类型,是可以直接通过java中的String类型进行对接的。

这里说说自己遇到的几个问题:

问题1: Could not acquire a connection from DataSource - No suitable driver found for jdbc:mysql://localhost:3306/blog

这是因为没有mysql连接驱动的问题,建议搜索[mysql repository]在里面搜索 [mysql-connector-java] 选择 MYSQL Connector/J

进去之后选择对应版本。比如我的是5.14,进入之后

spark中利用Sql2o连接数据的例子BlogService _ JavaClub全栈架构师技术笔记

把这段加入maven的<dependencies>中, 重新 mvn compile 一遍项目即可

这些maven下载的依赖包,最终一般都会存储在  ~/.m2/repository 中。

小tips: 我在网上查询这个问题的时候,有人居然直接让人把 mysql-connector-java-bin.jar 这个现成的jar包放入  .../jre/lib/ext/中

这样当然是可以解决问题的,但是十分不应该。

原因主要有2个:

  • 这样绕开了类路径。当手工地加载其他的类文件时,如果将它们存在扩展路径上,则不能正常的工作。
  • 程序员经常会忘记3个月前所存放文件的位置。当类加载器忽略了曾今仔细设计的类路径时,程序员会毫无头绪地在头文件中查找。事实上,加载的是扩展路径上已经长时间遗忘的类。

 问题2:刚安装完数据库的时候

mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this....
这时候只需要设置(用户自己初始化)一下密码即可
mysql> set password = password('your_password');

问题3:当我想要让我的blogservice远程连接数据库的时候,怎么连都失败,我也开放了权限,也设置了防火墙。

于是我在局域网中找了一台有mysql的机子试着连接自己,发现提示错误号 111

原来,mysql在配置文件还有一层设置,使得只能 localhost连接。

想办法找到配置文件(各个版本可能不同,得自己找找),找到这样一句话

--bind-address="localhost"

注释掉,或者改成“*” ,或者是欲连接自己的ip即可

 

问题4: blogservice的post 只接受一个json对象..如果我是数组形式,他是无法接收的

所以我得想办法解决一下这个解析的问题。按理说,它相关依赖的json解析包是有对应方法的,但是我选择了自己熟悉的一种。

首先去[maven repository]搜索  [json-lib]

spark中利用Sql2o连接数据的例子BlogService _ JavaClub全栈架构师技术笔记

但是要注意,这样是不可行的,它其实还需要一句支持:完整应该是:

<!-- https://mvnrepository.com/artifact/net.sf.json-lib/json-lib -->
<dependency>
   <groupId>net.sf.json-lib</groupId>
   <artifactId>json-lib</artifactId>
   <version>2.4</version>
   <classifier>jdk15</classifier>
</dependency>
mvn compile完,在代码中引入包即可
import net.sf.json.JSONArray;
import net.sf.json.JSONObject; 

之后的关键在于:

ArrayList<V> value = new ArrayList<V>();
if (valueClass != EmptyPayload.class){                           // 如果负载非空
       JSONArray js_a = JSONArray.fromObject(request.body());
       for(int i = 0; i < js_a.size(); ++i){
              System.out.println(((JSONObject)js_a.get(i)).toString());
              V tmp = objectMapper.readValue(((JSONObject)js_a.get(i)).toString(),valueClass);
              value.add(tmp);
       }
 }

如果负载非空,比如为post / get 类型,那么就把request.body()整一个String读取后化成JSONArray

之后,遍历JSONArray,使其一个个变成Java对象即可。

留意    protected abstract Answer processImpl(ArrayList<V> value, Map<String, String> urlParams, boolean shouldReturnHtml);  这些地方的函数声明要一并修改好。

另外就是以后post的时候,即使是一个对象,也需要以数组的形式发送,Json数组:

[
  {
    "param1" : "value_String",
    "param2" : value_num
    ...
  },
  {
    "param1" : "value_String",
    "param2" : value_num
    ...
  } ]

 

作者:gaawing
来源链接:https://www.cnblogs.com/Rosebud/p/7215599.html

版权声明:
1、Java侠(https://www.javaxia.com)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaxia.com/server/124881.html

分享给朋友:

“spark中利用Sql2o连接数据的例子BlogService” 的相关文章