Я борюсь с изменениями в самом последнем коде проекта arangodb-spring-data, который не соответствует старой документации.
Вот мои обновленные зависимости сборки gradle
plugins {
id 'org.springframework.boot' version '2.2.0.RELEASE'
id 'groovy'
}
apply plugin: 'io.spring.dependency-management'
...
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
//implementation 'org.codehaus.groovy:groovy'
implementation group: 'org.codehaus.groovy', name: 'groovy-all', version: '3.0.0-rc-1'
// testImplementation group: 'org.spockframework', name: 'spock-core', version: '1.3-groovy-2.5'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'com.arangodb:arangodb-spring-data:3.2.3'
implementation 'com.arangodb:arangodb-java-driver:6.4.1'
}
У меня есть класс arangoConfiguration, подобный этому:
@Configuration
@EnableArangoRepositories(basePackages = [ "com.softwood.arango" ])
class ArangoConfiguration extends AbstractArangoConfiguration { //changed since 3.2.0
//class ArangoConfiguration {
@Override
public Builder arango() {
return new ArangoDB.Builder().host("localhost", 8529).user("root").password(null)
}
@Override
public String database() {
return "testDB"
}
}
Однако в IDE теперь он показывает, что extends AbstractArangoConfiguration
устарела. Теперь в моем классе ArangoConfiguration вместо этого есть интерфейс, называемый ArangoConfiguration.
Я попытался изменить код для реализации этого интерфейса, и он не работает, так как я получаю ошибку зависимости bean-компонента с не определенными ArangoOperations - что еслиВы расширяете устаревший абстрактный класс не происходит. Spring не удается внедрить bean-компонент autowired для операций - если вы попытаетесь реализовать его из интерфейса ArangoConfiguration
в копии демонстрационного кода, вы можете найти его в github пример кода .
Мой CrudRunner выглядит следующим образомthis
@ComponentScan("com.softwood.arango")
public class CrudRunner implements CommandLineRunner {
@Autowired
private ArangoOperations operations
@Autowired
private OrganisationRepository orgRepo
@Autowired
private SiteRepository siteRepo
@Autowired
private OperatesFromManyRepository ownsRepo //edge relationship
....
Код работает, если я возвращаюсь к устаревшему подходу к модели - однако я все еще получаю отдельное несвязанное предупреждение с проблемой отражения, используя Java 11.0.5. Это не останавливает его работу, но кодовая база делает то, что не нравится Java 11.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.springframework.cglib.core.ReflectUtils (file:/C:/Users/will/.gradle/caches/modules-2/files-2.1/org.springframework/spring-core/5.2.0.RELEASE/e0e1b3c304f70ed19d7905975f6f990916ada219/spring-core-5.2.0.RELEASE.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of org.springframework.cglib.core.ReflectUtils
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
В документации по использованию данных arangodb-spring-data ничего не обновлено, чтобы отразить дальнейшие действияс новым интерфейсом.
Как должна выглядеть последняя версия V.3.0 +?
Предупреждение Java 11 - проблема, но, похоже, код все еще работает, но нуждается в исправлении;это не происходит в Java 8.
Если кто-то знает, что новый подход может им поделиться, иначе мне придется опубликовать его на страницах проекта Git.