[PostgreSQL] DB 연결 변경하기
스프링으로 구성된 웹 applicationContext의 Bean 설정 변경을 통한 작업
사전 작업
java Resources 나누기
local 작업용으로 development
배포 서버용으로 production
development/applicationContext.xml
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="org.postgresql.Driver" /> <property name="url" value="jdbc:postgresql://192.168.1.44:5432/webdb" /> <property name="username" value="webdb" /> <property name="password" value="webdb" /> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="configLocation" value="classpath:mybatis/configuration.xml" /> </bean> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory" /> </bean>
production/applicationContext.xml
<!-- Connection Pool DataSource-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="org.mariadb.jdbc.Driver" />
<property name="url" value="jdbc:mariadb://localhost:3307/webdb" />
<property name="username" value="webdb" />
<property name="password" value="webdb" />
</bean>
<!-- MyBatis SqlSessionFactoryBean -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis/configuration.xml" />
</bean>
<!-- MyBatis SqlSessionTemplate -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
development에서는 PostgreSQL DB로 작업할 수 있도록 DataSource를 설정
production에서는 MySQL DB로 작업할 수 있도록 DataSource를 설정
위와 같이 작업 디렉토리를 구분하므로 얻는 이점은 동일한 mybatis/configuration 를 사용하기가 용이해졌으며 실질적으로 변경해야하는 구간은 DataSource, mybatis/mapper 이다.
추후에도 변경이 필요한 사항은 DataSource 와 mapper
DB에 따른 변경 내용
우선 applicationContext.xml에서 dataSource를 변경한다.
이제 sqlsessionfactory가 확인하는 mybatis/configuration.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>
<typeAliases>
<!-- 마이바티스 상에서 alias는 꼭 소문자로 작성해야함 -->
<!-- 맵퍼의 alias로 설정해준 Vo를 참조함 -->
<typeAlias alias="uservo" type="com.cafe24.mysite.vo.UserVo"/>
<typeAlias alias="guestbookvo" type="com.cafe24.mysite.vo.GuestbookVo"/>
<typeAlias alias="boardvo" type="com.cafe24.mysite.vo.BoardVo"/>
<typeAlias alias="pagevo" type="com.cafe24.mysite.vo.PageVo"/>
</typeAliases>
<mappers>
<mapper resource="mybatis/mapper/user.xml" />
<mapper resource="mybatis/mapper/guestbook.xml" />
<mapper resource="mybatis/mapper/board.xml" />
</mappers>
</configuration>
두 작업 디렉토리 모두 동일한 구성이다.
하지만 DB가 변경됨에 따라 SQL 구문이 변경이 있을 수 있으므로 mapper 내용을 변경해보자
PostgreSQL 을 사용하는 development/mybatis/mapper/guestbook.xml
<?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="guest"> <select id="getList" resultType="guestbookvo"> <![CDATA[ select no, name, contents, to_char(reg_date, 'YYYY-MM-DD') from guestbook order by reg_date desc ]]> </select> <delete id="delete" parameterType="guestbookvo" > <![CDATA[ delete from guestbook where no=#{no} and password=#{password} ]]> </delete> <insert id="insert" parameterType="guestbookvo"> <![CDATA[ insert into guestbook values( default, #{name }, #{password }, #{contents }, now() ) RETURNING no ]]> </insert> </mapper>
MySQL 을 사용하는 production/mybatis/mapper/guestbook.xml
<?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="guest"> <select id="getList" resultType="guestbookvo"> <![CDATA[ select no, name, contents, date_format(reg_date, '%Y-%m-%d %h:%i:%s') from guestbook order by reg_date desc ]]> </select> <delete id="delete" parameterType="guestbookvo" > <![CDATA[ delete from guestbook where no=#{no} and password=#{password} ]]> </delete> <insert id="insert" parameterType="guestbookvo"> <![CDATA[ insert into guestbook values( null, #{name }, #{password }, #{contents }, now() ) ]]> <selectKey keyProperty="no" resultType="long" order="AFTER"> select last_insert_id() </selectKey> </insert> </mapper>
최종적으로 local에서 작업할 때와 젠킨스로 배포하여 리눅스 서버에서 작업할 때 다른 DB를 참조하고 있는 것을 확인할 수 있을 것이다.
바꿔준 내용은 작업 디렉토리, applicationContext.xml 내 dataSource, mapper의 SQL 구문만 바꿔주면 된다.
'DB > PostgreSQL' 카테고리의 다른 글
[PostgreSQL] 계정 생성, 권한 부여, 접속 설정 (0) | 2019.06.11 |
---|---|
[PostgreSQL] CentOS6.9에 설치 및 세팅 (0) | 2019.06.10 |