Eclipse使用Spring Boot的Restful微服务

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>


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]就可以运行我们做的微服务了。


  

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值