나는 다양한 액티비티를 위해 2 개의 작업자 스레드로 넘겨지는 Connection 객체를 얻을 수있는 서블릿을 가지고있다. 이제 하나의 스레드에 트랜잭션을 추가해야합니다.스레드간에 공유 된 연결에 대한 JDBC 자동 커밋
이렇게 트랜잭션을 시작하면 connection.setAutoCommit (false);
두 스레드에 모두 영향을 줍니까? 나는 그렇게 생각한다.
각 스레드를 별도로 연결해야합니까?
덕분에
나는 다양한 액티비티를 위해 2 개의 작업자 스레드로 넘겨지는 Connection 객체를 얻을 수있는 서블릿을 가지고있다. 이제 하나의 스레드에 트랜잭션을 추가해야합니다.스레드간에 공유 된 연결에 대한 JDBC 자동 커밋
이렇게 트랜잭션을 시작하면 connection.setAutoCommit (false);
두 스레드에 모두 영향을 줍니까? 나는 그렇게 생각한다.
각 스레드를 별도로 연결해야합니까?
덕분에
내가 무슨 일을하는 것은 아주 나쁜 관행 생각합니다. 스레드간에 JDBC 연결을 공유 할 수 없습니다.
응용 프로그램 서버 (예 : TOMCAT/JBoss/WebSphere/WebLogic)에서 실행중인 경우 올바른 데이터 소스를 사용하여 필요에 따라 연결을 설정하십시오.
Application Server 설명서에서 방법을 확인하십시오.
당신은 당신의 서블릿에서 이런 일이있을 것이다 :
public void doGet(HttpServletRequest req, HttpServletResponse resp)
{
Connection c = null;
try {
c = ...; /* preferred way of getting a connection in your AppServer
// do what you need with your JDBC connection
} catch (Exception e) {
// handle errors
} finally {
c.close(); /* you will need another TRY/CATCH here */
}
}
가 마찬가지로, 당신의 작업자 스레드가 같은 것입니다 : 결국
public void run()
{
Connection c = null;
try {
c = ...; /* preferred way of getting a connection in your AppServer
// do what you need with your JDBC connection
} catch (Exception e) {
// handle errors
} finally {
c.close(); /* you will need another TRY/CATCH here */
}
}
을, 당신은 별도의 원하는 영역 auto commit
을 설정할 수 있습니다 연결 개체.
당신은 절대적으로 옳습니다. 연결 공유의 의미를 고려하지 않았으므로 각 스레드가 자체 연결을 얻도록 조정하고 있습니다. –
JDBC 드라이버 매뉴얼에 명확하게 기술되어 있지 않으면 실제로 연결을 공유 할 수 없습니다. – bestsss