· 8 years ago · Mar 13, 2018, 08:30 AM
1Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jobBuilders' defined in class path resource [org/springframework/batch/core/configuration/annotation/SimpleBatchConfiguration.class]: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public org.springframework.batch.core.configuration.annotation.JobBuilderFactory org.springframework.batch.core.configuration.annotation.AbstractBatchConfiguration.jobBuilders() throws java.lang.Exception] threw exception; nested exception is java.lang.ClassCastException: org.springframework.batch.core.repository.support.JobRepositoryFactoryBean$$EnhancerBySpringCGLIB$$49fa0273 cannot be cast to org.springframework.batch.core.repository.JobRepository
2 at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:597)
3 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1095)
4 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:990)
5 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)
6 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
7 at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
8 at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
9 at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
10 at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
11 at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:706)
12 at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:762)
13 at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
14 at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:109)
15 at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:691)
16 at org.springframework.boot.SpringApplication.run(SpringApplication.java:320)
17 at org.springframework.boot.SpringApplication.run(SpringApplication.java:952)
18 at org.springframework.boot.SpringApplication.run(SpringApplication.java:941)
19 at demo.Application.main(Application.java:35)
20Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public org.springframework.batch.core.configuration.annotation.JobBuilderFactory org.springframework.batch.core.configuration.annotation.AbstractBatchConfiguration.jobBuilders() throws java.lang.Exception] threw exception; nested exception is java.lang.ClassCastException: org.springframework.batch.core.repository.support.JobRepositoryFactoryBean$$EnhancerBySpringCGLIB$$49fa0273 cannot be cast to org.springframework.batch.core.repository.JobRepository
21 at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:188)
22 at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:586)
23 ... 17 more
24Caused by: java.lang.ClassCastException: org.springframework.batch.core.repository.support.JobRepositoryFactoryBean$$EnhancerBySpringCGLIB$$49fa0273 cannot be cast to org.springframework.batch.core.repository.JobRepository
25 at org.springframework.batch.core.configuration.annotation.SimpleBatchConfiguration$$EnhancerBySpringCGLIB$$b5c6eb04.jobRepository(<generated>)
26 at org.springframework.batch.core.configuration.annotation.AbstractBatchConfiguration.jobBuilders(AbstractBatchConfiguration.java:58)
27 at org.springframework.batch.core.configuration.annotation.SimpleBatchConfiguration$$EnhancerBySpringCGLIB$$b5c6eb04.CGLIB$jobBuilders$8(<generated>)
28 at org.springframework.batch.core.configuration.annotation.SimpleBatchConfiguration$$EnhancerBySpringCGLIB$$b5c6eb04$$FastClassBySpringCGLIB$$d88bd05f.invoke(<generated>)
29 at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
30 at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:312)
31 at org.springframework.batch.core.configuration.annotation.SimpleBatchConfiguration$$EnhancerBySpringCGLIB$$b5c6eb04.jobBuilders(<generated>)
32 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
33 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
34 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
35 at java.lang.reflect.Method.invoke(Unknown Source)
36 at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:166)
37 ... 18 more
38
39@Configuration
40@ImportResource({"classpath:/org/springframework/batch/admin/web/resources/servlet-config.xml",
41 "classpath:/org/springframework/batch/admin/web/resources/webapp-config.xml"})
42public class BatchAdminConfiguration {
43}
44
45@Configuration
46@EnableBatchProcessing
47public class BatchImporterConfiguration {
48}
49
50@Autowired
51JobRepository jobRepository;
52@Autowired
53PlatformTransactionManager transactionManager;
54
55@Bean
56public JobBuilderFactory jobBuilderFactory() {
57 return new JobBuilderFactory(jobRepository);
58}
59
60@Bean
61public StepBuilderFactory stepBuilderFactory() {
62 return new StepBuilderFactory(jobRepository, transactionManager);
63}
64
65@Configuration
66@EnableWebMvc
67@ImportResource({"classpath*:/META-INF/spring/batch/bootstrap/**/*.xml"
68 , "classpath*:/META-INF/spring/batch/override/**/*.xml"
69 , "classpath*:/org/springframework/batch/admin/web/resources/webapp-config.xml"
70 , "classpath*:/META-INF/spring/batch/servlet/manager/**/*.xml"
71 , "classpath:base-menu-config.xml"
72 })
73public class SpringBatchAdminConfig extends WebMvcConfigurerAdapter {
74
75 @Override
76 public void addResourceHandlers(final ResourceHandlerRegistry registry) {
77 registry.addResourceHandler("/resources/**").addResourceLocations("classpath:/META-INF/");
78 }
79
80 @Bean
81 public SimpleControllerHandlerAdapter simpleControllerHandlerAdapter() {
82 return new SimpleControllerHandlerAdapter();
83 }
84
85 @Bean
86 public BeanNameUrlHandlerMapping beanNameUrlHandlerMapping() {
87 return new BeanNameUrlHandlerMapping();
88 }
89
90 @Bean
91 public BeanNameViewResolver beanNameViewResolver() {
92 return new BeanNameViewResolver();
93 }
94
95 @Bean(name = "defaultResources")
96 public PropertiesFactoryBean defaultResources() {
97 return new PropertiesFactoryBean();
98 }
99
100 @Bean(name = "jsonResources")
101 public PropertiesFactoryBean jsonResources() {
102 return new PropertiesFactoryBean();
103 }
104
105 @Bean
106 public HomeController homeController() throws IOException {
107 HomeController homeController = new HomeController();
108 homeController.setDefaultResources(defaultResources().getObject());
109 homeController.setJsonResources(jsonResources().getObject());
110 return homeController;
111 }
112
113 @Bean
114 public MenuManager menuManager() {
115 return new MenuManager();
116 }
117
118 @Bean(name = "freemarkerConfig")
119 public HippyFreeMarkerConfigurer hippyFreeMarkerConfigurer() {
120 HippyFreeMarkerConfigurer hippyFreeMarkerConfigurer = new HippyFreeMarkerConfigurer();
121 hippyFreeMarkerConfigurer.setTemplateLoaderPaths("/WEB-INF/web", "classpath:/org/springframework/batch/admin/web");
122 hippyFreeMarkerConfigurer.setPreferFileSystemAccess(false);
123 hippyFreeMarkerConfigurer.setFreemarkerVariables(Collections.singletonMap("menuManager", (Object) menuManager()));
124 Properties freemarkerSettings = new Properties();
125 freemarkerSettings.put("default_encoding", "UTF-8");
126 freemarkerSettings.put("output_encoding", "UTF-8");
127 hippyFreeMarkerConfigurer.setFreemarkerSettings(freemarkerSettings);
128 return hippyFreeMarkerConfigurer;
129 }
130
131 public AjaxFreeMarkerView parentLayout() {
132 AjaxFreeMarkerView ajaxFreeMarkerView = new AjaxFreeMarkerView();
133 FreeMarkerViewResolver freeMarkerViewResolver = new FreeMarkerViewResolver();
134 freeMarkerViewResolver.setExposeSpringMacroHelpers(false);
135 freeMarkerViewResolver.setAllowRequestOverride(true);
136 ajaxFreeMarkerView.setViewResolver(freeMarkerViewResolver);
137 Properties attributes = new Properties();
138 attributes.put("titleCode", "home.title");
139 attributes.put("titleText", "Spring Batch Admin");
140 ajaxFreeMarkerView.setAttributes(attributes);
141 return ajaxFreeMarkerView;
142 }
143
144 @Value("#{resourceService.servletPath}")
145 private String servletPath;
146
147 @Bean(name="standard")
148 public AjaxFreeMarkerView standard() {
149 AjaxFreeMarkerView standard = parentLayout();
150 standard.setUrl("/layouts/html/standard.ftl");
151 standard.setContentType("text/html;charset=UTF-8");
152 standard.getAttributesMap().put("body", "/layouts/html/home.ftl");
153 standard.getAttributesMap().put("servletPath", servletPath);
154 return standard;
155 }
156
157 @Bean(name="standard.rss")
158 public AjaxFreeMarkerView standardRss() {
159 AjaxFreeMarkerView standardRss = parentLayout();
160 standardRss.setUrl("/layouts/html/standard.ftl");
161 standardRss.setContentType("text/xml");
162 standardRss.getAttributesMap().put("body", "/layouts/rss/home.ftl");
163 standardRss.getAttributesMap().put("servletPath", servletPath);
164 return standardRss;
165 }
166
167 @Bean(name="standard.json")
168 public AjaxFreeMarkerView standardJson() {
169 AjaxFreeMarkerView standardJson = parentLayout();
170 standardJson.setUrl("/layouts/json/standard.ftl");
171 standardJson.setContentType("application/json");
172 standardJson.getAttributesMap().put("body", "/layouts/json/home.ftl");
173 standardJson.getAttributesMap().put("servletPath", servletPath);
174 return standardJson;
175 }
176
177 @Bean(name="home")
178 public AjaxFreeMarkerView home() {
179 return standard();
180 }
181
182 @Bean(name="home.json")
183 public AjaxFreeMarkerView homeJson() {
184 AjaxFreeMarkerView homeJson = standardJson();
185 homeJson.getAttributesMap().put("body", "/layouts/json/home.ftl");
186 return homeJson;
187 }
188
189
190}
191
192<?xml version="1.0" encoding="UTF-8"?>
193<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
194 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
195
196 <bean id="baseMenu" abstract="true">
197 <property name="prefix" value="#{resourceService.servletPath}" />
198 </bean>
199
200</beans>
201
202<dependency>
203 <groupId>org.springframework.batch</groupId>
204 <artifactId>spring-batch-admin-manager</artifactId>
205 <version>1.3.1.RELEASE</version>
206</dependency>
207<dependency>
208 <groupId>hsqldb</groupId>
209 <artifactId>hsqldb</artifactId>
210 <scope>runtime</scope>
211 <version>1.8.0.10</version>
212</dependency>
213
214# Default placeholders for database platform independent features
215batch.remote.base.url=http://localhost:8080/spring-batch-admin-sample
216# Non-platform dependent settings that you might like to change
217batch.job.configuration.file.dir=/tmp/config
218
219build.artifactId=1
220build.version=1
221build.buildNumber=1
222build.timestamp=1
223log.enableConsole=true
224
225# Placeholders batch.*
226# for HSQLDB:
227batch.jdbc.driver=org.hsqldb.jdbcDriver
228batch.jdbc.url=jdbc:hsqldb:mem:testdb;sql.enforce_strict_size=true
229# Override and use this one in for a separate server process so you can inspect
230# the results (or add it to system properties with -D to override at run time).
231# batch.jdbc.url=jdbc:hsqldb:hsql://localhost:9005/samples
232batch.jdbc.user=sa
233batch.jdbc.password=
234batch.database.incrementer.class=org.springframework.jdbc.support.incrementer.HsqlMaxValueIncrementer
235batch.schema.script=classpath*:/org/springframework/batch/core/schema-hsqldb.sql
236batch.drop.script=classpath*:/org/springframework/batch/core/schema-drop-hsqldb.sql
237batch.business.schema.script=classpath:/business-schema-hsqldb.sql
238
239# Non-platform dependent settings that you might like to change
240# batch.data.source.init=true
241
242DROP TABLE ERROR_LOG IF EXISTS;
243CREATE TABLE ERROR_LOG (
244 JOB_NAME CHAR(20) ,
245 STEP_NAME CHAR(20) ,
246 MESSAGE VARCHAR(300) NOT NULL
247) ;