Moving property files outside jar in spring standalone application


In one of Spring standalone project, we needed to move the property files out of the jar for easy configurability.
I followed following steps:
1. Move property files out of JAR and put in a directory say “target/lib”

		<plugin>
	           <artifactId>maven-antrun-plugin</artifactId>
	           <executions>
	             <execution>
	               <phase>validate</phase>
	               <goals>
	                 <goal>run</goal>
	               </goals>
	               <configuration>
	                 <tasks>
				<copy todir="target/lib" overwrite="true">
					<fileset dir="src/main/resources/">
						<include name="*.properties"/>
						<include name="*.xml"/>
					</fileset>
				</copy>
	                 </tasks>
	               </configuration>
	             </execution>
	           </executions>
        	 </plugin>

2. Exclude inclusion of files from the JAR. This will include only .hbm files in resource and any XML file in META-INF (I wanted to keep application-context.xml used by spring inside JAR)

			<resource>
				<directory>${basedir}/src/main/resources</directory>
				<filtering>true</filtering>	
				<includes>
					<include>**/*.hbm.xml</include>
					<include>META-INF/*.xml</include>
				</includes>
			</resource>

3. Use maven-jar plugin to include class path information in MANIFEST.MF. This one is MOST important

	        <plugin>
	            <groupId>org.apache.maven.plugins</groupId>
	            <artifactId>maven-jar-plugin</artifactId>
	            <configuration>
	                <archive>
	                    <manifest>
	                        <addClasspath>true</addClasspath>
	                        <classpathPrefix>lib/</classpathPrefix>
                                       <mainClass>
                                             com.usat.digitalportal.service.impl.BootStrap
                                        </mainClass>
	                    </manifest>
	                    <manifestEntries>
           					 <Class-Path>. lib</Class-Path>
        			</manifestEntries>
	                </archive>
	            </configuration>
	        </plugin> 

a. Use “classpathPrefix” to specify folder name in which all properties will be placed.
b. Use “Class-Path” to specify the folder. “.” Indicate current folder, while “lib” specifies “lib” folder in same directory as JAR (I have used lib).
4. Changes in spring application-context.xml
a. Add line to look for property file in declared class path

<context:property-placeholder location="classpath*:**/settings.properties, classpath*:**/usat.properties” />	   

b. Add line to import resources from class path

		<import resource="classpath*:**/dao-config.xml"/>	 

This is all which is needed. Run maven target as –X clean install and it should Generate a lib folder

About these ads

About ChandanPandey

Try to come up with a good design as by product of good coding practices

Posted on June 6, 2012, in Spring and tagged , . Bookmark the permalink. 1 Comment.

  1. nice post ….

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: