簡體   English   中英

我應該如何使用 SpringBoot 連接到 ArangoDB

[英]How should I connect to ArangoDB using SpringBoot

我正在嘗試創建一個簡單的 SpringBoot 應用程序來連接並在數據庫中存儲一些數據,但是當我的代碼嘗試提交一個新對象時,仍然會遇到 401 禁止消息。

我應該如何使用 SpringBoot 連接到 ArangoDb 以便能夠在數據庫中保存節點?

我的系統上運行着 ArangoDb,我可以在本地主機上登錄到 Web 控制台: http://localhost:8529

我有一個與下面的屬性同名的數據庫。 在運行應用程序之前,我還嘗試通過 Web 界面創建集合(是的,我不熟悉 DB 圖形)。

嘗試持久化實體時發生錯誤:

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

應用程序.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 是因為沒有可供 Hikari 使用的驅動程序,但我認為我已包含在上面的 Gradle 配置中。

2020-01-30 23:27:43.932 DEBUG 14845 --- [主要] osboot.diagnostics.FailureAnalyzers:FailureAnalyzer org.springframework.boot.autoconfigure.jdbc.HikariDriverConfigurationFailureAnalyzer@972461a failed

java.lang.TypeNotPresentException:類型 org.springframework.jdbc.CannotGetJdbcConnectionException 不存在於 java.base/sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:117) ~[na:na] 在 java.base/ sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:125) ~[na:na] 在 java.base/sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49) ~[na] :na] 在 java.base/sun.reflect.generics.visitor.Reifier.reifyTypeArguments(Reifier.java:68) ~[na:na]

2020-01-30 23:27:43.935 錯誤 14845 --- [main] osboot.SpringApplication:應用程序運行失敗

org.springframework.beans.factory.BeanCreationException:創建名為“postConstruction”的 bean 時出錯:調用 init 方法失敗; 嵌套異常是 org.springframework.dao.PermissionDeniedDataAccessException:響應:401,錯誤:401 - 未經授權; 嵌套異常是 com.arangodb.ArangoDBException: Response: 401, Error: 401 - 在 org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:160) 〜5ELE2.2.2.2.2.160 .jar:5.2.2.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:416) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1788) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]

請從 build.gradle 中刪除 compile 'com.arangodb:arangodb-java-driver',因為它將由 spring boot arangodb starter(arangodb-spring-boot-starter) 解決。

當我嘗試將 arangodb 驅動程序用於 Spring Boot 應用程序時,我也遇到了這個問題。 但是現在我已經更改為用戶 spring boot arangodb starter,現在它開始工作了。

您可以嘗試使用 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' 
    }

與此類問題一樣......用戶錯誤。

我在 application.properties 中有定義數據庫值的屬性,例如用戶名/主機等

有:

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

在那里我有一個方法 arrango() 將硬接線值傳遞給 bean 創建,這些硬接線值不正確(擺弄在線找到的幾個教程/說明的結果)。

我刪除了那個配置類,一切似乎都開始了,包括我將文檔插入到@PostConstruct 塊中的集合中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM