三、springのprofileの使用、javaconfig構成統合mybatis、el式の使用


1.異なるアプリケーション環境では、構成に関する多くの問題が発生します.本編では、異なる導入環境を解決する際に遭遇する基礎構成のいくつかについて説明します.データベース構成、springのprofile、外部に取り込まれたpropertiesファイルを使用したロード構成など、異なる環境で異なる構成を使用する方法について説明します.Java注釈構成を使用すると、spring構成が簡略化され、java開発によるspringの理解が容易になります.次の例では、springの注釈構成mybatis、el式の使用を使用します.
package nui.honest.spring.demo.profile;

import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.*;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;

/**
 * pgconfig
 * Created by 15692 on 2019/3/9.
 */
@Configuration
@PropertySource("classpath:mybatis/pgconfig.properties")
@MapperScan(basePackages = {"nui.honest.spring.demo.profile.rcm"}, sqlSessionFactoryRef = "sqlSessionFactory")
@Profile("uat")
public class PgDataSourceConfig {

    @Value("${data.driverClassName}")
    private String driverClassName;
    @Value("${data.url}")
    private String url;
    @Value("${data.username}")
    private String username;
    @Value("${data.passwd}")
    private String passwd;

    public String getUrl() {
        return this.url;
    }

    @Bean("dataSource")
    public DataSource getDataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUsername(username);
        dataSource.setUrl(url);
        dataSource.setPassword(passwd);
        return dataSource;
    }
    @Bean("sqlSessionFactory")
    public SqlSessionFactory getSqlSessionFactory(DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        //     mybatis-config.xml
        sqlSessionFactoryBean.setConfigLocation(null);
        //    mapper.xml
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        Resource[] resources = resolver.getResources("classpath:/mybatis/mapper/*Mapper.xml");
        sqlSessionFactoryBean.setMapperLocations(resources);
        return sqlSessionFactoryBean.getObject();
    }

}
package nui.honest.spring.demo.profile;

import nui.honest.spring.demo.jdbc.vo.UserBeanVO;
import nui.honest.spring.demo.profile.rcm.IUserDao;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
 *    
 * Created by 15692 on 2019/3/9.
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = PgDataSourceConfig.class)
@ActiveProfiles("uat")
public class PgDataSourceTest {

    @Autowired
    private IUserDao userDao;

    @Test
    public void getUser() {

        UserBeanVO userBeanVO = userDao.queryUserById(1);
        System.out.println(userBeanVO.getUserName());
    }
}

package nui.honest.spring.demo.profile;

import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.*;
import org.springframework.core.env.Environment;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;

/**
 * Created by 15692 on 2019/2/27.
 */
@Configuration
@PropertySource("classpath:mybatis/mysqlconfig.properties")
@MapperScan(basePackages = {"nui.honest.spring.demo.profile.rcm"}, sqlSessionFactoryRef = "sqlSessionFactory")
@Profile("dev")
public class MySqlDataSourceConfig {

    @Autowired
    private Environment env;

    @Bean("dataSource")
    public DataSource getDataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(env.getProperty("data.driverClassName"));
        dataSource.setUrl(env.getProperty("data.url"));
        dataSource.setUsername(env.getProperty("data.username"));
        dataSource.setPassword(env.getProperty("data.passwd"));
        return dataSource;
    }

    @Bean("sqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        //     mybatis-config.xml
        sqlSessionFactoryBean.setConfigLocation(null);
        //    mapper.xml
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        Resource[] resources = resolver.getResources("classpath:/mybatis/mapper/*Mapper.xml");
        sqlSessionFactoryBean.setMapperLocations(resources);
        //       
        sqlSessionFactoryBean.setTypeAliasesPackage("nui.honest.spring.demo.profile.rcm");

        return sqlSessionFactoryBean.getObject();
    }

}
package nui.honest.spring.demo.profile;

import nui.honest.spring.demo.jdbc.vo.UserBeanVO;
import nui.honest.spring.demo.profile.rcm.IUserDao;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
 * junit  
 * Created by 15692 on 2019/3/9.
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {MySqlDataSourceConfig.class})
@ActiveProfiles("dev")
public class MysqlDataSourceTest {

    @Autowired
    private IUserDao userDao;

    @Test
    public void testDataSource() {
        //  java   
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
        ctx.register(MySqlDataSourceConfig.class);
        ctx.refresh();
        MySqlDataSourceConfig dataSourceConfig = ctx.getBean("mySqlDataSourceConfig", MySqlDataSourceConfig.class);
        dataSourceConfig.getDataSource();
    }

    @Test
    public void getUser() {
//        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
//        ctx.register(DataSourceConfig.class);
//        ctx.refresh();
//        DataSource dataSource = ctx.getBean("dataSource",DataSource.class);
//        SqlSessionFactory sqlSessionFactory = ctx.getBean("sqlSessionFactory",SqlSessionFactory.class);
//        IUserDao userDao = ctx.getBean("userDao",IUserDao.class);
        UserBeanVO userBeanVO = userDao.queryUserById(1);
        System.out.println(userBeanVO.getUserName());
    }
}



サンプルでは、profileは注記@Profileでアプリケーション環境を説明し、springで初期化する場合は@ActiveProfiles注記で対応する環境をアクティブにして異なる構成を使用します.