JAVA2015. 8. 11. 15:16

지난 시간에 JAVA + SPRING + MYBATIS를 연동 하는 것을 배워 보았다. 이번에는 JAVA에서 MYBATIS를 연동 하는 법을 배워보자

우선 MAVEN을 통해서 라이브러리를 받아 보도록 하자. 본인은 mybatis 3.3.0을 활용 하였다.


======================================================================

<dependency>

  <groupId>org.mybatis</groupId>

  <artifactId>mybatis</artifactId>

  <version>3.3.0</version>

  <scope>compile</scope>

</dependency>

======================================================================


Mybatis는 DB 접속 정보를 XML로 따로 빼서 관리 할 수도 있고, 그렇지 않으면 코드 상으로 입력을 할 수도 있다. 근데 서버 정보를 소스에 넣으면 서버 정보가 변경 되게 되면 새로 컴파일을 해야 하는데 관리자가 개발 하고 프로젝트를 빠져 버리게 되면 누가 관리 하겠는가? 그래서 XML로 별도 관리 하는 것을 추천 한다. 


파일명을 mybatis-config.xml이라는 빈 XML 파일을 생성 한다. 그러곤 아래와 같이 넣는다. 


======================================================================

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration

  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

  "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

  <environments default="development">

    <environment id="development">

      <transactionManager type="JDBC"/>

      <dataSource type="POOLED">

        <property name="driver" value="org.mariadb.jdbc.Driver"/>

        <property name="url" value="jdbc:mysql://www.cdesystem.com/test"/>

        <property name="username" value="wcs"/>

        <property name="password" value="wcs"/>

      </dataSource>

    </environment>

  </environments>

  <mappers>

    <mapper resource="BMRBTMapper.xml"/>

  </mappers>

</configuration>

======================================================================



여기서 보면  mapper resource라고 해서 다른 XML을 참조 하게 된다. 이 부분은 쉽게 이야기 하자면 쿼리를 모아 놓은 XML이라고 생각하자!!  단순히 쿼리만 모아 놓은것이 아니라 VO와 맵핑을 시켜 준다. 


그렇다면 이제 mapper를 생성해 보자! 



=======================================================================

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper

  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

  

<mapper namespace="kr.laby">


<select id="selectSystemLogs" parameterType="String" resultType="kr.laby.VO.SystemLogs">

SELECT 

TYPE, 

SYSTEM, 

INTERFACE AS IFNAME, 

IP, 

SERVERDESC, 

STATUS, 

MESSAGE, 

SERVICE_ID, 

DEVICE, 

REQTIME, 

DATASIZE, 

FILE1,

FILE2, 

CRUSER, 

CRTYPE, 

CRTIME, 

FROMDEVICE, 

TIME

FROM      SYSTEM_LOGS

</select>

<select id="hlsServerList" parameterType="String" resultType="kr.laby.VO.HLSServerList">

SELECT IP FROM HLS_SERVER_LIST WHERE PURPOSE='HLS_실시간'

</select>

</mapper>

=======================================================================

이렇게 쿼리를 넣어 주시면 되겠다.그러고 나서 그 쿼리에 해당 하는 ResultType을 VO의 패키지명으로 선언을 하게 되면 바로 맵핑이 되어서 자바에서 쓸 수 있다는 사실!! 


이제 자바 소스 코드를 확인해 보자 

환경 설정 파일을 만들었으니 환경 설정을 불러 봐야 겠죠? InputStream을 활용하여 파일을 읽어 들입니다. 

String configFile = "mybatis-config.xml";

InputStream inputStream = Resources.getResourceAsStream(configFile);

이렇게 하면 DB와 연결할 정보를 주입 하는데 까지는 성공 하신거죠!! 


Mybatis의 경우 모든 MyBatis 애플리케이션은 SqlSessionFactory 인스턴스를 사용합니다. SqlSessionFactory 인스턴스는 SqlSessionFactoryBuilder 를 사용하여 만들수 있습니다. 어떻게요? 요로케요


SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

SqlSession sqlSession = sqlSessionFactory.openSession();


이렇게 하면 디비와 세션 까지 맺어지게 됩니다. 

그럼 이제 쿼리 문을 날려 봐야 겠죠? 

List<?>result = null;

result = sqlSession.selectList(mapper);


이렇게 하면 디비에 연결 해서 값까지 가져 오는데 까지 성공!! 이젠 빼서 쓰시기만 하시면 되요~ 



소스 정리

String configFile = "mybatis-config.xml";

InputStream inputStream = Resources.getResourceAsStream(configFile);

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

SqlSession sqlSession = sqlSessionFactory.openSession();

result = sqlSession.selectList(mapper);

inputStream.close();

sqlSession.close();

for (int i=0 ; i<result.size() ; i++)

{

System.out.println(result.get(i).getIP());

}



참~~ 쉽죠? 근데 모르면 어렵더라구요 ㅠ.ㅠ 


Posted by 원찬식
JAVA2015. 8. 7. 17:21

서버간의 파일을 공유 하고 싶을때 rsync나 scp를 활용 할 수 있다. 
이번에는 rsync에 대해서 알아 보도록 하자. 

우선 rsync를 사용하기 위해서는 rsync가 필요 하겠지? 패키지가 설치 되어 있는지 확인해 볼 필요가 있겠다. 


Server program install

# rpm -qa | grep rsync

없다면 

# yum install rsync


xinetd 패키지도 필요 하다. 

#  rpm -qa | grep xinetd

마찬가지로 없다면 

# yum install xinetd

사용할 준비는 되었다.


Server Setting

# vi /etc/xinetd.d/rsync 를 열어서 

disable = yes라고 되어 있는 부분을 no로 변경 하자.

# default: off

# description: The rsync server is a good addition to an ftp server, as it \

#       allows crc checksumming etc.

service rsync

{

        disable = no

        socket_type     = stream

        wait            = no

        user            = root

        server          = /usr/bin/rsync

        server_args     = --daemon

        log_on_failure  += USERID

}


Client Setting

이제는 환경 설정 파일을 만들어 줄 차례이다 

# vi /etc/rsyncd.conf


[bmrbt]                                                                  #rsync 서비스명

path=/svc/                                                            #경로

comment = rsync_channel_image

uid = svc

gid = svc

use chroot=yes

read only = no

host allow=114.202.131.248


max connections = 5

timeout=300



이제는 서비스를 재시작!!
# /etc/init.d/xinetd restart

기본 포트는 873 포트를 사용 한다. 포트가 막혔는지 telnet을 활용하여 확인하기 바랍니다. 


이제는 클라이언트 서버에서 명령어를 통해 파일을 송/수신을 받을 수 있다. 

rsync [옵션] [보낼파일 및 폴더] [받을 파일 및 폴더]

rsync -av WON 114.202.131.247::bmrbt/
rsync -av 114.202.131.247::bmrbt ./

이런 식으로... 

근데 만약에 이런 에러가 난다면... 
rsync: mkstemp "/.test.PZQvTe" (in BACKUP) failed: Permission denied (13)
나처럼 삽질 안하시길.... 

문제는 sellinux란 녀석 때문... 이건 리눅으세 보안을 관장하는 프로그램인데 이녀석이 활성화 되어 있으면 접근을 하지 못하게 된다. 따라서 이 부분을 비활성화 하면 되는데 비활성화 하는 방법은 

/etc/selinux/conf 파일에서

SELINUX=enforcing으로 되어 있는데  

SELINUX=disabled 로 변경 한다.


# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

#     enforcing - SELinux security policy is enforced.

#     permissive - SELinux prints warnings instead of enforcing.

#     disabled - No SELinux policy is loaded.

SELINUX=disabled

# SELINUXTYPE= can take one of these two values:

#     targeted - Targeted processes are protected,

#     mls - Multi Level Security protection.

SELINUXTYPE=targeted


요로코롬...  변경하고 서버를 재부팅 한다. 

#reboot 또는 shutdown -r now


그런담에 다시 해 보시면.. 우왕... 신세계!! 









Posted by 원찬식
JAVA2015. 7. 22. 17:31
시스템이 처음 시작 될때... 
반드시 실행 되어야 하는 스케쥴이나 일련의 작업이 필요 할 경우 Spring에서 listener를 등록 해 주시면 됩니다. 

web.xml을 열어서 아래 내용을 추가해 주세요.


<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>


<listener>

<listener-class>com.laby.listener.InitListener</listener-class>

</listener>



그렇다면 initListener는? 


InitListener.java



Posted by 원찬식
JAVA2015. 7. 21. 11:27


apache-tomcat-7.0.62.tar.gz


apr-1.5.2.tar.gz


apr-util-1.5.4.tar.gz


httpd-2.4.12.tar.gz


pcre-8.36.tar.gz


tomcat-connectors-1.2.40-src.tar.gz


Apache install 



cat > /svc/was/apache/conf/mod_jk.conf



cat > workers.properties



httpd.conf 에 내용 추가


Tomcat Start!

./startup.sh


Server Start!

# ./httpd -k start

Posted by 원찬식
JAVA2015. 6. 19. 15:14

        // 방법1

        Iterator<String> keys = map.keySet().iterator();

        while( keys.hasNext() ){

            String key = keys.next();

            System.out.println( String.format("키 : %s, 값 : %s", key, map.get(key)) );

        }

         

        // 방법2

        for( Map.Entry<String, String> elem : map.entrySet() ){

            System.out.println( String.format("키 : %s, 값 : %s", elem.getKey(), elem.getValue()) );

        }

         

        // 방법3

        for( String key : map.keySet() ){

            System.out.println( String.format("키 : %s, 값 : %s", key, map.get(key)) );

        }

Posted by 원찬식
JAVA2015. 4. 30. 17:12

1. WEB.XML

   <listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

<listener>

<listener-class>com.laby.listener.InitListener</listener-class>

</listener>





2. Add Class file


package com.laby.listener;


import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;


public class InitListener implements ServletContextListener{

@Override

public void contextInitialized (ServletContextEvent sce)

{

System.out.println("LISTENER");

}

@Override

public void contextDestroyed (ServletContextEvent sce)

{

}

}

Posted by 원찬식
JAVA2015. 4. 30. 15:26

1. Insert "task" namespae in root-context.xml



2. Add this line in root-context.xml


<task:annotation-driven />

     

    <bean id="myAppScheduleJobs" class="com.laby.crontab.Scheduler" />



3. Add Class file



package com.laby.crontab;


import org.springframework.scheduling.annotation.Scheduled;


public class Scheduler {

/**

* 10

*/

@Scheduled(fixedDelay=5000)

public void anaisysMeta(){

System.out.println("Meta Call");

}

}



4. Testing.....




GOOD!!!! 

Posted by 원찬식
JAVA2015. 4. 14. 14:01

CREATE USER 'wonword'@'localhost' IDENTIFIED BY 'password';

CREATE USER 'wonword'@'%' IDENTIFIED BY 'password';

CREATE DATABSE monitor;

GRANT ALL PRIVILEGES ON monitor.* TO 'wonword'@'localhost';

GRANT ALL PRIVILEGES ON monitor.* TO 'wonword'@'%';

FLUSH PRIVILEGES;

Posted by 원찬식
JAVA2015. 3. 12. 17:43

mysql Install

1. sudo apt-get update && sudo apt-get upgrade

2. sudo apt-get install mysql-server --fix-missing




mysql 설정 파일 변경 (외부에서 접근이 되지 않을 경우)

1. sudo vi /etc/mysql/my.cnf

2. bind-aaddress 속성을 주석 처리 (이거 안해서 고생좀 했다.)

3. sudo /etc/init.d/mysql restart

Posted by 원찬식
JAVA2015. 3. 11. 13:53

Spring + Maven + Mybatis을 연동한 간단한 샘플


Sample Download

http://me2.do/GGRfdwNr

Posted by 원찬식