당신 은 공장 패턴으로 ThreadLocal
클래스를 사용할 수 있습니다
public class DataAccess{
private static ThreadLocal<DataAccess> THREAD_LOCAL = new ThreadLocal() {
@Override
protected DataAccess initialValue() {
return new DataAccess();
}
};
private String databasepath;
public static DataAccess getInstance() {
return THREAD_LOCAL.get();
}
}
이 의지하지만, 메모리 누수가 발생할. 그래서 당신은 요청의 시작 값을 설정하는 Servlet Filter를 사용하고 마지막에 삭제해야, 몇 가지 같은 :
public void doFilter(ServletRequest request,
ServletResponse response, FilterChain chain)
throws IOException, ServletException {
DataAccess.set(new DataAccess("SomeValue"));
try {
chain.doFilter(request, wrapper);
} finally {
DataAcess.remove();
}
}
당신은 따라서 귀하의 web.xml
에 추가 Filter 구현하는 class
이 있으면 :
<!--Filter for adding in dataccess objects-->
<filter>
<filter-name>DataccessFilter</filter-name>
<filter-class>my.package.DataccessFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>DataccessFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
This 페이지 필터 및 매핑의 일례를 제공한다. 아마 자바에서 메모리 누수의 원인 중 하나이기 때문에
public class DataAccess{
private static ThreadLocal<DataAccess> THREAD_LOCAL = new ThreadLocal();
private String databasepath;
public DataAcess(final String databasepath) {
this.databasepath = databasepath;
}
public static DataAccess getInstance() {
return THREAD_LOCAL.get();
}
public static void set(final DataAccess dataAccess) {
THREAD_LOCAL.set(dataAccess);
}
public static void remove() {
THREAD_LOCAL.remove();
}
}
이 ThreadLocal
와 매우주의 : 같은
그리고 당신의 DataAccess
가 보일 것이다. 스레드 풀이있는 웹 서버를 사용하면 올바르게 정리하지 않으면 더 심각한 버그가 발생할 수 있습니다.
9 개의 질문을하고 0을 수락했습니다. 개선해주십시오. – gaborsch
어떻게 대답을 받아 들일 수 있습니까? –
FAQ에서이 장을 읽으십시오. 심지어 스크린 샷이 있습니다 : http://stackoverflow.com/faq#howtoask – gaborsch