使用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
3、入口类
4、Controller
5、实体类
6、Dao
7、Service
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.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了。
相关文章推荐
- 使用SpringBoot快速搭建服务器
- 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源码编译