Java前后端分离之SpringBoot项目搭建
本文讲解SpringBoot和Vue项目搭建的最小化原型,非常方便后续同类知识点的学习,同时也是非常棒的脚手架,可快速搭建各种实验的基础框架,本文实践与2022年7月10号,练习前建议仔细核对相关软件版本,避免引起不必要的麻烦。
后端SpringBoot项目方面,全程采用纯手工代码的方式,而实际企业项目中可能采用mybatis-plus等插件,极大减少代码量和维护工作量,我们将于后续补充这块的讲解。测试方面引入postman做验证,科学严谨的质量检测是一切项目的代码质量保证,研发工作需要有个闭环,最后我们介绍如何将SpringBoot项目如何交付给测试/生产环境做部署。
因篇幅所限,Vue项目搭建、与SpringBoot项目联调联试的内容我们将在下一篇幅中讲解。
一、SpringBoot项目搭建
项目准备工作:
- 实验测试时间位2022年7月10日
- 开发机采用 Win10 64位操作系统
- 开发IDE采用ItelliJ IDEA 2022.1.3 官网企业版
- JDK采用1.8.0_121
- 构建工具采用IDEA自带捆绑的3.8.1,并设置了
阿里云镜像加速
- SpringBoot采用
2.7.1
版本,未附加其他插件,保障原型最小化,避免不必要的干扰
Tip: 以上工具软件均可在网上搜索得到,安装文档也容易取得,这里不过多赘述
项目代码一览:
- pom.xml 项目
构建所需的脚本
文件,常用于开发和maven构建时提供所需插件的信息及构建的实际动作。 - DemoApplication.java 项目
入口文件
,由IDE的Spring Initializr生成器自动生成,未做修改。 - bean/Book.java mvc架构中常见的
实体bean
,通常与物理表结构一对一,主要包括属性、getset、构造函数。 - service/BookService.java mvc架构中的
服务层
接口,常用于Controller类的注入和调用。 - service/impl/BookServiceImpl.java
服务层接口的真实代码
实现,后端数据抽取、加工、填充的主要部分。 - controller/BookController.java mvc架构中
视图层
的相应代码,与web的交互都在这里做处理 - WebMvcConfig.java 用于处理vue跨域访问的设置,非必须,同类工作也可在vue中实现
1/7、pom.xml IDE生成器自动生成,未做修改
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.iyyxx</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>demo</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2/7、DemoApplication.java IDE生成器自动生成,未做修改
package com.iyyxx.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
3/7、Book.java
package com.iyyxx.demo.bean;
import java.io.Serializable;
public class Book implements Serializable {
private static final long serialVersionUID = 1L;
public Book(int id, String bookName, String author, String publish, Integer pages, Float price) {
this.id = id;
this.bookName = bookName;
this.author = author;
this.publish = publish;
this.pages = pages;
this.price = price;
}
private int id;
private String bookName;
private String author;
private String publish;
private Integer pages;
private Float price;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getPublish() {
return publish;
}
public void setPublish(String publish) {
this.publish = publish;
}
public Integer getPages() {
return pages;
}
public void setPages(Integer pages) {
this.pages = pages;
}
public Float getPrice() {
return price;
}
public void setPrice(Float price) {
this.price = price;
}
}
4/7、BookService.java 定义了集合查询接口,用于vue项目中的数据查询
package com.iyyxx.demo.service;
import com.iyyxx.demo.bean.Book;
import java.util.List;
public interface BookService {
List<Book> findAll();
}
5/7、BookServiceImpl.java 服务接口的代码实现,为保障原型最小化,这里采用伪代码,后续可替换为mybatis等实现
package com.iyyxx.demo.service.impl;
import com.iyyxx.demo.bean.Book;
import com.iyyxx.demo.service.BookService;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
public class BookServiceImpl implements BookService {
public List<Book> findAll() {
List<Book> list = new ArrayList<Book>();
list.add(new Book(1, "书剑恩仇录1", "金庸", "电子工业出版社", 100, 35.6f));
list.add(new Book(2, "书剑恩仇录2", "金庸", "电子工业出版社", 100, 35.6f));
list.add(new Book(3, "书剑恩仇录3", "金庸", "电子工业出版社", 100, 35.6f));
list.add(new Book(4, "书剑恩仇录4", "金庸", "电子工业出版社", 100, 35.6f));
list.add(new Book(5, "书剑恩仇录5", "金庸", "电子工业出版社", 100, 35.6f));
return list;
}
}
**6/7、BookController.java ** 视图层做了两种不同的实现,方便前端调取文本和列表做展示
package com.iyyxx.demo.controller;
import com.iyyxx.demo.bean.Book;
import com.iyyxx.demo.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class BookController {
@Autowired
private BookService bookService;
@GetMapping("/list")
public List<Book> findAll(){
return bookService.findAll();
}
@GetMapping("/test")
public String test(){
return "hello springboot";
}
}
7/7、WebMvcConfig.java 跨域配置,非必须,也可在vue中实现
package com.iyyxx.demo;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
//跨域配置
registry.addMapping("/**")
.allowedOriginPatterns("*")
.allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS")
.allowCredentials(true)
.maxAge(3600)
.allowedHeaders("*");
}
}
二、SpringBoot项目测试
本项目测试成功的原则标准:
- 编译器自检无严重bug
- web服务可正常启动
- 查询两个数据接口均为正常返回
运行检查:执行alt+shift+x
或鼠标点击IDE右上角绿色三角箭头,启动DemoApplication项目,一切正常!
服务检查:浏览器访问/test和/list接口也正常返回
补充: json数据的返回、检查不易观看,可在edge中安装插件,或使用postman等工具,提供效率,效果如下
三、SpringBoot项目部署
通常j2ee的项目交付测试或生产时一般是打包成war部署到tomcat、jboss等中间件,而springboot设计理念本着精简、微服务,可将代码通过pom设置的插件打包成jar,通过对main-class的设置和自我实现,可将jar用java命令直接运行,这样非常方便未来进行容器集成和部署!
当然,如果要打包成war也是一点问题都没有的,网上可以找到很多例子。
打包部署
# 点击ide中的mvn面板或执行以下脚本,生产jar文件
mvn package
# 运行
java -jar demo-xxx.jar
结语
SpringBoot 项目非常轻松的完成了,不要忘了技术原理的学习,未来很多技术会高度集成和简化,技术实现原理往往几十年都不会有大改动。所以掌握好原理就能以不变应万变,学习就会有加速!
评论系统未开启,无法评论!