使用SpringBoot快速搭建服务器
2016-01-10 16:42
597 查看
之前的项目使用的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.userT
9d38
ype;
}
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的实现类
除了log,项目基本ok了。
接下来是新项目也需要一个排行榜的功能,需要搭建一个服务器,来接受排行榜,保存玩家信息的需求。于是从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.userT
9d38
ype;
}
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了。
相关文章推荐
- JavaMail学习四 JavaMailAPI
- Eclipse常用设置
- [java] Unsupported major.minor version 51.0 错误解决方案
- Java jdk 环境变量设置
- JVM学习——编译OpenJDK
- Java不可变对象
- Java异常
- 【spring配置】——spring配置数据源
- 从头认识java-17.2 线程中断(interrupt)
- java ssh整合出的错java.lang.NoSuchMethodError: antlr.collections.AST.getLine()
- Java内存泄漏
- java ssh整合出的错java.lang.NoSuchMethodError: antlr.collections.AST.getLine()
- Java多线程:概念
- CXF和spring整合遇到的问题:No bean named 'cxf' is defined
- Java的安装和下载
- Jetty9+JDK8+Spring4时遇到408问题
- Spring 学习笔记 8. 尚硅谷_佟刚_Spring_使用外部属性文件
- eclipse插入mysql是数据乱码问题(转)
- spring源码编译
- Maven的pom.xml解析