我试图创建一个简单的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]位于以下位置。
2条答案
按热度按时间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文件片段:
和依赖项部分:
lzfw57am2#
和以往一样,这类问题...用户错误。
我在www.example.com中有一些属性application.properties,这些属性定义了数据库的值,如用户名/主机等
我也过了:
在那里,我有一个方法arrango(),它将硬连接的值传递到bean创建中,这些硬连接的值是不正确的(这是摆弄在线找到的几个教程/说明的结果)。
我删除了那个配置类,一切似乎都启动了,包括我在@PostConstruct块的集合中插入了一个文档。