package com.tsi.comm.server.mybatis; import com.zaxxer.hikari.HikariDataSource; import lombok.RequiredArgsConstructor; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.core.env.Environment; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; import javax.sql.DataSource; @RequiredArgsConstructor @Configuration @EnableTransactionManagement public class MybatisConfig { private final Environment environment; @Value("${spring.datasource.hikari.mapper-locations:classpath:mybatis/mapper/**/*.xml}") String mapperLocations; @Primary @Bean(name="dataSource") @ConfigurationProperties(prefix="spring.datasource.hikari") public DataSource dataSource() { HikariDataSource dataSource = DataSourceBuilder.create() .type(HikariDataSource.class) .build(); dataSource.setPoolName(this.environment.getProperty("spring.datasource.hikari.pool-name")); return dataSource; // return DataSourceBuilder.create().build(); } @Primary @Bean(name="sqlSessionFactory") public SqlSessionFactory sqlSessionFactoryBean(@Autowired @Qualifier("dataSource") DataSource dataSource, ApplicationContext applicationContext) throws Exception { SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(dataSource); //factoryBean.setConfigLocation(applicationContext.getResource("classpath:mapper/mapper/mapper-config.xml")); factoryBean.setMapperLocations(applicationContext.getResources(mapperLocations)); return factoryBean.getObject(); } @Primary @Bean(name="sqlSession") public SqlSessionTemplate sqlSession(@Autowired @Qualifier("sqlSessionFactory") SqlSessionFactory sqlSessionFactory) { return new SqlSessionTemplate(sqlSessionFactory); } @Primary @Bean(name="transactionManager") public DataSourceTransactionManager transactionManager(@Autowired @Qualifier("dataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } }