一、spring boot 入门
1、环境搭建
1.1 、jdk1.8
1.2 maven3.39
1.3 idea 2017 x64
1.4 springboot
2、 创建工程与测试
2.1 创建maven工程
项目目录结构
[外链图片转存失败(img-ZPnrUMBb-1566437667331)(E:\markdowm\image\1535696891649.png)]
####2.2 导入springboot依赖
springboot 父项目工程依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.12.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
引入springboot web
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
2.3 创建springboot 启动程序
在项目的包的根目录下创建springboot的启动程序,@SpringBootApplication 标注 这个是个springboot 程序。
/**
* @SpringBootApplication 标注 这个是个springboot 程序
*
*/
@SpringBootApplication
public class Springbootmain {
public static void main(String[] args) {
SpringApplication.run(Springbootmain.class,args);
}
在这个配置类中,@SpringBootApplication: springboot 配置类
标注在某个类上,表是这个是一个springboot 的配置类;
@configuration: 配置类上标注这个注解;
配置类—配置文件;配置类也是容器的一个组件;@Component
@EnableAutoConfiguration: 开启自动配置功能
以前我们需要配置的东西,spring boot 帮我们自动配置
@AutoConfigurationPackage 自动配置包
@AutoConfigurationPackage将主配置类,(@SpringBootApplication 标注的类)的所在包及下面所有的种子包里面的组件扫描到spring容器;
**EnableAutoConfigurationImportSelector**:导入哪些组件的选择器;
将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;容器中添加很多自动配置类(xxxAutoConfiguration);就是这个容器中导入场景中所需要使用组件。
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
有了自动配置类,免去了我们手动的配置注入功能组件等功能;
springboot在动动的时候,从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效了,帮我们进行了自动配置以前我们需要自己配置的东西,自动配置类做了。
J2EE的整体整合解决方案和自动配置都在:spring-boot-autoconfigure-1.5.12.RELEASE.jar;
2.5 测试程序编写
创建controller 包,项目
创建helloController.java文件
package com.liu.spring.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
/**
* @RestController
* 这个注解代表 rest 和controller
*
*/
@RestController
public class HelloController {
/**
* @GetMapping 注解路径 url 访问只能使用get的方式请求
*
* @return
*/
@GetMapping("/hello")
public Map<String,String> hello(){
Map<String,String> result = new HashMap<String, String>();
result.put("msg","hello world!!");
return result;
}
}
2.6 测试程序
运行springboot main程序 进行项目启动
[外链图片转存失败(img-uLLchHbU-1566437667332)(E:\markdowm\image\1535696734245.png)]
2.7 使用postman测试
这里测试的时候 注意,使用get 请求进行测试,要不然会报错,拒绝请求,这样就得到了我们想要的结果
[外链图片转存失败(img-zcUvIvir-1566437667332)(E:\markdowm\image\1535697295788.png)]
2.8 springboot 打包部署
2.8.1 springboot 打包
引入maven打包插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
2.8.2 maven 工具打包
使用maven lifecycle 下面的package的打包工具
[外链图片转存失败(img-WSvVzKNd-1566437667333)(E:\markdowm\image\1535697500758.png)]
2.8.3 启动项目
通过java -jar springboot-1.0-SNAPSHOT.jar 的方式进行项目的部署,注意看tomcat启动的端口为8080
e:\work>java -jar springboot-1.0-SNAPSHOT.jar
此处省略N 多的启动日志
2018-08-31 14:40:48.726 INFO 38760 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s):
8080 (http)
2018-08-31 14:40:48.734 INFO 38760 --- [ main] com.liu.spring.Springbootmain : Started Springbootmain in
6.357 seconds (JVM running for 7.618)
3、springboot-start
springboot 通过start 来将各个场景的jar包进行项目导入工作,我们只要关注业务场景即可,无需过多的去关注jar包的导入,只需要选取场景即可。
二、spring boot配置
1 、快速创建springboot工程
IDE都支持使用springInitailer 工具来快速创建springboot工程
选择我们需要的模块,想到会联网创建springboot的项目工程
1.1、目录结构
默认生成springboot项目;
[外链图片转存失败(img-it1NQJhJ-1566437667333)(E:\markdowm\image\1535702087253.png)]
- 主程序已经生成好了,我们需要实现自己的业务逻辑
- resources文件夹中的目录结构
- static 保存所有的静态资源 ;js css images ;
- templates: 保存所有的模板页面;(springboot 默认jar包使用嵌入式的tomcat,默认不支持jsp页面);可以使用模板引擎,freemarker 、thymeleaf;
- application.properties :springboot 应用的配置文件;可以修改一些默认配置的参数;
2 、配置文件
2.1 整体配置
springboot 使用一个全局的配置文件,配置文件名称是固定的;
application.properties
appication.yml
配置文件的作用,修改springboot的自动配置的默认值;springboot在底层都个我们自动配置好。
以前的配置文件一般为xml格式
yaml :以数据为中心,比json、xml更加简洁
2.2 YAML语法
2.2.1 基本语法
K: 空格v: 表示一对键值对 (空格必须要有)
以空格的缩进方式来控制层级关系;只要是左对齐的一列数据都是同一个层级的
server:
context-path: /springboot
port: 8090
属性和值也是大小敏感;
2.2.2 值的写法
字面量:普通的值(数值,字符串,布尔)
字符串默认不用加上单引号或者单引号
“” :双引号 ;不会转义字符串联的特殊字符;特殊字符会作为本身的意思
‘’:单引号 ;会转义特殊的字符,特殊字符串会当做字符串输出
对象、map(属性和值)
k:v 在下一行来写对象的属性和值;注意缩进
表示一个对象的书写格式
user:
name: zhangsan
age: 10
sort: 100
money: 2000
行内写法:
user: { name: "zhangsan",age:10,sort: 100,money: 2000}
数组(list、set)
用-值表示数组中的一个元素
pets:
- cat
- dog
- pig
行内写法:
pets: [cat,dog,pig]
2.3 配置文件值注入
配置文件:
user:
lastName: zhangsan
age: 10
boss: false
brithday: 2018/10/01
maps: {k1: v1,k2: 12}
list:
- lisi
- zhangsan
- wangwu
dog:
name: 小王
age: 2
实体文件:
package com.liu.bootquick.bean;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* @ConfigurationProperties 配置文件属性和该类的属性相关,进行绑定
* @Data lombok 生成getset 等方法
* 只有这个组件是容器中的组件,容器才能提供服务
*/
@Data
@Component
@ConfigurationProperties(prefix = "user")
public class User {
private String lastName;
private Integer age;
private Boolean boss;
private Date brithday;
private Map<String,Object> maps;
private List<Object> list;
private Dog dog;
}
package com.liu.bootquick.bean;
import lombok.Data;
@Data
public class Dog {
private String name;
private Integer age;
}
我们还需要配置文件处理器,配置文件绑定的时候有提示:
<!--导入配置文件处理器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>