Spring Cloud Data Flow部分忽略了Maven本地存储库属性

问题描述

我们将SCDF(版本2.6.1)与定义Maven设置的环境变量一起使用:

MAVEN_LOCALREPOSITORY: custom-local-repo
MAVEN_REMOTEREPOSITORIES_MTREPO_URL: url
MAVEN_REMOTEREPOSITORIES_MTREPO_AUTH_USERNAME: user-name
MAVEN_REMOTEREPOSITORIES_MTREPO_AUTH_PASSWORD: password

从maven下载在注册简单任务的过程中正确进行,本地存储库已满,但是当我们创建任务时,会收到错误消息:

java.lang.IllegalArgumentException: Unable to deserialize manifest
    at org.springframework.cloud.dataflow.server.repository.JdbcDataflowTaskExecutionMetadataDao.lambda$findManifestById$1(JdbcDataflowTaskExecutionMetadataDao.java:170)
    at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:94)
    at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:61)
    at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:679)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:617)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:669)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:694)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:748)
    at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.queryForObject(NamedParameterJdbcTemplate.java:236)
    at org.springframework.cloud.dataflow.server.repository.JdbcDataflowTaskExecutionMetadataDao.findManifestById(JdbcDataflowTaskExecutionMetadataDao.java:163)
    at org.springframework.cloud.dataflow.server.service.impl.DefaultTaskExecutionService.findTaskManifestById(DefaultTaskExecutionService.java:638)
    at org.springframework.cloud.dataflow.server.service.impl.DefaultTaskExecutionService$$FastClassBySpringcglib$$422cda43.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
    at org.springframework.aop.framework.cglibAopProxy$cglibMethodInvocation.invokeJoinpoint(cglibAopProxy.java:771)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
    at org.springframework.aop.framework.cglibAopProxy$cglibMethodInvocation.proceed(cglibAopProxy.java:749)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:367)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.aop.framework.cglibAopProxy$cglibMethodInvocation.proceed(cglibAopProxy.java:749)
    at org.springframework.aop.framework.cglibAopProxy$DynamicAdvisedInterceptor.intercept(cglibAopProxy.java:691)
    at org.springframework.cloud.dataflow.server.service.impl.DefaultTaskExecutionService$$EnhancerBySpringcglib$$44ae67c1.findTaskManifestById(<generated>)
    at org.springframework.cloud.dataflow.server.controller.TaskDeFinitionController$Assembler.updateTaskExecutionResource(TaskDeFinitionController.java:278)
    at org.springframework.cloud.dataflow.server.controller.TaskDeFinitionController$Assembler.instantiateModel(TaskDeFinitionController.java:302)
    at org.springframework.cloud.dataflow.server.controller.TaskDeFinitionController$Assembler.instantiateModel(TaskDeFinitionController.java:263)
    at org.springframework.hateoas.server.mvc.RepresentationModelAssemblerSupport.createModelWithId(RepresentationModelAssemblerSupport.java:97)
    at org.springframework.hateoas.server.mvc.RepresentationModelAssemblerSupport.createModelWithId(RepresentationModelAssemblerSupport.java:89)
    at org.springframework.cloud.dataflow.server.controller.TaskDeFinitionController$Assembler.toModel(TaskDeFinitionController.java:287)
    at org.springframework.cloud.dataflow.server.controller.TaskDeFinitionController$Assembler.toModel(TaskDeFinitionController.java:263)
    at org.springframework.data.web.PagedResourcesAssembler.createModel(PagedResourcesAssembler.java:211)
    at org.springframework.data.web.PagedResourcesAssembler.toModel(PagedResourcesAssembler.java:123)
    at org.springframework.cloud.dataflow.server.controller.TaskDeFinitionController.list(TaskDeFinitionController.java:196)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.web.method.support.invocableHandlerMethod.doInvoke(invocableHandlerMethod.java:190)
    at org.springframework.web.method.support.invocableHandlerMethod.invokeForRequest(invocableHandlerMethod.java:138)
    at org.springframework.web.servlet.mvc.method.annotation.ServletinvocableHandlerMethod.invokeAndHandle(ServletinvocableHandlerMethod.java:105)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:879)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    at org.springframework.web.servlet.dispatcherServlet.dodispatch(dispatcherServlet.java:1040)
    at org.springframework.web.servlet.dispatcherServlet.doService(dispatcherServlet.java:943)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.ForwardedHeaderFilter.doFilterInternal(ForwardedHeaderFilter.java:158)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.boot.actuate.metrics.web.servlet.WebMvcmetricsFilter.doFilterInternal(WebMvcmetricsFilter.java:109)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:747)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)
    at org.apache.tomcat.util.net.socketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Unable to create directory for local repository: /.m2/repository (through reference chain: org.springframework.cloud.dataflow.core.TaskManifest["taskDeploymentRequest"]->org.springframework.cloud.deployer.spi.core.AppDeploymentRequest["resource"])
    at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:397)
    at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:356)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapAndThrow(BeanDeserializerBase.java:1732)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:530)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:417)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializefromObjectUsingNonDefault(BeanDeserializerBase.java:1305)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializefromObject(BeanDeserializer.java:326)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:159)
    at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:288)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:151)
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4218)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3214)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3182)
    at org.springframework.cloud.dataflow.server.repository.JdbcDataflowTaskExecutionMetadataDao.lambda$findManifestById$1(JdbcDataflowTaskExecutionMetadataDao.java:167)
    ... 90 common frames omitted
Caused by: java.lang.IllegalArgumentException: Unable to create directory for local repository: /.m2/repository
    at org.springframework.util.Assert.isTrue(Assert.java:118)
    at org.springframework.cloud.deployer.resource.maven.MavenArtifactResolver.<init>(MavenArtifactResolver.java:114)
    at org.springframework.cloud.deployer.resource.maven.MavenResource.<init>(MavenResource.java:122)
    at org.springframework.cloud.deployer.resource.maven.MavenResource.parse(MavenResource.java:268)
    at org.springframework.cloud.dataflow.registry.support.AppResourceCommon.getResource(AppResourceCommon.java:167)
    at org.springframework.cloud.dataflow.server.service.impl.ResourceDeserializer.deserialize(ResourceDeserializer.java:51)
    at org.springframework.cloud.dataflow.server.service.impl.ResourceDeserializer.deserialize(ResourceDeserializer.java:36)
    at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:530)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:528)
    ... 101 common frames omitted

也许问题出在这里

public JdbcDataflowTaskExecutionMetadataDao(DataSource dataSource,datafieldMaxValueIncrementer incrementer) {

    this.incrementer = incrementer;

    this.jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);

    this.objectMapper = new ObjectMapper();
    SimpleModule module = new SimpleModule();
    module.addDeserializer(Resource.class,new ResourceDeserializer(new AppResourceCommon(new MavenProperties(),new DefaultResourceLoader())));
    this.objectMapper.registerModule(module);
    this.objectMapper.addMixIn(Resource.class,ResourceMixin.class);
    this.objectMapper.addMixIn(AppDeFinition.class,AppDeFinitionMixin.class);
    this.objectMapper.addMixIn(AppDeploymentRequest.class,AppDeploymentRequestMixin.class);
    this.objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS,false);

    this.dataSource = dataSource;
}

正是在这里

module.addDeserializer(Resource.class,new DefaultResourceLoader())));

AppResourceCommon获取一个具有认本地存储库值的MavenProperties对象-$ {user.home} /。M2 / repository /
也许还有其他东西吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)