什么是 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 | 单元测试代码目录 |
.gitignore | git版本管理排除文件 |
pom.xml | maven项目配置文件 |
application.properties 常见配置
参考文档 https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html
//端口配置,默认8080server.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.jareg:java -jar boot-01-helloworld-1.0-SNAPSHOT.jar// 后台运行程序, 此语句比第一个命令多一个&符号,但是Ctrl+c或者关闭窗口后 后台程序仍然继续执行。java -jar xxx.jar &// 指定输出日志 mylog.logjava -jar example.jar >> mylog.log &// 查看日志tail -f mylog.log// 停止java 程序// 找到pidps 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;@RestControllerpublic 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 sellerwhere 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 等 日志相关变量