-
Notifications
You must be signed in to change notification settings - Fork 48
/
Copy pathUserObjectJobRunner.java
92 lines (78 loc) · 4.61 KB
/
UserObjectJobRunner.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package com.googlecode.scheme2ddl;
import oracle.jdbc.pool.OracleDataSource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.batch.core.*;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.util.Assert;
import java.util.List;
import java.util.Map;
/**
* @author A_Reshetnikov
* @since Date: 22.10.2012
*/
public class UserObjectJobRunner {
protected static final Log logger = LogFactory.getLog(UserObjectJobRunner.class);
private JobLauncher launcher;
int start(ConfigurableApplicationContext context, boolean launchedByDBA, String objectFilter, String typeFilter, String typeFilterMode, String ddlTimeAfter, String ddlTimeBefore, String ddlTimeIn) throws Exception {
try {
context.getAutowireCapableBeanFactory().autowireBeanProperties(this,
AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, false);
Assert.state(launcher != null, "A JobLauncher must be provided. Please add one to the configuration.");
Job job = (Job) context.getBean("job1");
List<String> schemaList = (List<String>) context.getBean("schemaList");
Assert.state(schemaList != null && schemaList.size()!=0, "schemaList must be provided. Please add one to the configuration. ");
logger.info(String.format("Will try to process schema %s %s ", schemaList.size() > 1 ? "list" : "", schemaList));
for (String schemaName : schemaList){
JobParametersBuilder parametersBuilder = new JobParametersBuilder();
parametersBuilder.addString("schemaName", schemaName);
parametersBuilder.addString("launchedByDBA", Boolean.toString(launchedByDBA));
parametersBuilder.addString("objectFilter", objectFilter);
parametersBuilder.addString("typeFilter", typeFilter);
parametersBuilder.addString("typeFilterMode", typeFilterMode);
parametersBuilder.addString("ddlTimeAfter", ddlTimeAfter);
parametersBuilder.addString("ddlTimeBefore", ddlTimeBefore);
parametersBuilder.addString("ddlTimeIn", ddlTimeIn);
JobParameters jobParameters = parametersBuilder.toJobParameters();
logger.trace(String.format("Start spring batch job with parameters %s", jobParameters));
JobExecution jobExecution = launcher.run(job, jobParameters);
//write some log
writeJobExecutionStatus(jobExecution, jobParameters);
if (jobExecution.getStatus().isUnsuccessful()){
throw new Exception(String.format("Job %s unsuccessful", jobParameters));
}
}
logger.info(String.format("Processing schema %s %s completed ", schemaList.size() > 1 ? "list" : "", schemaList));
return 1;
} catch (Exception e) {
String message = "Job Terminated in error: " + e.getMessage();
logger.error(message, e);
throw e;
} finally {
if (context != null) {
context.close();
}
}
}
private JobParameters getJobParameters(String schemaName, boolean launchedByDBA) {
JobParametersBuilder parametersBuilder = new JobParametersBuilder();
parametersBuilder.addString("schemaName", schemaName.toUpperCase());
parametersBuilder.addString("launchedByDBA", Boolean.toString(launchedByDBA));
return parametersBuilder.toJobParameters();
}
private void writeJobExecutionStatus(JobExecution jobExecution, JobParameters jobParameters) {
StepExecution step = jobExecution.getStepExecutions().toArray(new StepExecution[]{})[0];
String schemaName = jobParameters.getString("schemaName");
logger.info(String.format("Written %d ddls with user objects from total %d in schema %s",
step.getWriteCount(), step.getReadCount(), schemaName));
logger.info(String.format("Skip processing %d user objects from total %d in schema %s",
step.getFilterCount(), step.getReadCount(), schemaName));
long seconds = ((step.getEndTime().getTime()-step.getStartTime().getTime())/1000);
logger.info(String.format("scheme2ddl of schema %s %s in %d seconds", schemaName, jobExecution.getStatus().toString().toLowerCase(), seconds));
}
public void setLauncher(JobLauncher launcher) {
this.launcher = launcher;
}
}