Click here to Skip to main content
14,459,276 members
Rate this:
Please Sign up or sign in to vote.
Hi, I am new to springboot. I created an API which run some process that takes around one hour and return the result. The problem is if I submit two process parallel, I am getting the same output. Pls check the below code and give me suggestions

Looks like ProcessService working on a same instance of the class because I am the last submitted output for both cases. What is wrong in this code? Any solution. pls advise

What I have tried:

public class ProcessController {

	TaskRepository taskRepository;
	ProcessService processService;
	@RequestMapping(value = "/process", method = RequestMethod.POST, consumes = "application/json", produces = "application/json")
	public Map<String, Object> process(@RequestBody String requestBody) throws Exception {
		Map<String, Object> result = new LinkedHashMap<String, Object>();
		long taskId=0;
		try {

			ParameterClass param =null ;
			JSONObject requestJson = new JSONObject(requestBody);
			taskId = Long.valueOf(requestJson.getString("taskid"));
			List<Task> lst = taskRepository.findByTaskId(taskId);
			Task task = -> p.getParameterName().equals("process_task"))
			if (task != null) {
				String parameterArgs = task.getParameterArg();
				param = setParameters(parameterArgs);
				//Log process take around one hour
				result = processService.ProcessJob(param);

		} catch (Exception ex) {
			result.put("taskid", taskId);
			result.put("status", "failed");
			result.put("message", ex.getMessage());

		} finally {
			return result;

public class ProcessServiceImpl implements ProcessService {

	//Oracle DB connection
	private dataLayer dbLayer 						= null;
	//Setting the parameters
	private  ProcessParameter inputParam				= null;
	//Storing output 
	private LinkedHashMap<String, Object> outputResult 		= null;
	//storing Log details
	private StringBuilder sbLog						= null;
	public Map<String, Object> ProcessJob(ProcessParameter param) throws Exception {
			outputResult.put("jobid", param.getTask_id());
			outputResult.put("startdate", new SimpleDateFormat("dd/MM/yyyy hh:mm:ss a").format(System.currentTimeMillis()));
			sbLog.append("taskid= " + param.getTask_id() + ")\n");
			inputParam = param;
			// Initialize the dabaLayer object
			dbLayer = new dataLayer(param.getServer_name(), param.getDatasource(), param.getUsername(),param.getPassword());
			if (!dbLayer.openConnection())
				throw new Exception("Unable to open oracle database connection ");

			//Here do the process 
			//Loop through the job details and get the details from oracle db
			sStatus = "success";
		} catch (Exception ex) {
			sStatus = "failed";
			outputResult.put("message", ex.getMessage());
			outputResult.put("status",sStatus );
			sbLog.append("returing output for " + param.getJob_id() + "\n");
			outputResult.put("log", sbLog.toString() );
			return outputResult;

{ "taskid"= 201 }

    "taskid": 260,
    "status": "success",
    "log"   : "taskid=260
               returning output for 260"

{ "taskid"= 260 }

    "taskid": 260,
    "status": "success",
    "log"   : "taskid=260
               returning output for 260"
Afzaal Ahmad Zeeshan 3-Aug-19 9:26am
Interesting, perhaps the problems is that a new job overrides the previous one.
leoiser 3-Aug-19 11:25am
Yes its something like that but some cases both job failed after sometime because there is a condition based on the job could not find in DB. Anything wrong in my code?
wseng 4-Aug-19 12:36pm
Have you tried using postman ?
leoiser 5-Aug-19 7:32am
Yes use postman only

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100