1.新建一个maven的web项目,项目结构和pom文件如下:
4.0.0
com.ly.mock
MockServer
0.0.1-SNAPSHOT
war
UTF-8
1.0.0-SNAPSHOT
4.2.3.RELEASE
junit
junit
3.8.1
test
commons-logging
commons-logging
1.1.1
com.alibaba
dubbo
2.5.3
spring
org.springframework
commons-logging
commons-logging
log4j
log4j
log4j
log4j
1.2.15
com.sun.jdmk
jmxtools
com.sun.jmx
jmxri
jms
javax.jms
mail
javax.mail
com.alibaba
druid
1.0.15
mysql
mysql-connector-java
5.1.38
org.springframework
spring-core
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-context
${spring.version}
org.springframework
spring-jdbc
${spring.version}
org.springframework
spring-beans
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-aop
${spring.version}
org.mybatis
mybatis-spring
1.3.0
org.mybatis
mybatis
3.4.1
org.apache.zookeeper
zookeeper
3.4.5
pom
com.101tec
zkclient
0.4
org.aspectj
aspectjrt
1.7.2
org.aspectj
aspectjweaver
1.6.11
com.alibaba
fastjson
1.1.37
mock_server
org.apache.maven.plugins
maven-war-plugin
2.3
false
pom文件引入了SpringMvc+Spring+Mybatis+Dubbo+zookeeeper 这些框架的必要jar,值得注意的是之前一直没忽略dubbo中的spring的一些jar,导致SpringAop一直报错only available on JDK 1.5 and higher,原因是dubbo中的内置spring为2.5,而我本身用的jdk为1.8,所以屏蔽掉dubbo中的spring一些jar就可以了。
2.web.xml配置,因为是最简单springmvc,所以web.xml只是用来加载下上下文,web.xml配置文件路径:src\main\webapp\WEB-INF:
TestMock
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
classpath*:applicationContext.xml,classpath*:dubbo-provider.xml
3.mybatis配置文件和代码可以用MyBatis Generator自动生成即可,mybatis的相关代码和配置如下:
3.1 数据库为mysql,表名books,表结构如下:
3.2 mapping文件BookMapper.xml路径为resources下的com\ly\mapping,如下:
insert into books(title,price,publistDate)
values(#{title},#{price},#{publistDate})
delete from books where id=#{id}
update books set title=#{title},price=#{price},publistDate=#{publistDate}
where id=#{id}
3.3 DAO代码 BookDAO.java如下:
package com.ly.dao;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.ly.model.Book;
public interface BookDAO {
/**
* 获取所有图书
* @return
*/
public List getAllBooks();
/**
* 根据id获取图书
* @param id
* @return
*/
public Book getBookById(@Param("id")int id);
/**
* 添加图书
* @param entity
* @return
*/
public int add(Book entity);
/**
* 根据id删除图书
* @param id
* @return
*/
public int delete(int id);
/**
* 更新图书
* @param entity
* @return
*/
public int update(Book entity);
}
3.4 model代码 Book.java如下:
package com.ly.model;
import java.util.Date;
public class Book {
private int id;
private String title;
private double price;
private Date publistDate;
public Book(){}
public Book(int id, String title, double price, Date publistDate) {
this.id = id;
this.title = title;
this.price = price;
this.publistDate = publistDate;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public Date getPublistDate() {
return publistDate;
}
public void setPublistDate(Date publistDate) {
this.publistDate = publistDate;
}
}
3.5 BookServer.java代码如下:
package com.ly.server;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ly.dao.BookDAO;
import com.ly.model.Book;
@Service
public class BookServer {
@Autowired
private BookDAO bookDAO;
public List getAllBooks() {
return bookDAO.getAllBooks();
}
public Book getBookById(int id) {
return bookDAO.getBookById(id);
}
}
4. spring配置文件applicationContext.xml 位于 resources下,如下:
其中stock.properties中的数据源配置为你自己的mysql数据库,我的如下:
mock.jdbc.url = jdbc:mysql://127.0.0.1:5508/mock?useUnicode=true&characterEncoding=UTF-8
mock.jdbc.driver = com.mysql.jdbc.Driver
mock.jdbc.username = mock
mock.jdbc.password = mock
mock.jdbc.initialSize = 1
mock.jdbc.minIdle = 2
mock.jdbc.maxWait = 5000
mock.jdbc.maxActive = 5
具体的applicationContext.xml含义基本有注释
5. dubbo的配置和代码
5.1 dubbo配置文件 dubbo-provider.xml 也位于 resources下,zookeeper自己本地安装一个,如下:
5.2 dubbo接口代码 SayHelloServer.java如下:
package com.ly.server;
public interface SayHelloServer {
public String sayHello(String hello);
}
5.2 接口实现代码SayHelloServerImpl.java 如下:
package com.ly.server.impl;
import com.ly.server.SayHelloServer;
public class SayHelloServerImpl implements SayHelloServer {
public String sayHello(String hello) {
System.out.println("Client: "+ hello);
return hello + " Server: ";
}
}
现在基本上SpringMvc+Spring+Mybatis+Mysql+Dubbo就已经整合完成了,本地下载一个tomcat,把项目打包发布到tomcat下启动,就能在dubbo的monitor中发现该项目的SayHelloServer接口已经注册在zk上面了。
附上我的自动发布shell脚本,一个很简单的shell脚本:
#!/bin/sh
#判断进程存在
tomcatId=0
tomcatID=`ps -ef | grep org.apache.catalina.startup.Bootstrap | grep -v grep | awk '{print $2}'`
echo "MockServer tomcat is " $tomcatID
if [ -n "$tomcatID" ];then
echo 'current tomcat pid is:'$tomcatID
kill -15 $tomcatID && echo "MockServer kill -15"
kill -9 $tomcatID && echo "MockServer kill -9"
else
echo $sysName " not start"
fi
sleep 2
#编译
cd /Users/ly/Documents/workspace/MockServer
mvn clean install -Dmaven.test.skip=true -U
sleep 5
#部署本地
cd target
rm -rf /Users/ly/tomcat/apache-tomcat-9.0.4/webapps/ROOT/*
unzip -q mock_server.war -d /Users/ly/tomcat/apache-tomcat-9.0.4/webapps/ROOT/
nohup sh /Users/ly/tomcat/apache-tomcat-9.0.4/bin/startup.sh & sleep 3
echo "MockServer is starting......"