ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 각각 DB 폴더에 담긴 Mapper 비교하여 누락된 내역 찾기
    JAVA 2020. 1. 22. 10:27

     

    현 회사는 Mapper.xml을 각각 DB별 Dir에 담고 있다. 

     

    주력적으로 사용하는 DB는 Oracle인데,  별도의 DB들을 사용할 때는 Dir만 교체해서 나가는 방식으로 구성되어있다.

     

    업체가 Oracle을 원하면 Oracle dir

    업체가 Mssql을 원하면 Mssql dir

    업체가 Mysql을 원하면 Mysql dir

    업체가 hana을 원하면 hanadb dir

     

    이런식인데, 주력으로 사용하는 DB가 Oracle이다 보니, 각기 다른 폴더별로 mapper.xml을 관리하는데 누락된 내용이 있어, 이를 찾는작업이 너무 번거로운 노가다 작업이기에 이를 비교하는 Junit을 만들기로 하였다.

     

    가볍게 만들다보니, 더미코드가 많은데 

     

    폴더 내에 file들을 계속적으로 찾아 사용하는 형태로 구현하는 방향을 사용할때도 사용가능할것으로 보여서 남겨둔다.

     

    프로세스는 메인이 되는 Oralce dir / Hanadb dir 를 기점으로 잡아 

     

    재귀함수로 폴더 내에 파일이 존재하는지를 계속 돌리면서 찾고,

     

    모든 파일을 검출하면서, mapper.xml에 id값으로 indexOf 하여, sql id를 검출한다. 이를 map에 담아 비교하는 형태로 구현하였음.

    import org.apache.commons.io.FileUtils;
    import org.apache.commons.io.filefilter.TrueFileFilter;
    import org.junit.Test;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.Writer;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    
    public class MapperReaderTest {
    
    
    
        @Test
        public void readMapperDir(){
    
    
            String repLine = "";
            int buffer;
            String isMapperDir = "C:\\solution\\gitWorkSpace\\standard-common\\src\\main\\resources\\smartsuite\\mappers";
    
            String isOracleDir = isMapperDir+File.separator+"oracle";
            String isHanaDir = isMapperDir+File.separator+"hanadb";
    
    
            Map<String,Map<String,Object>> oracleMapperMap = new HashMap<String, Map<String, Object>>();
            Map<String,Map<String,Object>> hanaMapperMap = new HashMap<String, Map<String, Object>>();
    
            try{
    
                //ORACLE
                for (File info : FileUtils.listFilesAndDirs(new File(isOracleDir), TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE)) {
                    if(info.isDirectory()) {
    
                        ArrayList<File> getFiles = new ArrayList<File>();
    
                        this.arrayDirInFileList(getFiles, info);
    
                        for (File inDirIsFile : getFiles) {
                            oracleMapperMap.put(inDirIsFile.getName(),this.readMapperFile(inDirIsFile.getPath()));
                        }
                    }else{
                        oracleMapperMap.put(info.getName(),this.readMapperFile(info.getPath()));
                    }
                }
    
    
                //타 DB
                for (File info : FileUtils.listFilesAndDirs(new File(isHanaDir), TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE)) {
                    if(info.isDirectory()) {
                        ArrayList<File> fileList = new ArrayList<File>();
    
                        this.arrayDirInFileList(fileList, info);
    
                        for (File inDirIsFile : fileList) {
                            hanaMapperMap.put(inDirIsFile.getName(),this.readMapperFile(inDirIsFile.getPath()));
                        }
                    }else{
                        hanaMapperMap.put(info.getName(),this.readMapperFile(info.getPath()));
                    }
                }
    
    
                Iterator<String> fileIdMaps = oracleMapperMap.keySet().iterator();
                while( fileIdMaps.hasNext() ){
                    //file name
                    String key = fileIdMaps.next();
    
                    //파일에 담겨있는 id 값
                    Map<String,Object> oracleFileIdMap = oracleMapperMap.get(key);
                    Map<String,Object> hanaFileIdMap = hanaMapperMap.get(key);
    
                    Iterator<String> idTexts = oracleFileIdMap.keySet().iterator();
                    while (idTexts.hasNext()){
                        String id = idTexts.next();
                        if(!hanaFileIdMap.containsKey(id)){
                            System.out.println("FileName : "+key + " // ID : "+id);
                        }
                    }
                }
    
                System.out.println("check");
    
            }catch (Exception e){
                System.out.println(e.getMessage());
            }
        }
    
    
        public ArrayList<File> arrayDirInFileList(ArrayList<File> files ,File dir){
    
            if(dir.isDirectory()) {
                File[] children = dir.listFiles();
                for(File f : children) {
                    // 재귀 호출 사용
                    // 하위 폴더 탐색 부분
                    arrayDirInFileList(files,f);
                }
            } else {
                files.add(dir);
            }
    
            return files;
        }
    
    
        public Map<String,Object> readMapperFile(String filePath){
    
    
            String repLine = "";
            int buffer;
            Map<String,Object> resultMapper = new HashMap<String, Object>();
            String line = "";
            try{
                // read
                File file = new File(filePath);
                BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
                while ((line = bufferedReader.readLine()) != null) {
    
                    if(line.indexOf("id=\"") > -1){ //id=를 찾는다.
    
                        int startIdText = line.indexOf("id=\"");
                        int startIdTextEnd = line.indexOf("\"",startIdText)+1;
                        int endIdText = line.indexOf("\"",startIdTextEnd);
                        //resultMapper.put()
                        String idText = line.substring(startIdTextEnd,endIdText);
    
                        resultMapper.put(idText,idText);
                    }
    
                }
    
                bufferedReader.close();
            }catch (Exception e){
                System.out.println(e.getMessage());
            }
    
    
            return resultMapper;
        }
    
    
    }
    

     

    'JAVA' 카테고리의 다른 글

    2개의 DB간 Table & Column 차이 비교  (0) 2021.03.12
    Stack / Heap / Garbage Collection  (0) 2020.11.18
    Mybatis null check java method로 처리하기  (0) 2020.08.25
    Excel Sheet Copy  (0) 2019.06.05
    JCF( Java Collections Framework )  (0) 2019.05.20

    댓글

Designed by black7375.