Error creating bean with name associationlinks defined in class path resource

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2022-05-10 23:00:10.030 ERROR 7765 --- [    Test worker] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'embeddedMongoServer' defined in class path resource [org/springframework/boot/autoconfigure/mongo/embedded/EmbeddedMongoAutoConfiguration.class]: Unsatisfied dependency expressed through method 'embeddedMongoServer' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'embeddedMongoConfiguration' defined in class path resource [org/springframework/boot/autoconfigure/mongo/embedded/EmbeddedMongoAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [de.flapdoodle.embed.mongo.config.MongodConfig]: Factory method 'embeddedMongoConfiguration' threw exception; nested exception is java.lang.IllegalStateException: Set the spring.mongodb.embedded.version property or define your own MongodConfig bean to use embedded MongoDB

위와 같은 에러가 뜨는 경우 해결 방법

밑줄 친 부분을 보니 내장 mongoDB를 쓰고 싶으면 spring.mongodb.embedded.version에 대한 property를 설정해주라는 이야기인 듯 하다.

찾아보니 spring boot 2.6 이후부터 spring.mongodb.embedded.version은 자동 구성된 임베디드 MongoDB를 사용하도록 설정해야하는것 같다.

test 폴더의 하위에 recources 폴더를 만들고

application.yml 파일을 아래와 같이 생성한다.

// test/resources/application.yml spring: mongodb: embedded: version: 3.3.4
Error creating bean with name associationlinks defined in class path resource

문서의 내용을 보면 production에서 사용할 mongodb의 버전과 embedded.mongo의 버전을 동일하게 해주면 된다고 한다.

그래서 현재(2022.05.10) 기준 spring data mongo는 3.3.4 버전을 지원하기 때문에 embedded 버전도 3.3.4로 맞춰주었다.

Error creating bean with name associationlinks defined in class path resource
spring 공식문서

테스트 해보면 정상 동작할 것이다.

해결!

2022.05.10
springboot 2.6.7 기준
mongodb.embedded.version 으로 3.3.43.5.5, 3.6.5, latest 등이 사용 가능했다..

All Methods Static Methods Instance Methods Concrete Methods Modifier and TypeMethod and Descriptionvoid addResourceHandlers(ResourceHandlerRegistry registry)  RootResourceInformationToAlpsDescriptorConverter alpsConverter(Repositories repositories, PersistentEntities persistentEntities, RepositoryEntityLinks entityLinks, EnumTranslator enumTranslator, Associations associationLinks, RepositoryRestConfiguration repositoryRestConfiguration)  AlpsJsonHttpMessageConverter alpsJsonHttpMessageConverter(RootResourceInformationToAlpsDescriptorConverter alpsConverter)  static AnnotatedEventHandlerInvoker annotatedEventHandlerInvoker()  Associations associationLinks(RepositoryResourceMappings resourceMappings, RepositoryRestConfiguration repositoryRestConfiguration)  AuditableBeanWrapperFactory auditableBeanWrapperFactory(PersistentEntities persistentEntities)  org.springframework.plugin.core.PluginRegistry<BackendIdConverter,Class<?>> backendIdConverterRegistry(List<BackendIdConverter> backendIdConverter)  BackendIdHandlerMethodArgumentResolver backendIdHandlerMethodArgumentResolver(org.springframework.plugin.core.PluginRegistry<BackendIdConverter,Class<?>> backendIdConverterRegistry, ResourceMetadataHandlerMethodArgumentResolver resourceMetadataHandlerMethodArgumentResolver, BaseUri baseUri)  BaseUri baseUri(RepositoryRestConfiguration repositoryRestConfiguration)  protected com.fasterxml.jackson.databind.ObjectMapper basicObjectMapper()  DefaultFormattingConversionService defaultConversionService(PersistentEntities persistentEntities, RepositoryInvokerFactory repositoryInvokerFactory, Repositories repositories)  List<HttpMessageConverter<?>> defaultMessageConverters(org.springframework.hateoas.server.mvc.TypeConstrainedMappingJackson2HttpMessageConverter jacksonHttpMessageConverter, org.springframework.hateoas.server.mvc.TypeConstrainedMappingJackson2HttpMessageConverter halJacksonHttpMessageConverter, org.springframework.hateoas.server.mvc.TypeConstrainedMappingJackson2HttpMessageConverter halFormsJacksonHttpMessageConverter, AlpsJsonHttpMessageConverter alpsJsonHttpMessageConverter, UriListHttpMessageConverter uriListHttpMessageConverter, RepositoryRestConfiguration repositoryRestConfiguration)  protected List<HandlerMethodArgumentResolver> defaultMethodArgumentResolvers(SelfLinkProvider selfLinkProvider, PersistentEntityResourceHandlerMethodArgumentResolver persistentEntityArgumentResolver, RootResourceInformationHandlerMethodArgumentResolver repoRequestArgumentResolver)  RepositoryEntityLinks entityLinks(ObjectFactory<HateoasPageableHandlerMethodArgumentResolver> pageableResolver, Repositories repositories, RepositoryResourceMappings resourceMappings, org.springframework.plugin.core.PluginRegistry<BackendIdConverter,Class<?>> backendIdConverterRegistry, RepositoryRestConfiguration repositoryRestConfiguration, ObjectFactory<HateoasSortHandlerMethodArgumentResolver> sortResolver)

A special EntityLinks implementation that takes repository and current configuration into account when generating links.

EnumTranslator enumTranslator(org.springframework.hateoas.mediatype.MessageResolver resolver)  ETagArgumentResolver eTagArgumentResolver()  ExcerptProjector excerptProjector(RepositoryResourceMappings resourceMappings)  void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers)  protected List<EntityLookup<?>> getEntityLookups()  org.springframework.hateoas.server.mvc.TypeConstrainedMappingJackson2HttpMessageConverter halJacksonHttpMessageConverter(LinkCollector linkCollector, RepositoryRestConfiguration repositoryRestConfiguration)  com.fasterxml.jackson.databind.ObjectMapper halObjectMapper(LinkCollector linkCollector)  HttpHeadersPreparer httpHeadersPreparer(AuditableBeanWrapperFactory auditableBeanWrapperFactory)  org.springframework.hateoas.server.mvc.TypeConstrainedMappingJackson2HttpMessageConverter jacksonHttpMessageConverter(RepositoryRestConfiguration repositoryRestConfiguration) JpaHelper jpaHelper()  PersistentEntityToJsonSchemaConverter jsonSchemaConverter(PersistentEntities persistentEntities, Associations associationLinks, RepositoryInvokerFactory repositoryInvokerFactory, RepositoryRestConfiguration repositoryRestConfiguration) protected LinkCollector linkCollector(PersistentEntities persistentEntities, SelfLinkProvider selfLinkProvider, Associations associationLinks)  MetadataConfiguration metadataConfiguration()  com.fasterxml.jackson.databind.ObjectMapper objectMapper()

The Jackson ObjectMapper used internally.

HateoasPageableHandlerMethodArgumentResolver pageableResolver()  PersistentEntities persistentEntities()  PersistentEntityResourceHandlerMethodArgumentResolver persistentEntityArgumentResolver(List<HttpMessageConverter<?>> defaultMessageConverters, RootResourceInformationHandlerMethodArgumentResolver repoRequestArgumentResolver, Associations associationLinks, BackendIdHandlerMethodArgumentResolver backendIdHandlerMethodArgumentResolver, PersistentEntities persistentEntities)

Reads incoming JSON into an entity.

protected com.fasterxml.jackson.databind.Module persistentEntityJackson2Module(LinkCollector linkCollector)

Jackson module responsible for intelligently serializing and deserializing JSON that corresponds to an entity.

ProfileResourceProcessor profileResourceProcessor(RepositoryRestConfiguration repositoryRestConfiguration)  static ProjectionDefinitionRegistar projectionDefinitionRegistrar(ObjectFactory<RepositoryRestConfiguration> config)  RootResourceInformationHandlerMethodArgumentResolver repoRequestArgumentResolver(Repositories repositories, ResourceMetadataHandlerMethodArgumentResolver resourceMetadataHandlerMethodArgumentResolver, RepositoryInvokerFactory repositoryInvokerFactory)

A convenience resolver that pulls together all the information needed to service a request.

Repositories repositories()  RequestMappingHandlerAdapter repositoryExporterHandlerAdapter(List<HttpMessageConverter<?>> defaultMessageConverters, AlpsJsonHttpMessageConverter alpsJsonHttpMessageConverter, SelfLinkProvider selfLinkProvider, PersistentEntityResourceHandlerMethodArgumentResolver persistentEntityArgumentResolver, RootResourceInformationHandlerMethodArgumentResolver repoRequestArgumentResolver, RepositoryRestConfiguration repositoryRestConfiguration)

Special HandlerAdapter that only recognizes handler methods defined in the provided controller classes.

RepositoryInvokerFactory repositoryInvokerFactory()  RepositoryRelProvider repositoryRelProvider(ObjectFactory<ResourceMappings> resourceMappings)  <T extends RepositoryRestConfiguration & CorsConfigurationAware>
T repositoryRestConfiguration()

Main configuration for the REST exporter.

RepositoryRestExceptionHandler repositoryRestExceptionHandler()  RepositoryResourceMappings resourceMappings(Repositories repositories, PersistentEntities persistentEntities, RepositoryRestConfiguration repositoryRestConfiguration)  ResourceMetadataHandlerMethodArgumentResolver resourceMetadataHandlerMethodArgumentResolver(Repositories repositories, RepositoryResourceMappings resourceMappings, BaseUri baseUri)  org.springframework.data.rest.webmvc.config.DelegatingHandlerMapping restHandlerMapping(Repositories repositories, RepositoryResourceMappings resourceMappings, Optional<JpaHelper> jpaHelper, RepositoryRestConfiguration repositoryRestConfiguration, CorsConfigurationAware corsRestConfiguration)

The HandlerMapping to delegate requests to Spring Data REST controllers.

SelfLinkProvider selfLinkProvider(PersistentEntities persistentEntities, RepositoryEntityLinks entityLinks, ObjectProvider<ConversionService> conversionService)  ServerHttpRequestMethodArgumentResolver serverHttpRequestMethodArgumentResolver() void setBeanClassLoader(ClassLoader classLoader)  void setEmbeddedValueResolver(StringValueResolver resolver)  HateoasSortHandlerMethodArgumentResolver sortResolver()  UriListHttpMessageConverter uriListHttpMessageConverter() ValidatingRepositoryEventListener validatingRepositoryEventListener(ObjectFactory<PersistentEntities> entities)