본문 바로가기
DB/Mongo DB

[MongoDB] Oracle과 MongoDB연동, abstract

by JiGyeong 2016. 6. 3.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package com.ktds.jgbaek;
 
import org.slf4j.Logger;
 
public abstract class CustomLogger {
    // abstract 추상 클래스
    
    protected Logger logger;
    // protected :상속 관계까지에서만 쓸수 있다.
    // private : 나만 쓸수 있다.
    
    public CustomLogger(Logger logger) {
        this.logger=logger;
    }
    
    public void trace(String msg) {
        logger.trace(msg);
        writeTrace(msg);
    }
    
    public void debug(String msg) {
        logger.debug(msg);
        writeDebug(msg);
    }
    
    public void info(String msg) {
        logger.info(msg);
        writeInfo(msg);
    }
    
    public void warn(String msg) {
        logger.warn(msg);
        writeWarn(msg);
    }
    
    public void error(String msg) {
        logger.error(msg);
        writeError(msg);
    }
    
    protected abstract void writeTrace(String msg);
    protected abstract void writeDebug(String msg);
    protected abstract void writeInfo(String msg);
    protected abstract void writeWarn(String msg);
    protected abstract void writeError(String msg);
    
    
}
 
cs


abstract
자신의 역할도 하고, 나머지는 다른 상속받는 클래스에게 맡긴다.

기본기능 : customlog 찍히게 한다.

subclass is a super class

인터페이스와 같은 기능


순서가 있는 추상화 abstract : 낮은 추상화

순서가 없는 추상화 interface : 높은 추상화



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package com.ktds.jgbaek;
 
 
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
 
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
 
import org.slf4j.Logger;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.context.support.WebApplicationContextUtils;
 
public class MongoLogger extends CustomLogger{
 
    private MongoTemplate mongoTemplate;
 
    private MongoLogger(Logger logger) {
        super(logger);
    }
 
    public MongoLogger(Logger logger, MongoTemplate mongoTemplate) {
        super(logger);
        this.mongoTemplate = mongoTemplate;
    }
    
    public MongoLogger(Logger logger, String mongoTemplateBeanName) {
        super(logger);
        setMongoTemplateFromXML(mongoTemplateBeanName);
    }    
    
    private void setMongoTemplate(String mongoTemplateBeanName){
        
        // Spring Bean에서 가지고오는 방법
        HttpServletRequest request = 
                ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        HttpSession session = request.getSession();
        ServletContext context = session.getServletContext();
        
        WebApplicationContext webContext = WebApplicationContextUtils.getWebApplicationContext(context);
        this.mongoTemplate = (MongoTemplate) webContext.getBean(mongoTemplateBeanName);
    }
    
    private void setMongoTemplateFromXML(String mongoTemplateBeanName){
        
        String mongoContext = "/mongoContextForLogger.xml";
        
        AbstractApplicationContext ctx = new ClassPathXmlApplicationContext(mongoContext);
        this.mongoTemplate = (MongoTemplate) ctx.getBean(mongoTemplateBeanName);
    }
    
    @Override
    protected void writeTrace(String msg) {
        // 1. Log Level 5
        // 2. 시간 : 언제 
        // 3. 요청자 : 누가
        // 4. 로그 메세지 : 무엇을
        
        Map<String, Object> log = new HashMap<String, Object>();
        log.put("LEVEL""TRACE");
        log.put("DATETIME"new Date());
        log.put("REQUESTER", logger.getName());
        log.put("MESSAGE", msg);
        
        mongoTemplate.insert(log,"log");
    }
 
    @Override
    protected void writeDebug(String msg) {
        
        Map<String, Object> log = new HashMap<String, Object>();
        log.put("LEVEL""DEBUG");
        log.put("DATETIME"new Date());
        log.put("REQUESTER", logger.getName());
        log.put("MESSAGE", msg);
        
        mongoTemplate.insert(log,"log");
    }
 
    @Override
    protected void writeInfo(String msg) {
        
        Map<String, Object> log = new HashMap<String, Object>();
        log.put("LEVEL""INFO");
        log.put("DATETIME"new Date());
        log.put("REQUESTER", logger.getName());
        log.put("MESSAGE", msg);
        
        mongoTemplate.insert(log,"log");
        
    }
 
    @Override
    protected void writeWarn(String msg) {
        
        Map<String, Object> log = new HashMap<String, Object>();
        log.put("LEVEL""WARN");
        log.put("DATETIME"new Date());
        log.put("REQUESTER", logger.getName());
        log.put("MESSAGE", msg);
        
        mongoTemplate.insert(log,"log");
        
    }
 
    @Override
    protected void writeError(String msg) {
        
        Map<String, Object> log = new HashMap<String, Object>();
        log.put("LEVEL""ERROR");
        log.put("DATETIME"new Date());
        log.put("REQUESTER", logger.getName());
        log.put("MESSAGE", msg);
        
        mongoTemplate.insert(log,"log");
        
    }
}
 
cs


context에 DAO와 MongoTemplate bean을 추가해주고 




몽고db에 넣을 post명 지정



DAO에 아까 지정한 post명으로 object넘김





글쓰기 했을시 로그 저장되도록 설정

컨트롤러에서 지정





** 몽고 db에 들어간 결과화면 **





'DB > Mongo DB' 카테고리의 다른 글

[BigData] Mongo DB실습하기  (0) 2016.07.01
[MongoDB] Aggregation Function  (0) 2016.06.02
[MongDB] update, find  (0) 2016.06.02
[MongoDB] Spring과 연결해 사용하기  (0) 2016.06.02
[Big Data] MapReduce  (0) 2016.06.01