Spring 4.x 이상일때 iBatis와 MyBatis 동시 사용하기

[Desc]

원인) iBatis와 MyBatis를 동시에 사용해야하는 상황이 생길 경우 서브프로젝트를 포함해서 운영해야하는데

서브프로젝트에 SqlMapClient를 넘겨줘야하는 상황이 발생했다.

Spring3.x 이하 버전에서는 iBatis로 셋팅을 하면 순순히 넘겨줄수 있다.

고민을 해보았다. 순순히 넘겨주기 위해서 프로젝트를 Spring3.x이하 버전으로 사용하고 MyBatis를 안쓰면되겠지만

순순히 넘겨줄 생각이 없었다. 그래서 찾아보았습니다.


우선 4.x번전 이상부터 iBatis지원을 Spring에서 빼버렸다.

Spring 4.x이하 버전에서는 org.springframework.orm에서 iBatis가 기본제공되었기 때문에 3버전 이하에서는

아무문제없이 사용할수 있었지만 Spring4.x이상 버전에서는 IBaits를 사용하기 위해서 어떻게 해야하는지

헤맸다. 결국에는 찾아냈고 셋팅에 성공하였습니다.


[셋팅]


--Maven

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis-2-spring</artifactId>

<version>1.0.3</version>

</dependency>


--gradel

compile group: 'org.mybatis', name: 'mybatis-2-spring', version: '1.0.3'



	//Ibatis 사용
	/**
     *  test
     */
    @Autowired
    @Qualifier("dataSourceTest")
    DataSource dataSourceTest;
 
    @Configuration
    @ConfigurationProperties(prefix = "db.testmaster.test")
    static class DataSourceTest extends HikariConfig {
 
        @Bean(name = "dataSourceTest", destroyMethod = "shutdown")
        DataSource dataSourceTest() {
            return new HikariDataSource(this);
        }
    }
 
    @Bean(name = "sqlMapClientTest")
    public SqlMapClientFactoryBean sqlMapClientTest(@Qualifier("dataSourceTest") DataSource dataSourceTest) throws Exception {
        SqlMapClientFactoryBean fb = new SqlMapClientFactoryBean();
        fb.setDataSource(dataSourceTest);
        fb.setConfigLocation(new PathMatchingResourcePatternResolver().getResource("classpath:/com/test/abc/mapper/config/test-sql-map-config.xml"));
        fb.setUseTransactionAwareDataSource(true);
 
        return fb;
    }
 
    @Bean(name = "sqlMapClientTemplateTest")
    public SqlMapClientTemplate sqlMapClientTemplateTest(@Qualifier("sqlMapClientTest") SqlMapClient sqlMapClientTest) throws Exception {
        SqlMapClientTemplate sct = new SqlMapClientTemplate();
        sct.setSqlMapClient(sqlMapClientTest);
        return sct;
    }
 
    @Bean(name = "txManagerTest")
    public PlatformTransactionManager txManagerTest(@Qualifier("dataSourceTest") DataSource dataSourceTest) throws Exception {
        return new DataSourceTransactionManager(dataSourceTest);
    }
 
 
 
 
	//mybatis
	/**
     * Test master Database 접속 설정
     */
 
    @Autowired
    @Qualifier("dataSourceOrd")
    DataSource dataSourceOrd;
 
    @Configuration
    @ConfigurationProperties(prefix = "db.testmaster.ord")
    static class DataSourceOrd extends HikariConfig {
 
        @Primary
        @Bean(name = "dataSourceOrd", destroyMethod = "shutdown")
        DataSource dataSourceOrd() {
            return new HikariDataSource(this);
        }
    }
 
    @Primary
    @Bean(name = "sqlSessionFactoryOrd")
    public SqlSessionFactoryBean sqlSessionFactoryOrd(ApplicationContext applicationContext) throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(dataSourceOrd);
//      factoryBean.setMapperLocations(applicationContext.getResources("classpath:mybatis/ord/*.xml"));
//      factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:**/ord/**.xml"));
        factoryBean.setMapperLocations(applicationContext.getResources("classpath*:com/test/abc/mapper/ord/*.xml"));
        factoryBean.setConfiguration(getMybatisConfig());
 
        return factoryBean;
    }
 
    @Primary
    @Bean(name = "sqlSessionTemplateOrd")
    public SqlSessionTemplate sqlSessionTemplateOrd(@Qualifier("sqlSessionFactoryOrd")SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
 
    @Primary
    @Bean(name = "txManagerOrd")
    public PlatformTransactionManager txManagerOrd(@Qualifier("dataSourceOrd") DataSource dataSourceOrd) throws Exception {
        return new DataSourceTransactionManager(dataSourceOrd);
    }
 
    /**
     * Mybatis 설정
     */
    private org.apache.ibatis.session.Configuration getMybatisConfig() {
        org.apache.ibatis.session.Configuration config = new org.apache.ibatis.session.Configuration();
        config.setCacheEnabled(false);
        config.setUseGeneratedKeys(true);
        config.setDefaultExecutorType(ExecutorType.BATCH);
        config.setMapUnderscoreToCamelCase(true);
 
        /*
         * 조회시 하나의 레코드 기준으로 데이터가 없는 컬럼에 null 설정
         */
        config.setCallSettersOnNulls(true);
        return config;
    }




블로그 이미지

pstree

pstree.. process...

,