我已将 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 个更改解决了问题:-
- 将 spring-batch-admin 的版本从 1.2.2.RELEASE 更改为 1.3.1.RELEASE
并添加 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/