2017-08-03 35 views
1

下面是我如何使用快照:

log4j的配置:

<Appenders> 
     <Jdbc ignoreExceptions="true" name="db-appender" 
     bufferSize="${env:LOG_DB_BUFFER_SIZE}" tableName="test.&quot;LOGS&quot;"> 
     <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方法將在具有各種會話ID的獨立線程中執行。 我不想一遍又一遍地寫出ThreadContext語句,所以我正在考慮爲這個任務使用Spring-AOP建議(@Around Advice)。

有人能請我解釋一下如何在Spring-AOP的@Around建議中注入ThreadContext。

謝謝

回答

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(); 
    } 
} 

希望它可以幫助

+0

Hi @Ra杜,謝謝你的回答。我現在也以同樣的方式使用它。 – pritamprasad