package com.munjaon.client.config; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.configuration2.ex.ConfigurationException; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; import org.mybatis.spring.boot.autoconfigure.SpringBootVFS; import org.springframework.beans.factory.annotation.Autowired; 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.io.support.PathMatchingResourcePatternResolver; import org.springframework.transaction.annotation.EnableTransactionManagement; import javax.sql.DataSource; @Slf4j @Configuration @RequiredArgsConstructor @EnableTransactionManagement @MapperScan(basePackages= "com.munjaon.client.**.mapper") public class DataSourceConfig { @Autowired private ApplicationContext applicationContext; private final ServerConfig serverConfig; @Primary @Bean(name = "datasource") public DataSource dataSource() throws ConfigurationException { String dbms = serverConfig.getString("DB.DBMS"); System.out.println("MARIADB.DRIVER : " + serverConfig.getString(dbms + ".DRIVER")); System.out.println("MARIADB.URL : " + serverConfig.getString(dbms + ".URL")); System.out.println("MARIADB.USER : " + serverConfig.getString(dbms + ".USER")); System.out.println("MARIADB.PASSWORD : " + serverConfig.getString(dbms + ".PASSWORD")); HikariConfig hikariConfig = new HikariConfig(); hikariConfig.setDriverClassName(serverConfig.getString(dbms + ".DRIVER")); hikariConfig.setJdbcUrl(serverConfig.getString(dbms + ".URL")); hikariConfig.setUsername(serverConfig.getString(dbms + ".USER")); hikariConfig.setPassword(serverConfig.getString(dbms + ".PASSWORD")); hikariConfig.setMaximumPoolSize(10); if ("ORACLE".equalsIgnoreCase(dbms) || "TIBERO".equalsIgnoreCase(dbms)) { hikariConfig.setConnectionTestQuery("SELECT 1 FROM DUAL"); } else { hikariConfig.setConnectionTestQuery("SELECT 1"); } return new HikariDataSource(hikariConfig); } @Primary @Bean(name = "factory") public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { String dbms = serverConfig.getString("DB.DBMS"); System.out.println("dbms : " + dbms); SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean(); sqlSessionFactory.setVfs(SpringBootVFS.class); sqlSessionFactory.setDataSource(dataSource); sqlSessionFactory.setTypeAliasesPackage("com.munjaon.client.**.dto"); sqlSessionFactory.setConfigLocation(applicationContext.getResource("classpath:mybatis-config.xml")); sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:/sqlmap/**/*.xml")); return sqlSessionFactory.getObject(); } @Primary @Bean(name = "sqlSession") public SqlSessionTemplate sqlSession(SqlSessionFactory sqlSessionFactory) { return new SqlSessionTemplate(sqlSessionFactory); } }