私は、UIから何らかのURI要求を受け取り、サービスクラスのビジネスロジックを呼び出して特定の操作を実行するSpring Web-Appを持っています。Spring AOPのlog4j2のIntercept ThreadContext
- 私はlog4j2 JDBCログを使用してデータベースにログインしています。
- これで、session-IdをDatabaseの別の列に記録します。そして、このために、私はここに述べたように保存されるように、セッションIDを渡すためにはThreadContext地図を使用しています:
log4jの設定を:以下https://logging.apache.org/log4j/2.x/manual/thread-context.html
は私が使用しているかのスナップショットです。
<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を別の列に記録します。
ここでは、さまざまなセッションIDを持つ独立したスレッドで実行されるdoSomethingのメソッドがn個あります。 そして、私はThreadContextステートメントを何度も何度も書いたくないので、このタスクのためにSpring AOPアドバイス(@Around Advice)を使用することを考えています。
誰かがSpring AOPの@AroundアドバイスにThreadContextを挿入する方法を教えてください。
@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();
}
}
はそれが役に立てば幸い:
は私が
が、私はそれのための側面として定義するコンポーネント
@Component
public class MyService {
public void doSomething() { ... }
}
を持って、これらの線に沿って何かを言うあなたに
こんにちは@Raデュ、答えてくれてありがとう。私は今も同じように使っています。 – pritamprasad