Spring에서 DAO가 순환 호출될 때 데이터가 실시간으로 업데이트되지 않는 해결 방법
2006 단어 DAO순환 호출실시간 업데이트 안 함
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
현재 UserDao 및 Security Service가 있습니다.
@Repository
public class UserDao {
public User getUser() {
// query user from user table
return queryObject("select * from user order by id desc limit 1");
}
}
@Service
@Transactional
public class SecurityService {
@Autowired
private UserDao userDao;
public void checkUserInfo() {
while(true) {
User user = userDao.getUser();
if(user != null && "Tom".equals(user.getName()) {
System.out.println("Tom is here");
break;
}
}
}
}
Security Service #checkUser Info () 방법을 호출하는 과정에서userDao #getUser () 방법을 통해 얻은 데이터는 변하지 않습니다. 이 때name 을 Tom으로 새로 삽입해도 데이터 순환이 끝나지 않습니다.또한 Security Service의 @Transactional 메모를 제거하는 것도 도움이 되지 않습니다.데이터베이스 연결 탱크가 아닐까 하는 생각이 먼저 들었고, 스프링이 가지고 있는 것으로 바꾼 것도 마찬가지였다.그리고 JdbcTemplate에서 연결 대상을 직접 호출하여 원시적인 JDBC 방식으로 데이터베이스를 조작했습니다. 이때 데이터는 실시간으로 바뀌었기 때문에 스프링의 업무와 현재 작업 라인을 연결해야 한다고 생각했습니다.원본 코드가 들어간 후에 과연 DataSourceUtils #doGetConnection 방법에서 Spring이 모든 라인의 모든 DataSource에 연결을 만들고 업무와 연결되는 것을 발견했습니다.tx:annotation-driven 프로필은 모든 서비스 층 (@Service 주석을 추가한 클래스) 에 대한 사무 연결을 하기 때문에 @Transactional을 사용하든 안 사용하든 같은 라인에서 같은 연결을 연결합니다. 사무 조작을 하지 않을 뿐입니다.
여러 차례의 실험과 자료 탐색을 거쳐 마침내 완벽한 해결 방법을 찾았다. 상술한 checkUserInfo 방법에 @Transactional(propagation=Propagation.NOT_SUPPORTED) 주석을 추가하면 된다.물론 Connection을 가져와서 수동으로 조작할 수도 있고 DateUtils 패키지로 조작할 수도 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Spring에서 DAO가 순환 호출될 때 데이터가 실시간으로 업데이트되지 않는 해결 방법문제를 설명하기 전에 몇 가지 전제 사항을 설명하십시오. Spring의 구성 파일에서 다음과 같은 방식으로 데이터베이스 트랜잭션을 구성했다고 가정하십시오. 현재 UserDao 및 Security Service가 있습...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.