spring core advanced : log trace v4 - template method
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
package com.example.advanced.app.v4;
|
||||
|
||||
import com.example.advanced.trace.logtrace.LogTrace;
|
||||
import com.example.advanced.trace.template.AbstractTemplate;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
public class OrderControllerV4 {
|
||||
|
||||
private final OrderServiceV4 orderService;
|
||||
private final LogTrace trace;
|
||||
|
||||
@GetMapping("/v4/request")
|
||||
public String request(String itemId) {
|
||||
|
||||
AbstractTemplate<String> template = new AbstractTemplate<String>(trace) {
|
||||
@Override
|
||||
protected String call() {
|
||||
orderService.orderItem(itemId);
|
||||
return "ok";
|
||||
}
|
||||
};
|
||||
return template.execute("OrderController.request()");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.example.advanced.app.v4;
|
||||
|
||||
import com.example.advanced.trace.logtrace.LogTrace;
|
||||
import com.example.advanced.trace.template.AbstractTemplate;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
@RequiredArgsConstructor
|
||||
public class OrderRepositoryV4 {
|
||||
|
||||
private final LogTrace trace;
|
||||
|
||||
public void save(String itemId) {
|
||||
|
||||
AbstractTemplate<Void> template = new AbstractTemplate<Void>(trace) {
|
||||
@Override
|
||||
protected Void call() {
|
||||
// 저장 로직
|
||||
if (itemId.equals("ex")) {
|
||||
throw new IllegalStateException("예외 발생!");
|
||||
}
|
||||
sleep(1000);
|
||||
return null;
|
||||
}
|
||||
};
|
||||
template.execute("OrderRepository.save()");
|
||||
}
|
||||
|
||||
private void sleep(int millis) {
|
||||
try {
|
||||
Thread.sleep(millis);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.example.advanced.app.v4;
|
||||
|
||||
import com.example.advanced.trace.logtrace.LogTrace;
|
||||
import com.example.advanced.trace.template.AbstractTemplate;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class OrderServiceV4 {
|
||||
|
||||
private final OrderRepositoryV4 orderRepository;
|
||||
private final LogTrace trace;
|
||||
|
||||
public void orderItem(String itemId) {
|
||||
|
||||
AbstractTemplate<Void> template = new AbstractTemplate<Void>(trace) {
|
||||
@Override
|
||||
protected Void call() {
|
||||
orderRepository.save(itemId);
|
||||
return null;
|
||||
}
|
||||
};
|
||||
template.execute("OrderService.orderItem()");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.example.advanced.trace.template;
|
||||
|
||||
import com.example.advanced.trace.TraceStatus;
|
||||
import com.example.advanced.trace.logtrace.LogTrace;
|
||||
|
||||
public abstract class AbstractTemplate<T> {
|
||||
|
||||
private final LogTrace trace;
|
||||
|
||||
public AbstractTemplate(LogTrace trace) {
|
||||
this.trace = trace;
|
||||
}
|
||||
|
||||
public T execute(String message) {
|
||||
TraceStatus status = null;
|
||||
try {
|
||||
status = trace.begin(message);
|
||||
|
||||
T result = call();
|
||||
|
||||
trace.end(status);
|
||||
return result;
|
||||
} catch (Exception e) {
|
||||
trace.exception(status, e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract T call();
|
||||
}
|
||||
Reference in New Issue
Block a user