2017-10-09 5 views
0

동일한 프로젝트에서 사용자 정의 구성과 함께 기본 구성 및 스프링 - 배틴과 함께 spring jpa를 사용합니다. Jpa 쿼리는 항상 빠르지 만, ibatis 쿼리는 때때로 느립니다. 무엇이 잘못 될 수 있습니다. 내 batis의 설정 :spring jpa와 함께 사용하는 ibatis의 업데이트가 느림

import org.apache.ibatis.session.SqlSessionFactory; 
import org.apache.ibatis.transaction.managed.ManagedTransactionFactory; 
import org.mybatis.spring.SqlSessionFactoryBean; 
import org.mybatis.spring.annotation.MapperScan; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.beans.factory.annotation.Value; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.core.io.Resource; 
import org.springframework.jdbc.datasource.DataSourceTransactionManager; 
import org.springframework.jdbc.datasource.DriverManagerDataSource; 
import org.springframework.transaction.annotation.EnableTransactionManagement; 

import javax.sql.DataSource; 
import java.beans.PropertyVetoException; 


@Configuration 
@EnableTransactionManagement 
@MapperScan(basePackages = {""}, sqlSessionFactoryRef = "mySqlSessionFactory") 
public class DaoConfig { 
    @Value("${spring.datasource.url}") 
    private String databaseUrl; 

    @Value("${spring.datasource.username}") 
    private String username; 

    @Value("${spring.datasource.password}") 
    private String password; 

    @Value("${spring.datasource.driver-class-name}") 
    private String driverClassName; 

    @Value("${mybatis.mapperLocations}") 
    private Resource[] mapperLocation; 

    @Value("${mybatis.typeAliasesPackage}") 
    private String typeAliasesPackage; 

    private DataSource dataSource() { 
    DriverManagerDataSource dataSource = new DriverManagerDataSource(databaseUrl, username, password); 
    dataSource.setDriverClassName(driverClassName); 
    return dataSource; 
    } 

    private ManagedTransactionFactory dataSourceTransactionManager() throws PropertyVetoException { 
    return new ManagedTransactionFactory(); 
    } 

    @Bean(name = "mySqlSessionFactory") 
    public SqlSessionFactory mySqlSessionFactory() throws Exception { 
    SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); 
    sessionFactory.setDataSource(dataSource()); 
    sessionFactory.setTransactionFactory(dataSourceTransactionManager()); 
    sessionFactory.setMapperLocations(mapperLocation); 
    sessionFactory.setTypeAliasesPackage(typeAliasesPackage); 
    return sessionFactory.getObject(); 
    } 
} 

그리고 의존성 :

<dependency> 
    <groupId>org.mybatis.spring.boot</groupId> 
    <artifactId>mybatis-spring-boot-starter</artifactId> 
    <version>1.3.0</version> 
</dependency> 
+0

dataSource() 및 dataSourceTransactionManager() 메서드도 @Bean으로 주석을 추가해야하지 않습니까? 그렇지 않으면 mySqlSessionFactory()를 호출 할 때마다 새 연결을 작성하게됩니다. –

+0

@MichaelPeacock이 설명을 답으로 복사 할 수 있습니까? 나는 네가 옳다고 생각한다. 나는 그것을 점검하고있다. 고마워! – ipoteka

답변

1

생각 당신은 dataSource()과의 DataSourceTransactionManager() 메소드뿐만 아니라 @Bean 주석해야합니다. 그렇지 않으면 mySqlSessionFactory()를 호출 할 때마다 새 연결을 작성하게됩니다.