Maven pom.xml에서 properties 파일 읽어오기

기본

스프링 프레임워크에서 xml로 설정 파일을 분리시켜 놓긴 했지만, 그래도 데이터베이스 계정이라던지 스프링에 관련 없는 설정 파일도 생기게 마련인데요. 아마 간단하게 properties를 많이 애용하실 겁니다. 저도 그렇구요.

Maven에서 carbon5 플러그인으로 데이터베이스 이력관리를 하다보니 pom.xml에도 jdbc 접속 계정이나  driver 정보가 필요하게 되는데요. 이 정보는 스프링 프레임워크에서 DataSource를 초기화 하는데 한 번 더 쓰이게 됩니다.

그래서 Maven 설정 파일인 pom.xml과 스프링프레임워크 설정 파일인 applicationContext.xml에서 하드코딩 안하고 동시에 사용 가능한 외부 설정 파일이 없을까 하다가 Maven에서 properties 파일을 읽어올 수 있는 플러그인을 찾았습니다.

사용 방법:
먼저 저장소를 추가해 줍니다. 아직 알파 버전인데 사용하는데 문제는 없어보였습니다.

<repositories>
	<repository>
		<id>Codehaus Snapshots</id>
		<url>http://nexus.codehaus.org/snapshots/</url>
		<snapshots>
			<enabled>true</enabled>
		</snapshots>
		<releases>
			<enabled>false</enabled>
		</releases>
	</repository>
</repositories>
<pluginRepositories>
	<pluginRepository>
		<id>Codehaus Snapshots</id>
			<url>http://nexus.codehaus.org/snapshots/</url>
		<snapshots>
			<enabled>true</enabled>
		</snapshots>
		<releases>
			<enabled>true</enabled>
		</releases>
	</pluginRepository>
</pluginRepositories>
<plugins>
	<plugin>
		<groupId>org.codehaus.mojo</groupId>
		<artifactId>properties-maven-plugin</artifactId>
		<version>1.0-alpha-2</version>
		<executions>
			<execution>
				<phase>initialize</phase>
				<goals>
					<goal>read-project-properties</goal>
				</goals>
				<configuration>
					<files>
						<file>src/mavenpilot/config/jdbc.properties</file>
					</files>
				</configuration>
			</execution>
		</executions>
	</plugin>
</plugins>

이렇게 사용하시면 됩니다. properties를 읽어오는거 외에 쓰기 기능과 프로필 지원 기능도 있습니다.

ps. carbon5 플러그인을 사용해서 새로운 스키마를 만들 때 db-migration:new 해서 만들게 되는데 이때, properties를 못읽어와서 예외가 발생할 수 있습니다.
그래서 properties:read-project-properties db-migration:new 식으로 properties를 읽는 골을 먼저 실행하셔야 합니다.

Advertisements

Maven 플러그인 carbon5로 데이터베이스 마이그레이션하기

기본

박재성님의 자바 세상의 빌드를 이끄는 메이븐을 보던 중, carbon5로 데이터베이스 마이그레이션 하는 부분이 잘 안돼서 방법을 찾아봤습니다.

1. 플러그인 인식을 못하는 문제

c5-db-migration 플러그인 페이지에서 Wiki -> MavenPlugin 페이지에 있는 예제 코드가 책에 나와있는 것과 같은데, 버전 차이가 나서 그런건지 플러그인 인식을 못하더라구요.

그래서 c5 저장소 페이지에 들어가서 pom 파일을 열어보다가 그룹 아이디가 좀 다른 것을 발견했습니다. 예제 코드에선 com.carbonfive.db-suuport 요렇게 되있는데 pom 파일을 확인해 보니 com.carbonfive 그냥 이렇게 되있더라구요. 그리고 <version>부분에서 RELEASE로 설정하면 에러가 발생하고 LASTEST로 했더니 경고가 발생합니다.(에러였던가?) 그래서 최신 버전으로 바꿔줬습니다.

<groupId>com.carbonfive</groupId>

<artifactId>db-migration-maven-plugin</artifactId>

<version>0.9.7</version>

2. db-migration:migrate 골 실행 시, JDBC URL에 접근할 수 없다는 에러가 발생하는 문제

c5 플러그인을 사용하기 전에 DB가 만들어져 있고 데이터도 들어 있었습니다. 그래서 그런지 에러가 발생했습니다. 이상하게 db-migration:drop 골도 에러가 발생하더라구요.

DB를 수동으로 drop 시키고 다시 migrate골을 실행해도 같은 문제 발생. DB를 수동으로 만들지 않고 db-migration:create 골을 이용해서 생성하고 다시 db-migration:migrate 골을 실행하니 정상적으로 돌아갔습니다.

migration 파일들이 생성되는 경로를 수정하고 디폴트 페이즈에 얹는 작업을 한 최종 결과:

<plugin>
	<groupId>com.carbonfive</groupId>
	<artifactId>db-migration-maven-plugin</artifactId>
	<version>0.9.7</version>
	<configuration>
		<url>${jdbc.url}</url>
		<username>${jdbc.username}</username>
		<password>${jdbc.password}</password>
		<migrationsPath>src/mavenpilot/config/migrations/</migrationsPath>
	</configuration>
	<dependencies>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.16</version>
		</dependency>
	</dependencies>
	<executions>
		<execution>
			<id>migrate-db-schema</id>
			<phase>process-test-resources</phase>
			<goals>
				<goal>migrate</goal>
				<goal>validate</goal>
			</goals>
		</execution>
	</executions>
</plugin>