Tại bài báo này mình sẽ thực hiện tạo một JobRepository.
JobRepository là gì ?
1. Khái niệm.
CRUD trong SQL:
Operation SQL Create INSERT Read SELECT Update UPDATE Delete DELETE JobRepository
Repository responsible for persistence of batch meta-data entities.
Nhiệm vụ thực hiện lưu trữ và đưa thông tin đôi tượng (object) vào đúng bản cài đặt của Spring Batch.
Table Object BATCH_JOB_INSTANCE JobInstance BATCH_JOB_EXECUTION JobExecution BATCH_JOB_EXECUTION_PARAMS JobParameters BATCH_STEP_EXECUTION StepExecution BATCH_JOB_EXECUTION_CONTEXT ExecutionContext BATCH_STEP_EXECUTION_CONTEXT ExecutionContext
2. Tạo một project demo.
Truy cập vào spring initializr để tạo một project
Add các thư viện cần thiết vào project:
Click chọn:
3. Cài dặt resource.
Tại file application.properties thực hiện config khởi tạo tables.
12spring.batch.initialize-schema=alwaysTạo một class config connect database MySQL
1234567891011121314<span class="token annotation punctuation">@Configuration</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">DataSourceConfiguration</span> <span class="token punctuation">{</span><span class="token annotation punctuation">@Bean</span><span class="token keyword">public</span> <span class="token class-name">DataSource</span> <span class="token function">dataSource</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token keyword">return</span> <span class="token class-name">DataSourceBuilder</span><span class="token punctuation">.</span><span class="token function">create</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">username</span><span class="token punctuation">(</span><span class="token string">"root"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">password</span><span class="token punctuation">(</span><span class="token string">"root"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">url</span><span class="token punctuation">(</span><span class="token string">"jdbc:mysql://localhost:3306/testdb"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token punctuation">}</span>Tạo config cho jobRepository
123456789101112131415161718192021222324252627282930313233343536373839<span class="token annotation punctuation">@Configuration</span><span class="token annotation punctuation">@EnableBatchProcessing</span><span class="token annotation punctuation">@Import</span><span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token class-name">DataSourceConfiguration</span><span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">BatchConfig</span> <span class="token keyword">implements</span> <span class="token class-name">BatchConfigurer</span> <span class="token punctuation">{</span><span class="token annotation punctuation">@Autowired</span><span class="token keyword">private</span> <span class="token class-name">DataSource</span> dataSource<span class="token punctuation">;</span><span class="token annotation punctuation">@Bean</span><span class="token keyword">public</span> <span class="token class-name">JobRepository</span> <span class="token function">jobRepository</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Exception</span> <span class="token punctuation">{</span><span class="token keyword">return</span> <span class="token function">getJobRepository</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token annotation punctuation">@Bean</span><span class="token keyword">public</span> <span class="token class-name">PlatformTransactionManager</span> <span class="token function">platformTransactionManager</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Exception</span> <span class="token punctuation">{</span><span class="token keyword">return</span> <span class="token function">getTransactionManager</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token annotation punctuation">@Override</span><span class="token keyword">public</span> <span class="token class-name">JobRepository</span> <span class="token function">getJobRepository</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Exception</span> <span class="token punctuation">{</span><span class="token keyword">return</span> <span class="token function">createJobRepository</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">protected</span> <span class="token class-name">JobRepository</span> <span class="token function">createJobRepository</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Exception</span> <span class="token punctuation">{</span><span class="token class-name">JobRepositoryFactoryBean</span> factory <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">JobRepositoryFactoryBean</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>factory<span class="token punctuation">.</span><span class="token function">setDataSource</span><span class="token punctuation">(</span>dataSource<span class="token punctuation">)</span><span class="token punctuation">;</span>factory<span class="token punctuation">.</span><span class="token function">setTransactionManager</span><span class="token punctuation">(</span><span class="token function">getTransactionManager</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>factory<span class="token punctuation">.</span><span class="token function">afterPropertiesSet</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> factory<span class="token punctuation">.</span><span class="token function">getObject</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token annotation punctuation">@Override</span><span class="token keyword">public</span> <span class="token class-name">PlatformTransactionManager</span> <span class="token function">getTransactionManager</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Exception</span> <span class="token punctuation">{</span><span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">DataSourceTransactionManager</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>dataSource<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">}</span>Thực hiện run lần dầu ta được một nhóm tables hệ thống của Spring Batch
4. Class Controller
Tiếp theo tạo một class controller gửi một request url để thực hiện tạo một JobExecution
123456789101112131415161718192021222324<span class="token annotation punctuation">@Controller</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">RequestRepositoryExample</span> <span class="token punctuation">{</span><span class="token annotation punctuation">@Autowired</span><span class="token keyword">private</span> <span class="token class-name">JobRepository</span> jobRepository<span class="token punctuation">;</span><span class="token annotation punctuation">@Autowired</span><span class="token keyword">private</span> <span class="token class-name">DefaultBatchConfigurer</span> defaultBatchConfigurer<span class="token punctuation">;</span><span class="token annotation punctuation">@RequestMapping</span><span class="token punctuation">(</span>value <span class="token operator">=</span> <span class="token string">"/jobRepository"</span><span class="token punctuation">,</span> method <span class="token operator">=</span> <span class="token class-name">RequestMethod</span><span class="token punctuation">.</span>GET<span class="token punctuation">)</span><span class="token annotation punctuation">@ResponseBody</span><span class="token keyword">public</span> <span class="token class-name">String</span> <span class="token function">execute</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Exception</span> <span class="token punctuation">{</span><span class="token comment">// Creating params</span><span class="token class-name">JobParametersBuilder</span> jobParametersBuilder <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">JobParametersBuilder</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>jobParametersBuilder<span class="token punctuation">.</span><span class="token function">addString</span><span class="token punctuation">(</span><span class="token string">"firstParamter"</span><span class="token punctuation">,</span> <span class="token string">"1"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">// Register</span>defaultBatchConfigurer<span class="token punctuation">.</span><span class="token function">getJobRepository</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">createJobExecution</span><span class="token punctuation">(</span><span class="token string">"jobName"</span><span class="token punctuation">,</span> jobParametersBuilder<span class="token punctuation">.</span><span class="token function">toJobParameters</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> <span class="token string">"<h1>Batch Success</h1>"</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token punctuation">}</span>
5. Kiểm tra
Thực hiện gửi một request “/jobRepository”
Kiểm tra Job với tên “jobName” đã được đăng ký được chưa.
Đã đang ký params ở của job thành công chưa.
Vậy là đã thực hiện đăng ký thành thành công một Job thông qua class jobRepository.
Có gì không đúng mong mọi người góp ý.