如何使用SpringBoot连接到ArangoDB

wfsdck30  于 2022-12-09  发布在  Go
关注(0)|答案(2)|浏览(227)

我试图创建一个简单的SpringBoot应用程序来连接数据库并将一些数据存储在数据库中,但是当我的代码试图提交一个新对象时,总是出现401禁止消息。
我应该如何使用SpringBoot连接到ArangoDb才能在数据库中保存节点?
我的系统上运行ArangoDb,我可以登录到localhost上的Web控制台:http://localhost:8529
我有一个与下面的属性同名的数据库。我还尝试在运行应用程序之前通过Web界面创建集合(是的,我是数据库图形的新手)。
尝试保存实体时发生错误:

competitorRepository.save(competitor);

我知道这将是一些'显而易见',至少它会一旦我使用ArangoDb一点!!
该错误可能表明我的依赖项中存在错误的驱动程序,但如果我的Gradle文件(如下所示)中没有该驱动程序,则不知道该驱动程序应该是什么。
一些代码:
application.properties:尝试使用root用户以避免用户权限问题。我可以使用此用户登录到Web界面。

spring.data.arangodb.hosts=localhost:8529
spring.data.arangodb.database=grading-data
spring.data.arangodb.user=root
spring.data.arangodb.password=theRightPasswordForRoot

Application.java

@SpringBootApplication
public class Application {

public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
}
}

PostConstruct.java :我不打算保留它,只是在启动后尝试运行一些代码

@Component
@Slf4j
public class PostConstruction {

private Environment environment;
private CompetitorRepository competitorRepository;
private ApplicationContext ctx;

@Autowired
public PostConstruction(Environment environment, CompetitorRepository competitorRepository, ApplicationContext ctx) {
    this.environment = environment;
    this.competitorRepository = competitorRepository;
    this.ctx = ctx;
}

@PostConstruct
public void stuffToDoOnceApplicationStartsUp() {

    var competitor = Competitor.builder()
            .clubName("a club")
            .firstName("name")
            .lastName("lastname")
            .build();
    var savedCompetitor = competitorRepository.save(competitor);
    System.out.println(savedCompetitor);
}
}

bean类...使用lombok注解(以前从来没有出现过问题),为了简洁省略了字段(只有字符串和整型):

@SuperBuilder
@Getter
@ToString
@Document("competitor")
@HashIndex(fields = { "licence" }, unique = true)
public class Competitor extends Person {

@Id
private String id;

}

储存库:

@Repository
public interface CompetitorRepository extends ArangoRepository<Competitor, String> {
}

项目Gradle文件:

buildscript {
repositories {
    mavenCentral()
}
dependencies {
    classpath("org.springframework.boot:spring-boot-gradle-plugin:2.2.0.RELEASE")
}
}

plugins {
id 'java'
id 'org.springframework.boot' version '2.2.2.RELEASE'
id 'io.spring.dependency-management' version '1.0.7.RELEASE'
}

apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

bootJar {
manifest {
    attributes 'Start-Class': 'my.package.conf.Application'
}
launchScript()
}

repositories {
mavenCentral()
}

sourceCompatibility = 11
targetCompatibility = 11

dependencies {
compile "org.springframework.boot:spring-boot-starter-websocket"
compile "org.springframework.boot:spring-boot-starter-tomcat"
compile "org.springframework.boot:spring-boot-starter-test" // todo : test scope
compile 'org.springframework.boot:spring-boot-starter-actuator' //     /actuator/health

compile 'org.apache.httpcomponents:httpclient:4.5.1' // for arangodb ?

compile 'com.arangodb:arangodb-spring-boot-starter:1.0.2'
compile 'com.arangodb:arangodb-spring-data:3.2.3'
compile 'com.arangodb:arangodb-java-driver'

compile 'org.projectlombok:lombok:1.18.10'
annotationProcessor 'org.projectlombok:lombok:1.18.10'
}

堆栈跟踪的片段...看起来像401是因为没有驱动程序可供光使用,但我认为我已经包括在Gradle配置以上。
2020-01-30 23:27:43.932 DEBUG 14845 --- [ main]操作系统 Boot 诊断故障分析仪:故障分析器org.springframework.boot.autoconfigure.jdbc.HikariDriverConfigurationFailureAnalyzer@372461a9失败
异常错误:在java.base/sun. reflect.generics.visitor. reifier.访问者.验证器.访问类类型签名(Reifier.java:125)~[na:na]在java.base/sun.reflect.generics. tree.类类型签名.接受(类类型签名. java:49)~[na:na]在java. base/sun. reflect.generics.visitor.验证器.验证类型参数(Reifier.java:68)~[na:na]在java. base/sun.reflect.generics.tree.验证器.验证类型签名(Reifier.java:125)~[na:na]在java.base/sun. reflect.generics.visitor.验证器.验证类型参数(Reifier.java:68)~[na:na]
2020-01-30 23:27:43.935错误代码14845 --- [ main] Boot 。Spring应用程序:应用程序运行失败
org.springframework.beans.factory.BeanCreationException:创建名为“postConstruction”的Bean时出错:调用init方法失败;嵌套的异常是org.springframework.dao。权限被拒绝数据访问异常:401,错误代码:401 -未经授权;嵌套的异常是com.arangodb.ArangoDBException:401,错误代码:401 -未授权的位置。初始化之前的初始化(java:160)~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]位于以下位置。初始化之前的初始化(java:416)~[spring-beans-5.2.2.RELEASE. jar:5.2.2.RELEASE]位于以下位置。

hjzp0vay

hjzp0vay1#

请从build.gradle中删除编译“com.arangodb:arangodb-java-driver”,因为它将由Spring Boot arangodb启动程序(arangodb-spring-boot-starter)解析。
当我尝试使用arangodb驱动程序的Spring Boot 应用程序时,我也面临过这个问题。但现在我已经改为使用Spring启动arangodb启动器,现在它开始工作了。
您可以尝试使用arangodb-spring-boot-starter来运行此程序。
build.gradle文件片段:

plugins {
    id 'org.springframework.boot' version '2.1.6.RELEASE'
    id 'io.spring.dependency-management' version '1.0.8.RELEASE'
    id 'java'
    id 'eclipse'
}

和依赖项部分:

dependencies {
       implementation 'org.springframework.boot:spring-boot-starter-web'
       implementation 'com.arangodb:arangodb-spring-boot-starter:1.0.2' 
    }
lzfw57am

lzfw57am2#

和以往一样,这类问题...用户错误。
我在www.example.com中有一些属性application.properties,这些属性定义了数据库的值,如用户名/主机等
过了:

@EnableArangoRepositories(basePackages = { "uk.co.deditech" })
public class ArangoGraphDbConfig implements ArangoConfiguration

在那里,我有一个方法arrango(),它将硬连接的值传递到bean创建中,这些硬连接的值是不正确的(这是摆弄在线找到的几个教程/说明的结果)。
我删除了那个配置类,一切似乎都启动了,包括我在@PostConstruct块的集合中插入了一个文档。

相关问题