第一步,使用maven创建一个简单的project。
这里取名为maven-demo,工程目录结构如下图:
pom.xml 配置文件如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.shell.maven.demo</groupId> <artifactId>maven-demo</artifactId> <version>1.0.0-SNAPSHOT</version> <name>maven-demo</name> <url>http://maven.apache.org</url> <!-- 指定私服 --> <repositories> <repository> <id>myRepo</id> <name>myRepo Repository</name> <url>http://maven.shell.com.cn:8081/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>myRepo</id> <name>myRepo Repository</name> <url>http://maven.shell.com.cn:8081/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> <build> <!-- 指定在jdk1.6环境下编译 --> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> </plugins> </build> </project>
第二步,添加对Spring等第三方依赖。
pom.xml配置文件修改成如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.shell.maven.demo</groupId> <artifactId>maven-demo</artifactId> <version>1.0.0-SNAPSHOT</version> <name>maven-demo</name> <url>http://maven.apache.org</url> <properties> <springframework.version>3.1.0.RELEASE</springframework.version> </properties> <!-- 指定私服 --> <repositories> <repository> <id>myRepo</id> <name>myRepo Repository</name> <url>http://maven.shell.com.cn:8081/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>myRepo</id> <name>myRepo Repository</name> <url>http://maven.shell.com.cn:8081/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> <build> <!-- 指定在jdk1.6环境下编译 --> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> </plugins> </build> <dependencies> <!-- spring 有关jar --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${springframework.version}</version> </dependency> <!-- oracle 驱动 --> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.2.0.3.0</version> </dependency> <!-- 采用dbcp数据源 --> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency> <!-- comomons jar --> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2</version> </dependency> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.8.3</version> </dependency> </dependencies> </project>
第三步,在classpath目录下创建spring配置文件applicationContext.xml,同时定义id="dataSource"及id="jdbcTemplate"的bean。
applicationContext.xml配置文件如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="url" value="${jdbc.url}"/> <property name="driverClassName" value="${jdbc.driverClassName}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <property name="initialSize" value="1"/> <property name="maxActive" value="2"/> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean> </beans>
第四步,修改pom.xml配置文件,添加数据库连接相关的属性定义,同时开启maven资源过滤。
pom.xml配置文件修改成如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.shell.maven.demo</groupId> <artifactId>maven-demo</artifactId> <version>1.0.0-SNAPSHOT</version> <name>maven-demo</name> <url>http://maven.apache.org</url> <properties> <!-- system property --> <encoding>UTF-8</encoding> <maven.test.skip>true</maven.test.skip> <skipTests>true</skipTests> <springframework.version>3.1.0.RELEASE</springframework.version> <!-- jdbc properties 本地连接的配置 --> <jdbc.url>jdbc:oracle:thin:@localhost:1521:shell</jdbc.url> <jdbc.driverClassName>oracle.jdbc.driver.OracleDriver</jdbc.driverClassName> <jdbc.username>scott</jdbc.username> <jdbc.password>yangxi2010</jdbc.password> </properties> <repositories> <repository> <id>myRepo</id> <name>myRepo Repository</name> <url>http://maven.infinitus.com.cn:8081/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>myRepo</id> <name>myRepo Repository</name> <url>http://maven.infinitus.com.cn:8081/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> <build> <!-- 对主资源目录开启资源过滤 --> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <!-- 指定在jdk1.6环境下编译 --> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> </plugins> </build> <dependencies> <!-- spring 有关jar --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${springframework.version}</version> </dependency> <!-- oracle 驱动 --> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.2.0.3.0</version> </dependency> <!-- 采用dbcp数据源 --> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency> <!-- comomons jar --> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2</version> </dependency> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.8.3</version> </dependency> </dependencies> </project>
第五步,在main方法中启动spring容器,使用jdbcTemplate查询一条数据出来。
本地数据库现在存在一张emp表,表中含有的数据如下图:
现在将empNo为7369的这条记录查询出来并在控制台输出。
main方法代码如下图:
/** * Test.java 2014年6月13日 */ package com.shell.maven.demo; import java.sql.ResultSet; import java.sql.SQLException; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.ResultSetExtractor; /** * <p> * <b>Test</b> 是 * </p> * * @since 2014年6月13日 * @author shell * @version $Id$ */ public class Test { /** * @param args */ public static void main(String[] args) { // 启动spring 容器 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); JdbcTemplate jdbcTemplate = (JdbcTemplate) applicationContext.getBean("jdbcTemplate"); // 查询数据 String sql = "select empno, ename, job from EMP "; String result = jdbcTemplate.query(sql, new ResultSetExtractor<String>() { public String extractData(ResultSet rs) throws SQLException, DataAccessException { rs.next(); String empNo = rs.getString(1); String eName = rs.getString(2); String job = rs.getString(3); return "empNo:" + empNo + ", eName:" + eName + ", job:" + job; } }); System.out.println(result); } }
第六步,编译maven-demo 工程。
在命令行执行 mvn clean install命令,入下图:
开始执行命令
编译成功结果
第七步,执行main方法,结果入下图:
看到上图蓝色框中的内容,表示数据查询操作成功。
此时我们可以去到classpath目录下查看applicationContext.xml文件的内容,结果如下图:
如上图所示,${jdbc.url}等变量被成功替换了。
maven的这个资源过滤特性可以帮助我们隔离开发环境和生产环境。不过要配合maven的profile配置才好用,
下面在pom.xml增加一个profile配置,用于配置生产环境的数据库连接信息。
第八步,配置生产环境数据库连接信息的profile
pom.xml配置文件增加如下配置:
<profiles> <profile> <id>prod</id> <properties> <!-- jdbc properties 生产连接的配置 --> <jdbc.url>jdbc:oracle:thin:@172.20.70.28:1521:gbst</jdbc.url> <jdbc.driverClassName>oracle.jdbc.driver.OracleDriver</jdbc.driverClassName> <jdbc.username>CBSPROD2</jdbc.username> <jdbc.password>CBSPROD2</jdbc.password> </properties> </profile> </profiles>重启编译后再看编译后的applicationContext.xml文件。(不过这时编译的命令要变一下,具体见第九步操作) 第九步,重新编译工程。(使用profile中的配置,个性化编译)
注意上面敲的是mvn clean install -P prod 命令,这里的-P表示使用profile的配置,prod是配置的生产数据库连接信息的profile的id名称。执行上诉命令后,id为prod的profile中的配置就会替换掉pom.xml中配置的相应的原内容。(这里替换的是properties中的内容)
提示编译成功,这是先去看下编译后的applicationContext.xml文件。 如下图:
从上图可以看到,数据库连接信息确实被替换成生产的了。 可以再次去查询生产库的中数据,验证效果。 -------------------------------------------------------- resource下的其它节点,见下图:
还有excludes includes targetPath 三个节点,具体用法可根据名称含义敲代码进行验证。 我的理解及验证结果如下:
<build> <!-- 主资源目录 --> <resources> <resource> <!-- 设定主资源目录 --> <directory>src/main/resources</directory> <!-- maven default生命周期,process-resources阶段执行maven-resources-plugin插件的resources目标处理主资源目下的资源文件时,只处理如下配置中包含的资源类型 <includes> <include>*.xml</include> </includes> --> <!-- maven default生命周期,process-resources阶段执行maven-resources-plugin插件的resources目标处理主资源目下的资源文件时,不处理如下配置中包含的资源类型(剔除下如下配置中包含的资源类型) <excludes> <exclude>*.xml</exclude> </excludes> --> <!-- maven default生命周期,process-resources阶段执行maven-resources-plugin插件的resources目标处理主资源目下的资源文件时,指定处理后的资源文件输出目录,默认是${build.outputDirectory}指定的目录 <targetPath>d:/</targetPath> --> <!-- maven default生命周期,process-resources阶段执行maven-resources-plugin插件的resources目标处理主资源目下的资源文件时,是否对主资源目录开启资源过滤 --> <filtering>true</filtering> </resource> </resources> </build>