JAVA 기반 웹&앱 콘텐츠 융합 디지털 컨버전스 개발자 과정

[49일차] 로컬PC용 DB설정과 헤로쿠용 DB설정 (Hsql)

새싹개발자 2021. 1. 18. 23:23

설정파일만들기 전,

 

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>