java - 无法在本地 tomcat(spring boot 嵌入式)服务器上运行 Spring Boot 1.5.10.RELEASE

标签 java spring spring-boot jmx

我已将 spring 应用程序迁移到 springBoot1.5.10.RLEASE。

我在尝试在本地服务器上运行应用程序时遇到以下错误,需要帮助来解决此错误:

2018-02-14 18:51:24.173 WARN 12028 --- [ main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'batchMBeanExporter' defined in class path resource [app-context.xml]: Cannot create inner bean 'org.springframework.aop.framework.ProxyFactoryBean#5287ba5f' of type [org.springframework.aop.framework.ProxyFactoryBean] while setting bean property 'jobService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.aop.framework.ProxyFactoryBean#5287ba5f': FactoryBean threw exception on object creation; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'jobService' available

bean 创建仍然与 springboot 迁移之前相同:-

<bean id="batchMBeanExporter" class="org.springframework.batch.admin.jmx.BatchMBeanExporter">
        <property name="server" ref="mbeanServer" />
        <property name="jobService">
            <bean class="org.springframework.aop.framework.ProxyFactoryBean">
                <property name="targetName" value="jobService" />
                <property name="interceptorNames" value="cacheInterceptor" />
            </bean>
        </property>
        <property name="defaultDomain" value="etl.web.spring.application" />
        <property name="excludedBeans">
        <list>
            <value>integrationMBeanExporter</value>
        </list>
        </property>
</bean>

------------ 更新部分解决方案 ---------- 以下 2 个更改解决了问题:-

  1. 将 spring-batch-admin 的版本从 1.2.2.RELEASE 更改为 1.3.1.RELEASE
  2. 并添加 jobService bean

但现在我遇到了异常,因为 SimpleEhCacheInterceptor 已从 Spring Batch admin 1.3.1 中删除。有关如何在 Spring Batch admin 1.3.1 版本中替换此属性的任何线索-

java.lang.ClassNotFoundException: org.springframework.batch.admin.util.SimpleEhCacheInterceptor
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_101]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_101]
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) ~[na:1.8.0_101]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_101]
    at org.springframework.util.ClassUtils.forName(ClassUtils.java:250) ~[spring-core-4.3.14.RELEASE.jar:4.3.14.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:401) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1432) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1377) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
    ... 30 common frames omitted

cachInterceptor 的 Bean-

<bean id="cacheInterceptor" class="org.springframework.batch.admin.util.SimpleEhCacheInterceptor" >
        <property name="cacheName" value="webSimple_${env}"/>
</bean>

最佳答案

Now I am able to start the server without any of the above mentioned issues.

SimpleEhCacheInterceptor is removed from version 1.3.0 to remove explicit caching instead caching is implemented internally in version 1.3.0 of spring batch admin manager. JIRA for the same  https://jira.spring.io/browse/BATCHADM-133

After removing cacheInterceptor, application was throwing below issue-
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'batchMBeanExporter' defined in class path resource [app-context.xml]: Cannot create inner bean 'org.springframework.aop.framework.ProxyFactoryBean#4ae2e781' of type [org.springframework.aop.framework.ProxyFactoryBean] while setting bean property 'jobService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.aop.framework.ProxyFactoryBean#4ae2e781': Post-processing of FactoryBean's object failed; nested exception is java.lang.IllegalStateException: Need to invoke method 'removeInactiveExecutions' declared on target class 'SimpleJobService', but not found in any interface(s) of the exposed proxy type. Either pull the method up to an interface or switch to CGLIB proxies by enforcing proxy-target-class mode in your configuration.

have set the proxyTargetClass property to true, now the embedded tomcat with spring boot is starting up without any issue.

https://github.com/spring-projects/spring-batch-admin-samples/issues/12 Spring 文档 - https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/aop-api.html#aop-pfb-proxy-types JIRA 同样 - https://jira.spring.io/browse/BATCHADM-126

working configuration:-
Spring batch admin manager version 1.3.1

    <bean id="batchMBeanExporter" class="org.springframework.batch.admin.jmx.BatchMBeanExporter">
        <property name="server" ref="mbeanServer" />
        <property name="jobService">
            <bean class="org.springframework.aop.framework.ProxyFactoryBean">
                <property name="targetName" value="jobService" />
                <property name="proxyTargetClass" value="true"/>
            </bean>
        </property>
        <property name="defaultDomain" value="spring.application" />
    </bean>

<bean id="jobService" class="org.springframework.batch.admin.service.SimpleJobServiceFactoryBean">
    <property name="jobRepository" ref="jobRepository"/>
    <property name="jobLauncher" ref="jobLauncher"/>
    <property name="jobLocator" ref="jobRegistry"/>
    <property name="dataSource" ref="dataSource"/>
</bean>

关于java - 无法在本地 tomcat(spring boot 嵌入式)服务器上运行 Spring Boot 1.5.10.RELEASE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48788459/

相关文章:

java - Spring数据jpa中具有复合PK的表的 native 查询

java - CheckBoxTableCell 如何传播更改回来?

java - 如何在spring mvc中的每个请求之前附加一个单词?

java - 在 Spring 中访问远程 JNDI

java - Spring Security - 需要添加自定义cookie

在 pom.xml 中添加 tomcat-embed-jasper Artifact 后,Java 应用程序抛出错误

java - Robocode(java): how can I make my robot change color depending on the result of getEnergy()?

java - 使用 Try Catch 异常处理或显式检查

java - 在目标而不是代理实例上调用 @Transactional 的方法

java - Spring-boot,通过数据库平台自定义属性