构建开源的项目环境(Spring/ibatis/maven/nexus)

       项目中用到了SpringMVC、ibatis、maven等开源框架,因此想构建一套完整的开源项目开发环境。主要思路为:开发(自动生成bo/dao/xml,SpringMVC)->单元测试->持续集成编译->发布->重启等步骤。

       本文只介绍初步的思想和用到的工具,不涉及具体细节。

一、自动生成bo/dao/xml对象

         mybatis支持自动生成bo、dao、dao.xml配置文件,见如下类:

package com.xxx.xxx;

import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.test.annotation.Rollback;
import org.springframework.transaction.annotation.Transactional;

/**
 * 自动生成Mapper配置文件的单元测试类
 * @类名: GeneratorSqlMapTest.java 
 * @描述:
 * @作者: mxyanx
 * @修改日期: 2014年6月24日
 */
@Transactional
public class GeneratorSqlMapTest extends AbstractJUnitTest {
	
	@Value("${mybatis.config.path}")
	private String myBatisConfigPath;
	
	@Before
	public void init() {
		System.out.println("开始生成配置文件!!");
	}

	@Test
	@Rollback(false)
	public void tesDemo() {
		List<String> warnings = new ArrayList<String>();
		boolean overwrite = true;
		System.out.println(myBatisConfigPath);
		File configFile = new File(this.myBatisConfigPath+"/mybatisSqlMapGeneratorCfg.xml");
		ConfigurationParser cp = new ConfigurationParser(warnings);
		Configuration config = null;
		try {
			config = cp.parseConfiguration(configFile);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (XMLParserException e) {
			e.printStackTrace();
		}
		DefaultShellCallback callback = new DefaultShellCallback(overwrite);
		MyBatisGenerator myBatisGenerator = null;
		try {
			myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
		} catch (InvalidConfigurationException e) {
			e.printStackTrace();
		}
		try {
			myBatisGenerator.generate(null);
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	@After
	public void destory() {
	}

}

这里的mybatisConfigPath依赖服务器配置的配置文件路径,例如:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration> 
	<!-- 为了防止生成的代码中有很多注释,比较难看,加入下面的配置控制 -->
	<context id="yihaomen_mysql_tables" targetRuntime="MyBatis3"> 
		<commentGenerator>
			<property name="suppressAllComments" value="true" />
			<property name="suppressDate" value="true" />
		</commentGenerator> 
		<!-- 数据库连接 -->
		<jdbcConnection driverClass="com.microsoft.sqlserver.jdbc.SQLServerDriver"
			connectionURL="jdbc:sqlserver://ip:port;DatabaseName=test"
			userId="user" password="pwd">
		</jdbcConnection>
		<javaTypeResolver>
			<property name="forceBigDecimals" value="false" />
		</javaTypeResolver> 
		
		<!-- 数据表对应的model 层 -->
		<javaModelGenerator targetPackage="com.xxx.xxx.bo"
			targetProject="src/main/java">
			<property name="enableSubPackages" value="true" />
			<property name="trimStrings" value="true" />
		</javaModelGenerator> 
		
		<!-- sql mapper 映射配置文件 -->
		<sqlMapGenerator targetPackage="com.xxx.xxx.dao"
			targetProject="src/main/resource">
			<property name="enableSubPackages" value="true" />
			<property name="trimStrings" value="true" />
		</sqlMapGenerator> 
		
		<!-- 在ibatis2 中是dao层,但在mybatis3中,其实就是mapper接口 -->
		<javaClientGenerator type="XMLMAPPER"
			targetPackage="com.xxx.xxx.dao" 
			targetProject="src/main/java">
			<property name="enableSubPackages" value="true" />
		</javaClientGenerator> 
		
		<!-- 数据库表配置 -->
		<table tableName="数据库表明" domainObjectName="生成的BO.class对象" enableInsert="true"
			enableCountByExample="false" enableUpdateByExample="false"
			enableDeleteByExample="false" enableSelectByExample="false"
			selectByExampleQueryId="false">
			  <generatedKey column="id" identity="true" sqlStatement="SELECT @@IDENTITY as column_name"/>
		</table>
	</context>
</generatorConfiguration>

二、SpringMVC

        SpringMVC的开发框架大家都应该很熟悉,通过@Controller、@Service、@Repository可以分别将表示层、服务层、数据库层分别加载到Spring容器,从而省略了bean在配置文件中的注册。

        遵循几个原则:

        1、Controller层只进行页面逻辑处理和数据接口调用,因此一个Controller的内容应该不会很长,业务实现不能放在Controller层完成。

        2、Service层进行业务逻辑封装,对Controller层暴露接口,调用DAO层接收元数据。

        3、DAO层与数据库交互,将结果透传到Service层。

                    

三、基于jenkins的持续集成环境搭建

        下载jenkins.war文件,直接拖放到tomcat的webapps目录,启动服务后即可完成持续集成的部署。注意,要完成持续集成环境的搭建,还必须在服务器上安装依赖的工具包,如:maven、svn等。

       jenkins的主要思想是:从svn服务器下载源码包,编译成war包,然后部署到tomcat容器中,同时可以远程执行服务器上的shell命令,达到重启服务的目的。

       jenkins运行主要用到了插件,有几个插件必不可少:subversion.hpi、svnpublisher.hpi,这些插件可能又依赖其他的插件。插件可以从server服务器上下载到本地之后安装。

      jenkins安装完插件之后,需要进行全局配置,主要配置两部分:

      1、用户权限配置:默认是所有的匿名用户可以做任何事情,也可以让用户进行强制注册。

      2、Server配置:目的是项目编译完成之后,通过SSH插件将编译好的war文件sftp传输到指定的服务器目录。(前提是有sftp权限)


四、nexus私服搭建

        jenkins在编译项目时,如果不搭建私服,则服务器每次都会从远程中央仓库拉取jar文件进行编译,这样会带来效率问题,因此需要搭建私服。操作步骤大致为:

        1、下载nexus的jar包,例如: nexus-oss-webapp-1.9.2.3-bundle.tar.gz,解压后可以用tomcat容器起起来,也可以用命令起:进入~/nexus-oss-webapp-1.9.2.3/bin/jsw/linux-x86-64/目录下执行“./nexus start

         2、nexus默认端口是8081,用户名admin、密码admin123,从左侧菜单点击可以看到不同的仓库,一般我们用到了三个主要仓库:Maven Central、3rd party、Google Code,也可以自定义仓库。

         3、配置好之后设置maven的settings.xml全局仓库地址,例如:

             

 <profile>
         <id>nexus</id>
         <repositories>
              <repository>
                <id>nexus</id> 
          <name>Nexus</name>
                <url>http://localhost:8081/nexus/content/groups/public</url>
                <releases>
                 <enabled>true</enabled>
                 <checksumPolicy>warn</checksumPolicy>
                </releases>
                <snapshots>
                 <enabled>true</enabled>
                 <checksumPolicy>warn</checksumPolicy>
                </snapshots>
              </repository>
         </repositories>
         <pluginRepositories>
              <pluginRepository>
                <id>nexus</id> 
          <name>Nexus</name>
                <url>http://localhost:8081/nexus/content/groups/public</url>
                <releases>
                 <enabled>true</enabled>
                 <checksumPolicy>warn</checksumPolicy>
                </releases>
                <snapshots>
                 <enabled>true</enabled>
                 <checksumPolicy>warn</checksumPolicy>
                </snapshots>
              </pluginRepository>
         </pluginRepositories>
    </profile>

   上述只是部分内容,全局设置LocalRepository、mirrors等可以上网查找。

           如果jenkins从私服上拉取不到jar文件,则仍然会从中央仓库拉去文件。


五、shell脚本编写

         前面讲到通过开发、编译、打包、上传之后,就要重启服务了,这里写了个例子用来执行wxadmin的用例(主要思路是先查找进程,然后杀进程,最后重启服务),如下:

#!/bin/sh
sto(){
echo "stop.........."
kill -9 `exec ps ax|grep java|grep -v grep|awk '{print $1}'`
rm -rf /usr/local/wxadmin/webapps/wxadmin
}
sta(){
echo "start........."
/usr/local/wxadmin/bin/startup.sh
}

case $1 in
        start)  sta;;
        stop)   sto;;
        restart)        sto;echo "restart....";sleep 3;sta;;
        *)      sto;sleep 2;sta;;
esac


如此,则开源项目开发编译打包发布环境构建完成了,注意本文主要是阐述思路,具体细节还得自己慢慢摸索。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值