여기서 '범위'가 올바른 용어인지 확실하지 않습니다.@Transactional의 범위를 최소화하고 싶습니까?
JPA 트랜잭션 관리를 위해 Spring을 사용하고 있습니다 (최대 절전 모드 상태). 데이터베이스 트랜잭션을 미리 형성하는 내 방법은 개인이지만, 당신은 단지 클래스 또는 public method
에 @Transactional을 설정할 수 있기 때문에이 메커니즘은 프록시에 전용 '외부'방법은 프록시를 통해 들어오는 호출을 기반으로하므로 것 도청 당한다. 즉, 대상 객체의 다른 메소드를 호출하는 대상 객체 내의 메소드 인 '자체 호출'은 호출 된 메소드가 @Transactional로 표시 되더라도 런타임시 실제 트랜잭션으로 이어지지 않습니다!
클래스의 공개 진입 점을 @Transactional로 설정했습니다.
@Transactional
public void run(parameters) {
//First non-database method, takes a decent amount of time
Data data = getData();
//Call to database
storeData(data);
}
private storeData(data) {
em.persist(data);
}
이것은 나쁜 습관입니까? Spring은 여기에서 더 오래 필요로하는 열린 트랜잭션을 유지합니까? storeData() 메서드를 DAO 클래스로 이동하여 공용으로 만들 생각 이었지만 학문적으로 대중에게 리팩토링하면 성능상의 이점이 있는지 알고 싶었습니다.
나는 두 가지 대답을 가지고 있습니다. 내가 올바르게 이해하면 반대되는 말을하고 있습니다. 다른 누구도이 질문에 무게를 둘 수 있습니까? –
질문과 관련하여 http://stackoverflow.com/questions/1079114가 있습니다. –