[英]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.