最近用到了ArangoDB,但是网上使用arangodb-spring-boot-starter进行集成的demo比较少,但是试验下来是最便捷最简单的方式。记录一下:
1.导入依赖
<dependency>
<groupId>com.arangodb</groupId>
<artifactId>arangodb-spring-boot-starter</artifactId>
<version>2.3.3.RELEASE</version>
</dependency>
2.添加配置
spring:
data:
arangodb:
hosts:
- ip:port #集合形式,可以配置多个
user: root #用户名
password: password #密码
database: database #指定的数据库
3,绑定实体
@Document("entity")
@Data
public class Entity {
@ArangoId
private String id;
@Field("_key")
private String key;
@Field("return_name")
private String returnName;
private String name;
@Field("format_name")
private String formatName;
@Field("format_names")
private List<String> formatNames;
private String label;
private List<String> labels;
private Integer status;
@Field("create_time")
private long createTime;
@Field("update_time")
private long updateTime;
}
@Document绑定实体和集合,@Field可以将集合中属性名和实体类属性名不一致的属性进行绑定,@ArangoId可以指定接收id。
4.绑定DAO
@Repository
public interface EntityDao extends ArangoRepository<Entity, String> {
/**
* 通过key获取实体对象
*
* @param key 对象key
* @return 实体对象
*/
@Query("FOR doc IN entity FILTER doc._key == @key RETURN doc")
Entity findByKey(String key);
}
ArangoRepository内部其实已经实现了一些基本操作,如果想自定义功能方法,可以采用如上方式绑定AQL语句和自定义方法,类似Mybatis,不过这里使用的@作为占位符。
5.定义一个controller运行,并模拟请求,结果和预想的一样。
- 可能出现的问题一:当同时存在arango和其他数据库DAO层接口时,如果arango接口放在mapper包下,会被mybatis接管,使定义的arangoRepository接口无法执行AQL,此时会报错该接口没有绑定的SQL。
- 可能出现的问题而:将arangoRepository接口移出mapper层后,项目启动提示没有我们定义的arangoRepository接口的bean;
- 以上两种问题的解决方式:启动类或者配置类上添加@EnableArangoRepositories注解,最好在注解属性值中注明basePackages。