我有一个spring web-app,它从UI接收一些URI请求,并调用Service类中的业务逻辑来执行某个操作。
以下是我如何使用的快照:
log4j配置:
<Appenders>
<Jdbc ignoreExceptions="true" name="db-appender"
bufferSize="${env:LOG_DB_BUFFER_SIZE}" tableName="test."LOGS"">
<ConnectionFactory class="com.pritam.logging.ConnectionFactory" method="getDatabaseConnection" />
<Column name="dated" isUnicode="false" isEventTimestamp="true" />
<Column name="logger" isUnicode="false" pattern="%logger" />
<Column name="level" isUnicode="false" pattern="%level" />
<Column name="message" isUnicode="false" pattern="%message" />
<Column name="exception" isUnicode="false" pattern="%ex{full}" />
<Column name="session_id" isUnicode="false" pattern="%X{session_id}"/>
</Jdbc>
</Appenders>
示例方法:
public void doSomething(String id, JobHeader jobHeader) {
ThreadContext.put("session_id", jobHeader.getContext().getSessionId());
//Business Logic
logger.debug("Logging Message");
//Business Logic
ThreadContext.clearAll();
}
这很好用。并将会话ID记录在不同的列中。
现在,我有n个 doSomething 方法,这些方法将在具有各种session-id的独立线程中执行。 而且我不想一遍又一遍地写ThreadContext语句,所以我想考虑使用Spring-AOP建议(@Around Advice)来完成这项任务。
有人可以向我解释如何在Spring-AOP中的@Around建议中注入ThreadContext。
谢谢
答案 0 :(得分:0)
我在这些方面做了些什么
说我有一个组件
@Component
public class MyService {
public void doSomething() { ... }
}
然后我定义为它的方面:
@Component
@Aspect
public class MyServiceAspect {
@Before("execution(* <packages>.MyService.doSomething())")
public void beforeDoSomething() {
ThreadContext.put("key", "value");
}
@After("execution(* <packages>.MyService.doSomething())")
public void afterDoSomething() {
ThreadContext.clearAll();
}
}
希望有所帮助