Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
J
java-training-project-complete
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Muhammad Abdul Qadeer Farooqui
java-training-project-complete
Commits
0a62c47d
Commit
0a62c47d
authored
Jul 20, 2022
by
Muhammad Abdul Qadeer Farooqui
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add Completable future
parent
ecce843f
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
83 additions
and
26 deletions
+83
-26
workspace.xml
student-service/student-service/.idea/workspace.xml
+1
-18
TeacherServiceApplication.java
...n/java/com/example/teacher/TeacherServiceApplication.java
+2
-0
TeacherController.java
...ava/com/example/teacher/controller/TeacherController.java
+55
-5
TeacherService.java
...main/java/com/example/teacher/service/TeacherService.java
+25
-3
TeacherServiceApplication.class
...asses/com/example/teacher/TeacherServiceApplication.class
+0
-0
TeacherController.class
...es/com/example/teacher/controller/TeacherController.class
+0
-0
TeacherService.class
.../classes/com/example/teacher/service/TeacherService.class
+0
-0
No files found.
student-service/student-service/.idea/workspace.xml
View file @
0a62c47d
...
...
@@ -5,25 +5,8 @@
</component>
<component
name=
"ChangeListManager"
>
<list
default=
"true"
id=
"bd185af2-024c-4245-af2c-5893b8b011d9"
name=
"Changes"
comment=
""
>
<change
afterPath=
"$PROJECT_DIR$/src/main/java/com/example/student/mapper/StudentMapper.java"
afterDir=
"false"
/>
<change
afterPath=
"$PROJECT_DIR$/../../teacher-service/teacher-service/src/main/java/com/example/teacher/dto/ErrorDto.java"
afterDir=
"false"
/>
<change
afterPath=
"$PROJECT_DIR$/../../teacher-service/teacher-service/src/main/java/com/example/teacher/dto/TeacherDto.java"
afterDir=
"false"
/>
<change
afterPath=
"$PROJECT_DIR$/../../teacher-service/teacher-service/src/main/java/com/example/teacher/mapper/TeacherMapper.java"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/.idea/workspace.xml"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/.idea/workspace.xml"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/pom.xml"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/pom.xml"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/src/main/java/com/example/student/controller/StudentController.java"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/src/main/java/com/example/student/controller/StudentController.java"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/src/main/java/com/example/student/dto/StudentDto.java"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/src/main/java/com/example/student/dto/StudentDto.java"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/src/main/java/com/example/student/dto/TeacherDto.java"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/src/main/java/com/example/student/dto/TeacherDto.java"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/src/main/java/com/example/student/feign/FeignFallBack.java"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/src/main/java/com/example/student/feign/FeignFallBack.java"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/src/main/java/com/example/student/responseobject/StudentTeacherResponseVO.java"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/src/main/java/com/example/student/responseobject/StudentTeacherResponseVO.java"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/src/main/java/com/example/student/service/StudentService.java"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/src/main/java/com/example/student/service/StudentService.java"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/target/classes/com/example/student/controller/StudentController.class"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/target/classes/com/example/student/controller/StudentController.class"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/target/classes/com/example/student/dto/StudentDto.class"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/target/classes/com/example/student/dto/StudentDto.class"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/target/classes/com/example/student/dto/TeacherDto.class"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/target/classes/com/example/student/dto/TeacherDto.class"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/target/classes/com/example/student/feign/FeignFallBack.class"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/target/classes/com/example/student/feign/FeignFallBack.class"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/target/classes/com/example/student/responseobject/StudentTeacherResponseVO.class"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/target/classes/com/example/student/responseobject/StudentTeacherResponseVO.class"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/target/classes/com/example/student/service/StudentService.class"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/target/classes/com/example/student/service/StudentService.class"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/../../teacher-service/teacher-service/pom.xml"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/../../teacher-service/teacher-service/pom.xml"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/../../teacher-service/teacher-service/src/main/java/com/example/teacher/TeacherServiceApplication.java"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/../../teacher-service/teacher-service/src/main/java/com/example/teacher/TeacherServiceApplication.java"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/../../teacher-service/teacher-service/src/main/java/com/example/teacher/controller/TeacherController.java"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/../../teacher-service/teacher-service/src/main/java/com/example/teacher/controller/TeacherController.java"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/../../teacher-service/teacher-service/src/main/java/com/example/teacher/service/TeacherService.java"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/../../teacher-service/teacher-service/src/main/java/com/example/teacher/service/TeacherService.java"
afterDir=
"false"
/>
</list>
...
...
teacher-service/teacher-service/src/main/java/com/example/teacher/TeacherServiceApplication.java
View file @
0a62c47d
...
...
@@ -2,8 +2,10 @@ package com.example.teacher;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.scheduling.annotation.EnableAsync
;
@SpringBootApplication
@EnableAsync
public
class
TeacherServiceApplication
{
public
static
void
main
(
String
[]
args
)
{
...
...
teacher-service/teacher-service/src/main/java/com/example/teacher/controller/TeacherController.java
View file @
0a62c47d
...
...
@@ -9,8 +9,12 @@ import org.springframework.http.HttpStatus;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Optional
;
import
java.util.concurrent.CompletableFuture
;
import
java.util.concurrent.ExecutionException
;
import
java.util.stream.Collectors
;
@RestController
@RequestMapping
(
"/teachers"
)
...
...
@@ -27,11 +31,57 @@ public class TeacherController {
}
// GET methods
@GetMapping
(
"/{id}"
)
public
ResponseEntity
<
Optional
<
Teacher
>>
findStudentById
(
@PathVariable
int
id
)
{
Optional
<
Teacher
>
myStudent
=
teacherService
.
findTeacherById
(
id
);
if
(
myStudent
.
isPresent
())
{
return
new
ResponseEntity
<
Optional
<
Teacher
>>(
myStudent
,
HttpStatus
.
FOUND
);
@GetMapping
(
"/id-array"
)
public
ResponseEntity
<
List
<
Teacher
>>
findTeacherById
(
@RequestParam
int
[]
id
)
throws
InterruptedException
{
List
<
Teacher
>
teacherList
=
new
ArrayList
<>();
for
(
int
x:
id
)
{
Optional
<
Teacher
>
myTeacher
=
teacherService
.
findTeacherById
(
x
);
myTeacher
.
ifPresent
(
teacherList:
:
add
);
}
if
(
teacherList
.
size
()
>
0
)
{
return
new
ResponseEntity
<
List
<
Teacher
>>(
teacherList
,
HttpStatus
.
FOUND
);
}
return
new
ResponseEntity
<>(
HttpStatus
.
NOT_FOUND
);
}
// // Test 1
// @GetMapping("/id-array-async")
// public ResponseEntity<List<Teacher>> findTeacherByIdAsync(@RequestParam int[] id) throws ExecutionException, InterruptedException {
// List<Teacher> teacherList = new ArrayList<>();
// List<CompletableFuture<Optional<Teacher>>> completableFutureList = new ArrayList<>();
// for (int x: id) {
// CompletableFuture<Optional<Teacher>> myCompletableTeacher = teacherService.findTeacherByIdAsync(x);
// completableFutureList.add(myCompletableTeacher);
// }
//// completableFutureList.forEach(CompletableFuture::join);
// for (CompletableFuture<Optional<Teacher>> x: completableFutureList
// ) {
// Optional<Teacher> myOptionalTeacher = x.get();
// myOptionalTeacher.ifPresent(teacherList::add);
// }
// if (teacherList.size() > 0) {
// return new ResponseEntity<List<Teacher>>(teacherList, HttpStatus.FOUND);
// }
// return new ResponseEntity<>(HttpStatus.NOT_FOUND);
// }
// Test 2
@GetMapping
(
"/id-array-async"
)
public
ResponseEntity
<
List
<
Teacher
>>
findTeacherByIdAsync
(
@RequestParam
int
[]
id
)
throws
ExecutionException
,
InterruptedException
{
List
<
Teacher
>
teacherList
=
new
ArrayList
<>();
List
<
CompletableFuture
<
Optional
<
Teacher
>>>
completableFutureList
=
new
ArrayList
<>();
for
(
int
x:
id
)
{
CompletableFuture
<
Optional
<
Teacher
>>
myCompletableTeacher
=
teacherService
.
findTeacherByIdAsync
(
x
);
completableFutureList
.
add
(
myCompletableTeacher
);
}
for
(
CompletableFuture
<
Optional
<
Teacher
>>
x:
completableFutureList
)
{
Optional
<
Teacher
>
teacherOptional
=
x
.
join
();
teacherOptional
.
ifPresent
(
teacherList:
:
add
);
}
if
(
teacherList
.
size
()
>
0
)
{
return
new
ResponseEntity
<
List
<
Teacher
>>(
teacherList
,
HttpStatus
.
FOUND
);
}
return
new
ResponseEntity
<>(
HttpStatus
.
NOT_FOUND
);
}
...
...
teacher-service/teacher-service/src/main/java/com/example/teacher/service/TeacherService.java
View file @
0a62c47d
...
...
@@ -5,14 +5,18 @@ import com.example.teacher.dto.TeacherDto;
import
com.example.teacher.mapper.TeacherMapper
;
import
com.example.teacher.model.Teacher
;
import
com.example.teacher.repository.TeacherRepository
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.scheduling.annotation.Async
;
import
org.springframework.stereotype.Service
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Optional
;
import
java.util.concurrent.*
;
import
java.util.stream.Collectors
;
@Slf4j
@Service
public
class
TeacherService
{
...
...
@@ -22,6 +26,8 @@ public class TeacherService {
@Autowired
private
TeacherMapper
mapper
;
// Create A ThreadPool
ExecutorService
service
=
Executors
.
newFixedThreadPool
(
10
);
public
Teacher
createAndUpdateTeacher
(
Teacher
teacher
)
{
teacher
.
setActive
(
true
);
return
teacherRepository
.
save
(
teacher
);
...
...
@@ -35,13 +41,29 @@ public class TeacherService {
.
collect
(
Collectors
.
toList
());
}
public
Optional
<
Teacher
>
findTeacherById
(
int
id
)
{
if
(
teacherRepository
.
findTeacherById
(
id
).
isActive
()){
return
teacherRepository
.
findById
(
id
);
// GET Teacher By ID Synchronously
public
Optional
<
Teacher
>
findTeacherById
(
int
id
)
throws
InterruptedException
{
Thread
.
sleep
(
500
);
log
.
info
(
"GET Teacher of id "
+
id
+
" by Thread "
+
Thread
.
currentThread
().
getName
());
Optional
<
Teacher
>
myTeacher
=
teacherRepository
.
findById
(
id
);
if
(
myTeacher
.
isPresent
()
&&
myTeacher
.
get
().
isActive
()){
return
myTeacher
;
}
return
Optional
.
empty
();
}
// GET Teacher By ID Asynchronously
@Async
public
CompletableFuture
<
Optional
<
Teacher
>>
findTeacherByIdAsync
(
int
id
)
throws
InterruptedException
{
Thread
.
sleep
(
500
);
log
.
info
(
"GET Teacher of id "
+
id
+
" by Thread "
+
Thread
.
currentThread
().
getName
());
Optional
<
Teacher
>
myTeacher
=
teacherRepository
.
findById
(
id
);
if
(
myTeacher
.
isPresent
()
&&
myTeacher
.
get
().
isActive
()){
return
CompletableFuture
.
completedFuture
(
myTeacher
);
}
return
CompletableFuture
.
completedFuture
(
Optional
.
empty
());
}
public
TeacherDto
findTeacherByName
(
String
name
)
{
Teacher
teacher
=
teacherRepository
.
findTeacherByName
(
name
);
if
(
teacher
==
null
)
{
...
...
teacher-service/teacher-service/target/classes/com/example/teacher/TeacherServiceApplication.class
View file @
0a62c47d
No preview for this file type
teacher-service/teacher-service/target/classes/com/example/teacher/controller/TeacherController.class
View file @
0a62c47d
No preview for this file type
teacher-service/teacher-service/target/classes/com/example/teacher/service/TeacherService.class
View file @
0a62c47d
No preview for this file type
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment