2017-10-09 2 views
0

Ich benutze Frühling jpa mit Standardkonfiguration und Frühling-batis mit kundenspezifischer Konfiguration im gleichen Projekt. Jpa-Abfragen sind immer schnell, aber Ibatis-Abfragen sind manchmal langsam. Was könnte falsch sein? Meine batis config:Verlangsamen Sie Updates in Ibatis zusammen mit Frühling jpa

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(); 
    } 
} 

und Abhängigkeit:

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

Sollten Ihre Methoden dataSource() und dataSourceTransactionManager() nicht auch mit @Bean kommentiert werden? Ohne dass Sie jedes Mal mySqlSessionFactory() aufrufen, werden Sie eine neue Verbindung herstellen. –

+0

@MichaelPeacock können Sie diesen Kommentar als Antwort kopieren. Ich fühle, dass du recht hast, ich überprüfe es. Danke! – ipoteka

Antwort

1

Ich denke, Ihre Datasource() und dataSourceTransactionManager() Methoden sollten auch mit @Bean kommentiert werden. Ohne dass Sie jedes Mal mySqlSessionFactory() aufrufen, werden Sie eine neue Verbindung herstellen.