【问题标题】:How to integrate spring batch admin console如何集成 Spring Batch 管理控制台
【发布时间】:2017-01-01 22:02:03
【问题描述】:

我正在使用 jhipster,我想在我的 web 应用程序中集成 spring 批处理管理控制台。 (例如http://localhost:8080/batch-console

我尝试在我的 jhipster webapp Is there a way to integrate spring-batch-admin and spring-boot properly? 中集成以下响应,但出现以下错误(似乎未加载属性)

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'loggingConfiguration': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.application.name' in string value "${spring.application.name}"
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:355)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1219)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:761)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:371)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
    at com.mycompany.myapp.JhipsterApp.main(JhipsterApp.java:64)
    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:497)
    at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.application.name' in string value "${spring.application.name}"
    at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174)
    at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126)
    at org.springframework.beans.factory.config.PropertyPlaceholderConfigurer$PlaceholderResolvingStringValueResolver.resolveStringValue(PropertyPlaceholderConfigurer.java:258)
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:813)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1076)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:566)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:349)
    ... 20 common frames omitted

如果我对这些属性进行硬编码以进行测试,我的 jhipster 应用程序将启动,但我得到:

请求网址:http://localhost:8080/ 请求方法:GET 状态码:403 禁止

在我的 Jhipster 应用程序中集成 Spring Batch Admin 需要做什么?

是否需要在我的 pom 中添加以下依赖项?

     <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-batch</artifactId>
    </dependency>

春季启动版本:1.4.1.RELEASE Jhipster 版本:3.8.0

谢谢

【问题讨论】:

    标签: spring-batch jhipster spring-batch-admin


    【解决方案1】:

    您不必添加 spring-boot。 JHipster 是一个弹簧启动应用程序。至于spring-batch-admin,我在文档中看到的是一个使用 Spring MVC 的 Web UI,它实际上也是 JHipster 堆栈的一部分,但是 JHipster 使用带有 AngularJS 的单页应用程序作为客户端,它正在消耗 REST 服务,即集成批处理管理应用程序时可能会遇到一些问题。

    你的

    请求 URL:http://localhost:8080/ 请求方法:GET 状态码:403 Forbidden 表示在你的授权下有一些变化 http://localhost:8080/ 是 JHipster 应用程序中的正常入口点。

    作为解决方案,我建议使用micro service approach。 spring-batch-admin 的文档表明有 RESTful (JSON) API。这将完全适合微服务应用程序。

    【讨论】:

    • 我正在考虑使用微服务架构,但我的 jhipster 应用程序(我客户的 jhipster 应用程序)是一个单体应用程序。在github.com/codecentric/spring-batch-admin-spring-boot 之后,我可以将spring batch admin 与spring boot 应用程序一起使用,所以我认为可以在整体架构中将它与jhipster 一起使用,但我得到了上面提到的错误。你有什么想法/建议吗?
    • 看了一下推荐的示例项目,我可以说与spring-boot的集成主要是使用嵌入式Tomcat。我看到的 spring-batch-admin 是 spring-batch 的 ui。这个 ui 没有使用 AngularJS,而 JHipster ui 使用的是 AngularJS。因此,您需要查看 spring-batch-admin 提供的 REST API 并尝试在 JHipster ui 中使用它们。您还需要查看 spring-batch-admin 以不覆盖配置,例如JHipster 的授权,应用程序中的入口点。也许您可以将 JHipster 作为插件开始集成。
    • 感谢您的回复和建议,我会看看插件建议。但是我已经在使用 extjs 前端构建的 webapp 中集成了 Spring 批处理管理,但它不是 Spring Boot 应用程序,并且配置是 xml 配置(添加到 web.xml 的 servlet 映射)。所以我认为可以将它与 angularjs 应用程序(jhipster 应用程序)集成,但我不知道如何......如果你找到解决方案......我会很乐意阅读它。
    猜你喜欢
    • 1970-01-01
    • 2018-08-16
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多