[49일차] 로컬PC용 DB설정과 헤로쿠용 DB설정 (Hsql)
설정파일만들기 전,
root-context.xml
헤로쿠 배포할 때, url 경로를 /tmp/embeded/hsql_file.db로 변경
create table 실행 (헤로쿠 배포 후 주석처리)
<!-- HSQLDB FILE기반 사용 헤로쿠에 올릴때 생성경로는 /tmp/embeded/hsql_file.db , 로컬PC일때 경로는 c:/egov/workspace/embeded/hsql_file.db;hsqldb.lock_file=false-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.hsqldb.jdbcDriver" />
<property name="url" value="jdbc:hsqldb:file:/tmp/embeded/hsql_file.db" />
<property name="username" value="sa" />
<property name="password" value="" />
</bean>
<!-- CREATE TABLE 초기 1회만 실행 -->
<jdbc:initialize-database data-source="dataSource" ignore-failures="DROPS">
<jdbc:script location="classpath:/db/embeded_hsql_file.sql" />
</jdbc:initialize-database>
<!-- jdbc:hsqldb:mem:dataSource / jdbc:hsqldb:file:c:/egov/workspace/embeded/hsql_file.db -->
<!-- 테스트 실행용 DB매니저 실행:실제 사용시 아래 value - - 공백제거 하세요. -->
<!--
<bean depends-on="dataSource"
class="org.springframework.beans.factory.config.MethodInvokingBean">
<property name="targetClass" value="org.hsqldb.util.DatabaseManagerSwing" />
<property name="targetMethod" value="main" />
<property name="arguments">
<list>
<value>- -url</value>
<value>jdbc:hsqldb:file:c:/egov/workspace/embeded/hsql_file.db</value>
<value>- -user</value>
<value>sa</value>
<value>- -password</value>
<value></value>
</list>
</property>
</bean>
-->
servlet-context.xml
업로드 파일 저장 위치 변경 /tmp
<!-- 업로드한 파일이 저장되는 위치: 헤로쿠용 /tmp 로컬PC용 C:\\egov\\workspace\\upload-->
<beans:bean id="uploadPath" class="java.lang.String">
<beans:constructor-arg value="/tmp" />
</beans:bean>
로컬 PC의 DB 설정 파일, 업로드 경로 : 개발용
헤로쿠용 DB 설정 파일, 업로드 경로 : 운영 서버용
root-context.xml, servlet-context.xml 설정 파일에서 개발용과 운영 서버용 내용을 변경 처리해서 작업한다.
현업1. globals.properties파일을 만들어서 전역변수로 위 설정 내용을 변수처리해서 사용한다.
현업2. local.properties, prod.properties
( properties : 속성, product - 운영서버, local - 개발PC )
- local.properties 생성
#개발PC용 설정(데이터베이스타입, 아이디, 암호, 업로드 경로)
DbType=hsql_local
DbUserName=sa
DbPassword=
MapperType=mysql
UploadPath=C:\\egov\\workspace\\upload
- prod.properties
#운영서버용 설정(데이터베이스타입, 아이디, 암호, 업로드 경로)
DbType=hsql_prod
DbUserName=sa
DbPassword=
MapperType=mysql
UploadPath=/tmp
- root-context.xml
전역변수로 설정 파일 불러오기
로컬PC용) classpath:/properties/local.properties
운영서버용) classpath:/properties/prod.properties
- 로컬PC에서 개발할 때는 <value> file:/properties/local.properties</value>을 사용한다.
- 헤로쿠에 배포할 때는 <value> file:/properties/prod.properties</value> 을 사용한다.
<!-- 전역변수 설정 파일 불러오기 local용, prod용 propertyConfiguer 클래스 사용-->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<!-- 로컬개발일 때 사용 (아래) -->
<value>classpath:/properties/local.properties</value>
<!-- 운영서버개발일 때 사용 (아래) -->
<!-- value>file:/properties/prod.properties</value-->
</list>
</property>
</bean>
hsql DB생성 경로 설정. 로컬PC용(위), 운영 서버용(아래)
<!-- HSQLDB FILE기반 사용 헤로쿠에 올릴때 생성경로는 /tmp/embeded/hsql_file.db , 로컬PC일때 경로는 c:/egov/workspace/embeded/hsql_file.db;hsqldb.lock_file=false-->
<bean id="dataSource-hsql_local" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.hsqldb.jdbcDriver" />
<property name="url" value="jdbc:hsqldb:file:c:/egov/workspace/embeded/hsql_file.db;hsqldb.lock_file=false" />
<property name="username" value="sa" />
<property name="password" value="" />
</bean>
<bean id="dataSource-hsql_prod" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.hsqldb.jdbcDriver" />
<property name="url" value="jdbc:hsqldb:file:/tmp/embeded/hsql_file.db;hsqldb.lock_file=false" />
<property name="username" value="sa" />
<property name="password" value="" />
</bean>
코드 수정 시, lock걸리는 현상을 해결하기 위해 hsqldb.lock_file=false를 추가해준다.
<!-- jdbc:hsqldb:mem:dataSource / jdbc:hsqldb:file:c:/egov/workspace/embeded/hsql_file.db -->
<!-- 테스트 실행용 DB매니저 실행:실제 사용시 아래 value - - 공백제거 하세요. -->
<!--
<bean depends-on="dataSource"
class="org.springframework.beans.factory.config.MethodInvokingBean">
<property name="targetClass" value="org.hsqldb.util.DatabaseManagerSwing" />
<property name="targetMethod" value="main" />
<property name="arguments">
<list>
<value>- -url</value>
<value>jdbc:hsqldb:file:c:/egov/workspace/embeded/hsql_file.db;hsqldb.lock_file=false</value>
<value>- -user</value>
<value>sa</value>
<value>- -password</value>
<value></value>
</list>
</property>
</bean>
-->
id=dataSource -> id=dataSource-mysql_local
<!-- 로컬 mysql log4jdbc 설정후 -->
<bean id="dataSource-mysql_local" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName"
value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"></property>
<property name="url"
value="jdbc:log4jdbc:mysql://127.0.0.1:3306/edu"></property>
<property name="username" value="root"></property>
<property name="password" value="apmsetup"></property>
</bean>
mappers 폴더에 mysql 폴더를 생성해, boardMapper.xml, memberMapper.xml, replyMapper.xml을 폴더에 넣는다.
<!--
DataSource 설정으로 JDBC 연결후, MyBatis와 MySql을 연동시킴.
SqlSessionFactory : myBatis와 스프링의 Connection 생성후 쿼리 위치지정.
-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource-${DbType}" />
<!-- 매퍼 xml로만든 쿼리파일의 경로를 인식하게 함.(아래 classpath경로 src/main/resources/쿼리xml) -->
<property name="mapperLocations" value="classpath:mappers/**/${MapperType}/*Mapper.xml"></property>
</bean>
servlet-context.xml에 있던 빈을 root-context.xml로 옮긴 후, 업로드 경로 변수처리 ${UploadPath}
<!-- 업로드한 파일이 저장되는 위치: 헤로쿠용 /tmp 로컬PC용 C:\\egov\\workspace\\upload-->
<bean id="uploadPath" class="java.lang.String">
<constructor-arg value="${UploadPath}" />
</bean>