type | title | linkTitle | weight | description |
---|---|---|---|---|
docs |
How to: Author and manage Dapr Jobs in the Java SDK |
How to: Author and manage Jobs |
20000 |
How to get up and running with Jobs using the Dapr Java SDK |
As part of this demonstration we will schedule a Dapr Job. The scheduled job will trigger an endpoint registered in the same app. With the provided jobs example, you will:
- Schedule a Job Job scheduling example
- Register an endpoint for the Jobs runtime to invoke as part of the schedule Endpoint Registration
This example uses the default configuration from dapr init
in self-hosted mode.
- Dapr CLI and initialized environment.
- Java JDK 11 (or greater):
- Oracle JDK, or
- OpenJDK
- Apache Maven, version 3.x.
- Docker Desktop
Clone the Java SDK repo and navigate into it.
git clone https://github.com/dapr/java-sdk.git
cd java-sdk
Run the following command to install the requirements for running this jobs sample with the Dapr Java SDK.
mvn clean install -DskipTests
From the Java SDK root directory, navigate to the Dapr Workflow example.
cd examples
We'll run a command that starts the Dapr sidecar.
dapr run --app-id jobsapp --dapr-grpc-port 51439 --dapr-http-port 3500 --app-port 8080
Now, Dapr is listening for HTTP requests at
http://localhost:3500
and internal Jobs gRPC requests athttp://localhost:51439
.
In the DemoJobsClient
there are steps to Register a Job. Calling the scheduleJob
on the DaprPreviewClient
will schedule a job with the Dapr Runtime.
public class DemoJobsClient {
/**
* The main method of this app to register and fetch jobs.
*/
public static void main(String[] args) throws Exception {
try (DaprPreviewClient client = new DaprClientBuilder().withPropertyOverrides(overrides).buildPreviewClient()) {
// Schedule a job.
System.out.println("**** Scheduling a Job with name dapr-jobs-1 *****");
ScheduleJobRequest scheduleJobRequest = new ScheduleJobRequest("dapr-job-1",
JobSchedule.fromString("* * * * * *")).setData("Hello World!".getBytes());
client.scheduleJob(scheduleJobRequest).block();
System.out.println("**** Scheduling job dapr-jobs-1 completed *****");
}
}
}
and calling a getJob retrieves the created job details
client.getJob(new GetJobRequest("dapr-job-1")).block()
Command to run the DemoJobsClient
java -jar target/dapr-java-sdk-examples-exec.jar io.dapr.examples.jobs.DemoJobsClient
**** Scheduling a Job with name dapr-jobs-1 *****
**** Scheduling job dapr-jobs-1 completed *****
**** Retrieving a Job with name dapr-jobs-1 *****
The DemoJobsSpringApplication
class starts a Spring Boot application that registers the endpoints specified in the JobsController
This endpoint acts like a callback for the scheduled job requests.
@RestController
public class JobsController {
/**
* Handles jobs callback from Dapr.
*
* @param jobName name of the job.
* @param payload data from the job if payload exists.
* @return Empty Mono.
*/
@PostMapping("/job/{jobName}")
public Mono<Void> handleJob(@PathVariable("jobName") String jobName,
@RequestBody(required = false) byte[] payload) {
System.out.println("Job Name: " + jobName);
System.out.println("Job Payload: " + new String(payload));
return Mono.empty();
}
}
Parameters:
jobName
: The name of the job that triggered the callback.payload
: Optional payload data associated with the job (as a byte array).
Command to run the Spring boot app:
java -jar target/dapr-java-sdk-examples-exec.jar io.dapr.examples.jobs.DemoJobsSpringApplication
Job Name: dapr-job-1
Job Payload: Hello World!
public class DemoJobsClient {
/**
* The main method of this app to register and fetch jobs.
*/
public static void main(String[] args) throws Exception {
try (DaprPreviewClient client = new DaprClientBuilder().buildPreviewClient()) {
// Get a job.
System.out.println("**** Delete a Job with name dapr-jobs-1 *****");
client.deleteJob(new DeleteJobRequest("dapr-job-1")).block();
}
}
}
- [Learn more about Jobs]({{< ref jobs-overview.md >}})
- [Jobs API reference]({{< ref jobs_api.md >}})