JForum 소스 코드 검토 - ThreadLocal, 사용자별 변수
1802 단어 DAOfreemarker
private static ThreadLocal userData = new ThreadLocal();
private static Logger logger = Logger.getLogger(JForumExecutionContext.class);
private static Configuration templateConfig;
private Connection conn;
private ForumContext forumContext;
private SimpleHash context = new SimpleHash(ObjectWrapper.BEANS_WRAPPER);
private String redirectTo;
private String contentType;
private boolean isCustomContent;
private boolean enableRollback;
정적 변수 logger는 더 이상 말하지 않겠습니다.정적 변수templateConfig,freemarker의 고전적인 사용법이므로 더 이상 말하지 않겠습니다.비정상적인 변수는 모두 특정 사용자와 관련이 있다.즉 사용자 A의'redirectTo'와 사용자 B의'redirectTo'값이 다르다는 것이다.context도 사용자와 관련이 있습니다. 사용자 A는 context를 사용할 수 있습니다.put ("userName", "장삼"), 사용자 B는context를 사용할 수 있습니다.put ("userName", "이 4"), 페이지에서 이럴 수 있습니다. 안녕하세요, ${userName}.사용자마다 HttpServletRequest와 HttpServletResponse도 다르기 때문에forumContext도 사용자와 관련이 있습니다.콘텐츠 타입, isCustom Conent, enable Rollback은 모두 특정 사용자와 관련이 있습니다.
특히 왜 conn도 사용자와 관련이 있을까요?통상적으로 데이터베이스 연결은 사용자와 관계가 없어야 한다!?관건은 사용자가 끝까지 요청을 하면 사용자 A가 제출해야 하고 사용자 B가 굴러갈 수 있다는 것이다. 이 점을 하려면 사용자 A가 처음에 얻은 conn이 어느 conn인지 기록해야 하며 연결 탱크에서 함부로 conn을 얻을 수 없기 때문에 conn도 사용자와 관련이 있다.만약 당신이 JForum의 많은 DAO 방법을 본다면, 시스템이 JForumExecutionContext를 사용하는 것을 발견할 수 있을 것이다.연결 풀에서 데이터베이스 연결을 가져오는 것이 아니라 getConnection () 입니다.물론 사용자의 요청이 처리되면 JForumExecutionContext를 사용해야 합니다.finish () 를 사용하여 데이터베이스 연결을 해제합니다.
'모든 사용자는 자신의 독립된 변수 값을 가지고 있다'.'모든 라인은 자신의 독립된 변수 값을 가지고 있다'는 것을 연상하면 ThreadLocal의 사용법을 떠올릴 것이다.여기 userData는 정적입니다. ThreadLocal API에서 추천하는 수식자입니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Spring에서 DAO가 순환 호출될 때 데이터가 실시간으로 업데이트되지 않는 해결 방법문제를 설명하기 전에 몇 가지 전제 사항을 설명하십시오. Spring의 구성 파일에서 다음과 같은 방식으로 데이터베이스 트랜잭션을 구성했다고 가정하십시오. 현재 UserDao 및 Security Service가 있습...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.