什么是 spring boot, Spring 框架

why spring boot? 为什么使用spring boot?

Spring Boot为开发提供一个具有最小功能的Spring应用程序,并提供了一个新的范例。使用Spring Boot将能够以更灵活的方式开发Spring应用程序,并且能够通过最小(或可能没有)配置Spring来专注于解决应用程序的功能需求。它使用全新的开发模型,通过避免一些繁琐的开发步骤和样板代码和配置,使Java开发非常容易。

Spring Boot的主要特点

创建独立的Spring应用程序 直接嵌入Tomcat,Jetty或Undertow(无需部署WAR文件) 提供“初始”的POM文件内容,以简化Maven配置 尽可能时自动配置Spring 提供生产就绪的功能,如指标,健康检查和外部化配置 绝对无代码生成,也不需要XML配置

spring boot项目结构目录简介

目录位置说明
src/main/java项目java文件存放位置,初始化包含主程序入口
src/main/resources存放静态资源,图片、CSS、JavaScript、web页面模板文件等
src/main/resources/static主要用来存放css、图片、js等开发用静态文件
src/main/resources/public用来存放可以直接用于访问的html文件
src/main/resources/templates用来存放web开发模板文件
src/main/resources/application.properties项目配置文件,如端口等
src/test单元测试代码目录
.gitignoregit版本管理排除文件
pom.xmlmaven项目配置文件

application.properties 常见配置

参考文档 https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html

//端口配置,默认8080
server.port=8082

what is Maven

java 的包管理工具,相当于node 的npm

配置maven 阿里云镜像

用户配置路径:
${user.home}/.m2/settings.xml
//加入镜像内容
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>

打jar包,与启动jar 包

可以使用 maven 打包
// If you use Maven,you can build the JAR file with
./mvnw clean package
//启动
java -jar file.jar
eg:
java -jar boot-01-helloworld-1.0-SNAPSHOT.jar
// 后台运行程序, 此语句比第一个命令多一个&符号,但是Ctrl+c或者关闭窗口后 后台程序仍然继续执行。
java -jar xxx.jar &
// 指定输出日志 mylog.log
java -jar example.jar >> mylog.log &
// 查看日志
tail -f mylog.log
// 停止java 程序
// 找到pid
ps aux | grep java
// 然后
kill PID

what is Gradle

在哪里配置环境变量,如定义的一个可变外部url 地址

application.properties 也支持自定义属性

// application.properties 中定义
elastic.domain=https://elasticxxx.com
// 在controller 文件中使用,使用Value注解读取配置属性
import org.springframework.beans.factory.annotation.Value;
@RestController
public class GreetingController {
@Value("${elastic.domain}")
private String elasticDomain;
@GetMapping("/info")
public String info(){
System.out.println(elasticDomain);
return elasticDomain;
}
}

不同环境,不同文件配置

开发环境
application-dev.properties
生产环境
application-prod.properties
可以在主配置文件 application.properties 中指定生效的配置文件
// 如这里指 dev 开发环境文件生效
spring.profiles.active=dev
在生产环境,.properties 文件可以在build项目后放到 jar 包同级目录下,springboot 会自动加载

idea 里面 jdk 配置

Go to File | Project Structure | Project Settings | Project | sdk.

springboot 日志

Spring 框架选择使用了 JCL 作为默认日志输出。而 Spring Boot 默认选择了 SLF4J 结合 LogBack

mybatis

mybatis的全局配置文件

//通常位置
src/main/resources/mybatis-generator.xml
//包含数据库连接池信息、事务管理器信息等等。

sql映射文件

//通常位置
src/main/resources/mapping/XXXMapper.xml
//保存了每一个sql语句的映射信息,将sql语句抽取出来。

mybatis mapper

<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from seller
where id = #{id,jdbcType=INTEGER}
</select>
id: 对应dao接口类的方法名
parameterType: 对应dao接口类的参数类型,无参数可省略此属性
resultType: 对应dao接口类的返回结果类型,无返回结果可省略此属性

解决IDEA无Spring Initializr的问题

企业版本的idea在侧栏中会有spring initializr选项,然而社区版的idea却没有这个选项,需要我们自己去安装插件spring assistant,安装完成后重启

请求参数相关的注解

@RequestParam @PathVariable

路由
/2/get?id=100&name=jim
页面结果
//Hello 2,100,jim!
后端代码
@GetMapping("/{studentId}/get")
public String hello(@PathVariable("studentId") String studentId,
@RequestParam String id,
@RequestParam String name) {
return String.format("Hello %s!", studentId + "," + id + "," + name);
}
//如果参数变量名保持一致,注解里面的参数可以省略,比如这里的 id 和 name

@RequestBody @RequestHeader @CookieValue

POST
路由
/create
后端代码
@PostMapping("/create")
public String createStudent(@RequestBody Map<String, Object> map,
@RequestHeader("Content-Type") String cType,
@CookieValue("clientId") String clientId,
HttpServletRequest request) {
System.out.println(map);
String output = "Content-Type = " + cType +
"clientId = " + clientId +
"token = " + request.getHeader("token");
return output;
}
header 里面的 token 等也可以用 HttpServletRequest 的 request.getHeader("token") 获得

常见插件

lombok

Lombok 是一个 java 类库,它利用注解方式自动生成 java bean 中 getter、setter、equals 等方法,还能自动生成 logger、toString、hashCode、builder 等 日志相关变量