0. 开发环境
Eclipse:Neon.3 Release(4.6.3)
1. Maven的设置
- Maven的设置文件settings.xml做如下修改:
<localRepository>C:\eclipse\workspace\repository3</localRepository> :本地仓库的路径,从远程仓库下载的jar包就放在这里。
<offline>false</offline>:不是离线下载。
<proxy>:使用上网的代理服务器的设置
<id>optional</id>
<active>true</active>
<protocol>http</protocol>
<host>192.168.0.1</host>
<port>8080</port>
</proxy>
<mirror>:使用香港的镜像。
<id>UK</id>
<mirrorOf>central</mirrorOf>
<name>UK Central</name>
<url>http://uk.maven.org/maven2</url>
</mirror>
-
单击 [Window]-[Preferences],设置[Maven]-[User Settings]为上述修改后settings.xml,并单击[Update Settings]按钮。
2. 修改pom.xml
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.peepi.microservice</groupId>
<artifactId>mono</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<main.basedir>${basedir}/../..</main.basedir>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.3.RELEASE</version>
</parent>
<dependencies>
<!-- Compile -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency> <!-- 使用的数据库是MySql -->
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency> <!-- 使用JDBC访问数据库 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency> <!-- 使用jpa处理数据 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin> <!-- jar打包用 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
</plugin>
</plugins>
<finalName>mono.localhost</finalName>
</build>
</project>
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.peepi.microservice</groupId>
<artifactId>mono</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<main.basedir>${basedir}/../..</main.basedir>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.3.RELEASE</version>
</parent>
<dependencies>
<!-- Compile -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency> <!-- 使用的数据库是MySql -->
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency> <!-- 使用JDBC访问数据库 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency> <!-- 使用jpa处理数据 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin> <!-- jar打包用 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
</plugin>
</plugins>
<finalName>mono.localhost</finalName>
</build>
</project>
3. 更新Maven的依赖库
单击Project的右键菜单[Maven]-[Update Project...],更新Maven依赖库。等ing......
4. 做一个Restful的微服务
Spring Boot针对Restful微服务的注解是[@RestController],请求的注解是[@RequestMapping],响应的注解是[@ResponseBody]。
以下是Controller的例子。
package mono.controller;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import mono.dbprocedure.DbProcedureJdbc;
import mono.json.UserToken;
import mono.utility.EncryptionUtility;
import mono.utility.RegularExpression;
@RestController //这是个Restful的Controller
public class DbController {
@Autowired
private JdbcTemplate jdbcTemplate;
//URL是[login],方法是POST,数据传输是JSON
@RequestMapping(value = "/login", method = RequestMethod.POST, consumes = "application/json")
@ResponseBody //有响应。
public UserToken login (@RequestBody Map<String,Object> params) {
UserToken userToken = new UserToken();
userToken.setErrPath("login");
String userId = "";
String passWord = "";
try {
userId = params.get("user").toString();
passWord = params.get("pass").toString();
} catch(Exception e) {
userToken.setAllofValues("", "", "001", "用户登录失败", "login");
return userToken;
}
if (userId.isEmpty() || passWord.isEmpty()) {
userToken.setAllofValues("", "", "002", "用户登录失败", "login");
return userToken;
}
String strToken = "";
try {//以下是用户密码验证的数据库处理,可以删除。
DbProcedureJdbc dbProcedureJdbc = new DbProcedureJdbc(jdbcTemplate);
String message = String.valueOf(System.currentTimeMillis());
String strEncry = EncryptionUtility.SHA512(message);
dbProcedureJdbc.setUserToken(userId, strEncry);
strToken = strEncry;
int passCount = dbProcedureJdbc.getUserPass(userId, passWord);
if (1 != passCount) {
userToken.setAllofValues("", strToken, "003", "用户登录失败", "login");
return userToken;
}
userToken.setAllofValues(userId, strToken, "", "", "login");
} catch(Exception e) {
userToken.setAllofValues(userId, strToken, "999", "内部发生异常: " + e.toString(), "login");
return userToken;
}
return userToken; //返回响应。Spring Boot会根据UserToken类转换为JSON格式。
}
}
以下是UserToken类。
package mono.json;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(schema="monodb", name="user_token")
public class UserToken implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
@Column(name="user_id")
private String user;
@Column(name="token_sha512")
private String token;
private String errCode;
private String errMsg;
private String errPath;
public void setUser(String user) {
this.user = user;
}
public String getUser() {
return this.user;
}
public void setToken(String token) {
this.token = token;
}
public String getToken() {
return this.token;
}
public void setErrMsg(String errMsg) {
this.errMsg = errMsg;
}
public String getErrMsg() {
return this.errMsg;
}
public void setErrCode(String errCode) {
this.errCode = errCode;
}
public String getErrCode() {
return this.errCode;
}
public void setErrPath(String errPath) {
this.errPath = errPath;
}
public String getErrPath() {
return this.errPath;
}
public void setAllofValues(String user, String token, String errCode, String errMsg, String errPath) {
this.user = user;
this.token = token;
this.errCode = errCode;
this.errMsg = errMsg;
this.errMsg = errMsg;
}
}
5. Eclipse下启动微服务
将[Maven Build]的[Goals]设置为[spring-boot:run]就可以启动。
6. Spring Boot的发布打包
- 将[Maven Build]的[Goals]设置为[package],就可以打包。
以下是打包的log:
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building mono 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ mono ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ mono ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ mono ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Work\T_GUI\eclipse\workspace\mono\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ mono ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ mono ---
[INFO]
[INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ mono ---
[INFO] Building jar: C:\Work\T_GUI\eclipse\workspace\mono\target\mono.localhost.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:1.5.3.RELEASE:repackage (default) @ mono ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.799 s
[INFO] Finished at: 2017-05-11T16:41:04+08:00
[INFO] Final Memory: 21M/181M
[INFO] ------------------------------------------------------------------------
- 在Project的工作文件夹下的[\target]文件夹下会生成xxxx.jar和xxxx.jar.original。使用这2个文件就可以发布了。
执行[java -jar xxxx.jar]就可以运行我们做的微服务了。