2013-06-17 31 views

Trả lời

5

Chỉ sử dụng Spel, không có cách nào để truy cập vào id công việc. Bạn có thể sử dụng một JobExecutionListener để thêm nó vào executionContext và sau đó nó sẽ có sẵn thông qua những gì bạn đang cố gắng.

+0

Bạn có thể cung cấp bất kỳ mã/liên kết mẫu nào không? –

+0

Xem ví dụ được làm việc bên dưới – emeraldjava

+0

@MichaelMinella Câu trả lời này khá cũ, tôi nghĩ rằng nó đáng để cập nhật. Cả '# {jobExecution.jobInstance.instanceId}' và '# {jobExecution.jobId}' đều cung cấp giá trị của id cá thể cho tôi. – jihor

3

Ví dụ được làm việc sẽ trông giống như thế này. Lớp JobExecutionListener của bạn có quyền truy cập vào JobExecution và nó sao chép jobId thành executionContext.

public class JobIdToContextExecutionListener implements JobExecutionListener { 

    public void beforeJob(JobExecution jobExecution) { 
     long jobId = jobExecution.getJobId(); 
     jobExecution.getExecutionContext().put("jobId",jobId); 
    } 

    .. 
} 

Trong bối cảnh mùa xuân của bạn, sau đó bạn có thể tham khảo các jobId qua SpEL như

#{stepExecution.jobExecution.jobId} 

hoặc

#{jobExecutionContext.jobId} 

Xem Luca's answer on referencing late-binding parameters here.

1

#{stepExecution.jobExecution.id} hoặc #{stepExecution.jobExecutionId} sẽ hoạt động.

StepContextkhông cung cấp quyền truy cập vào StepExecution để kết buộc muộn thông qua biểu thức SpEL.

0

Sử dụng phạm vi = "bước" và sau đó biểu thức trong truy vấn của bạn (hoặc thông số của nó): # {stepExecution.jobExecution.id} (gốc của biểu thức là StepContext).

Các vấn đề liên quan