package com.takensoft.common.config; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Qualifier; 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 javax.sql.DataSource; @Configuration @MapperScan(basePackages="com.takensoft.*.*.dao, com.takensoft.*.*.*.dao", sqlSessionFactoryRef = "cmsSqlSessionFactory") public class CmsDataSourceConfig { @Primary @Bean(name = "cmsDataSource") @ConfigurationProperties(prefix = "spring.cms.datasource") public DataSource cmsDataSource() { return DataSourceBuilder.create().build(); } @Primary @Bean(name = "cmsSqlSessionFactory") public SqlSessionFactory cmsSqlSessionFactory(@Qualifier("cmsDataSource") DataSource cmsDataSource, ApplicationContext applicationContext) throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(cmsDataSource); sqlSessionFactoryBean.setTypeAliasesPackage("com.takensoft.**.**.vo, com.takensoft.**.**.dto, com.takensoft.common"); sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources("classpath:mybatis/mapper/**/*-SQL.xml")); // MyBatis Configuration 설정 추가 org.apache.ibatis.session.Configuration myBatisConfig = new org.apache.ibatis.session.Configuration(); myBatisConfig.setCacheEnabled(true); myBatisConfig.setLazyLoadingEnabled(false); myBatisConfig.setMultipleResultSetsEnabled(true); myBatisConfig.setUseColumnLabel(true); myBatisConfig.setUseGeneratedKeys(false); myBatisConfig.setDefaultExecutorType(org.apache.ibatis.session.ExecutorType.SIMPLE); myBatisConfig.setDefaultStatementTimeout(25000); myBatisConfig.setCallSettersOnNulls(true); myBatisConfig.setMapUnderscoreToCamelCase(true); sqlSessionFactoryBean.setConfiguration(myBatisConfig); return sqlSessionFactoryBean.getObject(); } @Primary @Bean(name = "firstSessionTemplate") public SqlSessionTemplate firstSqlSessionTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory cmsSqlSessionFactory) { return new SqlSessionTemplate(cmsSqlSessionFactory); } }