您的位置:首页 > 编程语言 > Java开发

使用SpringBoot快速搭建服务器

2016-01-10 16:42 811 查看
之前的项目使用的SpringBoot做的服务器端开发。发现很少的XML配置,全部通过注解完成,代码简单粗暴。但是门槛稍微高了一些,尤其是对一些对Spring不太了解或者不是很熟悉的pg来说。

接下来是新项目也需要一个排行榜的功能,需要搭建一个服务器,来接受排行榜,保存玩家信息的需求。于是从0开始利用Springboot搭建了一个服务器。因为国内SpringBoot方面的资料很少。

1、开始,用eclipse创建一个maven工程。Ctrl+N,输入maven,选择Maven Project

2、修改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.spring.boot</groupId>
<artifactId>springboot</artifactId>
<version>1.0-SNAPSHOT</version>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.3.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>


3、入口类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("xxx.api.server")
@EnableAutoConfiguration
public class APIServer {
public static void main(String[] args) {
SpringApplication.run(APIServer.class);
}
}


4、Controller

import java.util.Date;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.ModelAttribute;
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 cubecat.api.server.dto.ranking.GetRankingRequest;
import cubecat.api.server.dto.ranking.GetRankingResponse;
import cubecat.api.server.dto.ranking.RankingDTO;
import cubecat.api.server.dto.userinfo.SaveUserInfoRequest;
import cubecat.api.server.dto.userinfo.SaveUserInfoResponse;
import cubecat.api.server.entities.Ranking;
import cubecat.api.server.entities.Users;
import cubecat.api.server.service.RankingService;
import cubecat.api.server.service.UserService;

@RestController
@RequestMapping("/user")
public class UserController {

private Log log = LogFactory.getLog(this.getClass());

@Autowired
private UserService userService;
@Autowired
private RankingService rankingService;

@RequestMapping(value = "test", method = RequestMethod.GET)
@ResponseBody
public String view() {
int roughRanking = this.rankingService.getRoughRanking(254);
System.out.println(roughRanking);
return "SUCCESS!";
}

/**
* 保存结算结果的请求
* @param request
* @return
*/
@RequestMapping(value = "saveInfo", method = { RequestMethod.POST,
RequestMethod.GET }, headers = { "Content-type=application/json",
"Content-type=application/octet-stream",
"Content-type=application/x-www-form-urlencoded" })
public @ResponseBody SaveUserInfoResponse saveInfo(
@ModelAttribute SaveUserInfoRequest request) {
SaveUserInfoResponse response = new SaveUserInfoResponse();
// 从请求中获得openId
String openId = request.getOpenId();
// 如果openId为空或null,直接返回空
if (openId == null || "".equals(openId)) {
log.info("user not login yet! can NOT get user rank info!");
response.setUserRank(null);
response.setIsSuccess(1);
return response;
}
// 获得此次得分
int newScore = request.getMaxScore();
// 根据openId得到用户的记录信息
Users user = this.userService.getUserByOpenId(openId);
// 如果有用户信息
if (user != null) {
log.info("update exist user's info!");
// 如果超过记录的最大得分
if (user.getMaxScore() < newScore) {
user.setMaxScore(newScore);
}
// 设置新的个人信息
user.setGender(request.getGender());
user.setIcon40(request.getIcon40());
user.setIcon100(request.getIcon100());
user.setName(request.getName());
// 没有该用户的信息 插入用户信息
} else {
log.info("save new user's info!");
user = new Users(request.getOpenId(), request.getUserType(),
request.getName(), request.getGender(),
request.getMaxScore(), request.getIcon40(),
request.getIcon100(), new Date(), new Date());
}
// 保存(或插入)用户信息
this.userService.saveUserInfo(user);
// 得到用户的粗排名
int roughRanking = this.rankingService.getRoughRanking(newScore);
// 初始化用户排名信息
RankingDTO userRank = null;
// 小于100需要重新计算前100排名
if (roughRanking < 100) {
// 刷新前100的排行榜(调用存储过程)
this.rankingService.refreshExactRanking();
// 获得前100中玩家的名次(刷新后的)
Ranking rank = this.rankingService.getExactRanking(openId);
userRank = new RankingDTO(rank.getRanking(), rank.getScore(),
rank.getName(), rank.getIcon40(), "");
// 在100以后,直接返回粗排行榜中的排行信息
} else {
userRank = new RankingDTO(roughRanking, user.getMaxScore(),
user.getName(), user.getIcon40(), "");
}
// 设定返回结果
response.setUserRank(userRank);
response.setIsSuccess(1);
return response;
}

/**
* 获得排行榜信息请求
* @param request
* @return
*/
@RequestMapping(value = "getRanking", method = { RequestMethod.POST,
RequestMethod.GET }, headers = { "Content-type=application/json",
"Content-type=application/octet-stream",
"Content-type=application/x-www-form-urlencoded" })
public @ResponseBody GetRankingResponse getRanking(
@ModelAttribute GetRankingRequest request) {
GetRankingResponse response = new GetRankingResponse();
// 获得100名排行的信息
List<RankingDTO> ranks = this.rankingService.getExactRanking();
// 以下获得用户个人排名信息
// 得到用户的openId
String openId = request.getOpenId();
// openId为空,用户没有登录。没有个人排名信息
if (openId == null || "".equals(openId)) {
response.setUserRank(null);
// 有openId,查询用户的记录
} else {
Users user = this.userService.getUserByOpenId(openId);
// 用户不存在,返回空结果
if (user == null) {
response.setUserRank(null);
// 用户存在
} else {
// 得到粗排行信息
int roughRanking = this.rankingService
.getRoughRanking(user.getMaxScore());
// 初始化用户排名信息
RankingDTO userRank = null;
// 小于100
if (roughRanking < 100) {
// 获得前100中玩家的名次
Ranking rank = this.rankingService.getExactRanking(openId);
userRank = new RankingDTO(rank.getRanking(),
rank.getScore(), rank.getName(), rank.getIcon40(),
"");
// 大于100名给出大概排名
} else {
userRank = new RankingDTO(roughRanking, user.getMaxScore(),
user.getName(), user.getIcon40(), "");
}
response.setUserRank(userRank);
}
}
response.setRanks(ranks);
return response;
}
}


5、实体类
package cubecat.api.server.entities;
// Generated 2016-1-8 14:44:18 by Hibernate Tools 4.0.0

import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
* Users generated by hbm2java
*/
@Entity
@Table(name = "users", catalog = "cubecat")
public class Users implements java.io.Serializable {

private Integer id;
private String openId;
private int userType;
private String name;
private String gender;
private int maxScore;
private String icon40;
private String icon100;
private Date createdAt;
private Date updatedAt;

public Users() {
}

public Users(String openId, int userType, String name, String gender,
int maxScore, Date createdAt, Date updatedAt) {
this.openId = openId;
this.userType = userType;
this.name = name;
this.gender = gender;
this.maxScore = maxScore;
this.createdAt = createdAt;
this.updatedAt = updatedAt;
}

public Users(String openId, int userType, String name, String gender,
int maxScore, String icon40, String icon100, Date createdAt,
Date updatedAt) {
this.openId = openId;
this.userType = userType;
this.name = name;
this.gender = gender;
this.maxScore = maxScore;
this.icon40 = icon40;
this.icon100 = icon100;
this.createdAt = createdAt;
this.updatedAt = updatedAt;
}

@Id
@GeneratedValue(strategy = IDENTITY)

@Column(name = "id", unique = true, nullable = false)
public Integer getId() {
return this.id;
}

public void setId(Integer id) {
this.id = id;
}

@Column(name = "open_id", nullable = false)
public String getOpenId() {
return this.openId;
}

public void setOpenId(String openId) {
this.openId = openId;
}

@Column(name = "user_type", nullable = false)
public int getUserType() {
return this.userType;
}

public void setUserType(int userType) {
this.userType = userType;
}

@Column(name = "name", nullable = false)
public String getName() {
return this.name;
}

public void setName(String name) {
this.name = name;
}

@Column(name = "gender", nullable = false, length = 8)
public String getGender() {
return this.gender;
}

public void setGender(String gender) {
this.gender = gender;
}

@Column(name = "max_score", nullable = false)
public int getMaxScore() {
return this.maxScore;
}

public void setMaxScore(int maxScore) {
this.maxScore = maxScore;
}

@Column(name = "icon40")
public String getIcon40() {
return this.icon40;
}

public void setIcon40(String icon40) {
this.icon40 = icon40;
}

@Column(name = "icon100")
public String getIcon100() {
return this.icon100;
}

public void setIcon100(String icon100) {
this.icon100 = icon100;
}

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "created_at", nullable = false, length = 19)
public Date getCreatedAt() {
return this.createdAt;
}

public void setCreatedAt(Date createdAt) {
this.createdAt = createdAt;
}

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "updated_at", nullable = false, length = 19)
public Date getUpdatedAt() {
return this.updatedAt;
}

public void setUpdatedAt(Date updatedAt) {
this.updatedAt = updatedAt;
}

}


6、Dao
package cubecat.api.server.dao;

import org.springframework.data.repository.CrudRepository;
import org.springframework.transaction.annotation.Transactional;

import cubecat.api.server.entities.Users;

@Transactional
public interface UserDao extends CrudRepository<Users, Long> {
Users findByOpenId(String openId);

}


7、Service

package cubecat.api.server.service;

import cubecat.api.server.entities.Users;

public interface UserService {
void saveUserInfo(Users user);

Users getUserByOpenId(String openId);

void updateMaxScore(String openId, int maxScore);
}


8、Service的实现类

package cubecat.api.server.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import cubecat.api.server.dao.UserDao;
import cubecat.api.server.entities.Users;
import cubecat.api.server.service.UserService;

@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;

@Override
public void saveUserInfo(Users user) {
userDao.save(user);
}

@Override
public Users getUserByOpenId(String openId) {
Users user = userDao.findByOpenId(openId);
return user;
}

@Override
public void updateMaxScore(String openId, int maxScore) {
Users user = this.userDao.findByOpenId(openId);
user.setMaxScore(maxScore);
userDao.save(user);
}

}


除了log,项目基本ok了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: