SpringBoot

初识SpringBoot

SpringBoot的优点

  1. 为所有Spring开发者更快的入门
  2. 开箱即用,提供各种默认配置来简化项目配置
  3. 内嵌式容器简化Web项目
  4. 没有冗余代码生成和XML配置的要求

spring boot 致力于简洁,让开发者写更少的配置,程序能够更快的运行和启动。它是下一代javaweb框架,并且它是spring cloud(微服务)的基础。

SpringBoot和SpringMVC区别

SpringBoot 是一个快速开发的框架,能够快速的整合第三方框架,简化XML配置,全部采用注解形式,内置Tomcat容器,帮助开发者能够实现快速开发,SpringBoot的Web组件 默认集成的是SpringMVC框架。
SpringMVC是控制层。

SpringBoot和SpringCloud区别

SpringBoot专注于快速方便的开发单个个体微服务。

SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,为各个服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、精选决策、分布式会话等集成服务。

SpringBoot可以离开SpringCloud独立开发项目,但是SpringCloud离不开SpringBoot,属于依赖关系。

SpringBoot专注于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架。

SpringBoot快速搭建

环境准备

JDK1.8
IntelliJ IDEA 
springboot 2.1.3 
apache-maven-3.6.0

搭建过程

1. 打开idea,创建一个新项目,选择maven,选择jdk,点击下一步
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2. 引入pom文件
在这里插入图片描述

	<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
    </parent>
    <dependencies> <!-- SpringBoot web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
spring-boot-starter-parent作用

它可以提供dependency management,也就是说依赖管理,引入以后在申明其它dependency的时候就不需要version了(没有在dependencies里面管理的依赖自然需要声明版本号)

spring-boot-starter-web作用

spring-boot-starter-web:默认使用嵌套式的Tomcat作为Web容器对外提供HTTP服务,默认端口8080对外监听和提供服务。
spring-boot-starter:spring-boot场景启动器;帮我们导入了web模块正常运行所依赖的组件;
Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面
引入这些starter相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器。

Spring Boot Reference Guide

https://docs.spring.io/spring-boot/docs/2.1.5.RELEASE/reference/html
single/

3. 创建启动类,启动项目
在这里插入图片描述

@SpringBootApplication
@RestController
public class HelloSpringboot {
    @RequestMapping("/hello")
    public String hello() {
        return "hello spring boot !!!";
    }
    public static void main(String[] args) {
        // 启动第一个springboot应用
        SpringApplication.run(HelloSpringboot.class, args);
        }
}
@SpringBootApplication

标注在某个类上,说明这个类是SpringBoot的主配置类,SpringBoot运行这个
类的main方法来启动SpringBoot应用;
@EnableAutoConfiguration:开启自动配置功能; @AutoConfigurationPackage:自动配置包
@Import(AutoConfigurationPackages.Registrar.class):给容器中导入组件;
将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器;

@RestController

意味着这个Controller的所有方法上面都加了@ResponseBody

4. 打开浏览器,输入地址测试结果。
在这里插入图片描述

静态资源访问配置

默认配置

在我们开发Web应用的时候,需要引用大量的js、css、图片等静态资源。
Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则:

  1. classpath:/static
  2. classpath:/public
  3. classpath:/resources
  4. classpath:/META-INF/resources
    在这里插入图片描述

举例:我们在src/main/resources目录下新建 public、resources、static 三个目录,并分别放入1.jpg 2.jpg 3.jpg 三张图片。然后通过浏览器分别访问:

  1. http://localhost:8080/1.jpg
  2. http://localhost:8080/2.jpg
  3. http://localhost:8080/3.jpg

地址均可以正常访问,Spring Boot 默认会从 public resources static 三个目录里面查找是否存在相应的资源。

在application.properties配置

# 静态文件请求匹配方式 spring.mvc.static-path-pattern=/erha/** 
# 修改默认的静态寻址资源目录 多个使用逗号分隔 spring.resources.static-locations = classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,classpath:/mytest/

配置中配置了静态模式为/erha/**,访问时候就只能通过/erha/xx 来访问。
访问地址:http://localhost:8080/erha/1.jpg

自定义静态资源地址

@Configuration 
public class MyWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter { 
	// http://localhost:8080/mystatic/abc.jpg 
	@Override 
	public void addResourceHandlers(ResourceHandlerRegistry registry) { 
		registry.addResourceHandler("/mystatic/**").addResourceLocations("classpath:/mysta tic/");
 	} 
 }

访问地址:http://localhost:8080/mystatic/abc.jpg
这个方法跟在配置文件中类似,区别是一个在properties文件中配置,一个是在java类中配置。

全局异常处理

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler({ArithmeticException.class})
    @ResponseBody
    public Map<String, Object> handleArithmeticException(ArithmeticException e) {
        Map<String, Object> map = new HashMap<String, Object>();
        e.printStackTrace();
        map.put("errorCode", "201");
        map.put("errorMsg", "算数异常"); return map;
    }
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public Map<String, Object> handlerException(Exception e) {
        e.printStackTrace();
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("errorCode", "101");
        map.put("errorMsg", "未知异常");
        return map;
    }
}

通过@ControllerAdvice注解可以将对于控制器的全局配置放在同一个位置。

  • @ControllerAdvice注解将作用在所有注解了@RequestMapping的控制器的方法上
  • @ExceptionHandler:用于全局处理控制器里的异常。

SpringBoot配置文件

YAML基本格式要求

  • YAML大小写敏感;
  • 使用缩进代表层级关系;
  • 缩进只能使用空格,不能使用TAB,不要求空格个数,只需要相同层级左对齐(一般2个或4个空格)

YAML语法

  • k:(空格)v:表示一对键值对(空格必须有);
  • 以空格的缩进来控制层级关系;
  • 只要是左对齐的一列数据,都是同一个层级的
server: 
    port: 8080 
    path: /erha

属性和值:大小写敏感

值的写法

  • 字面量:普通的值(数字,字符串,布尔)
  • k: v:字面直接来写; 字符串默认不用加上单引号或者双引号;
  • 对象、Map(属性和值)(键值对):
  • k: v:在下一行写对象的属性和值的关系;注意缩进
    	friends: 
    	    lastName: zhangsan 
    	    age: 20
    
  • 行内写法
    friends: {lastName: zhangsan,age: 18}
    
  • 数组(List Set)
  • 使用一个短横线加一个空格代表一个数组项:
    pets: 
        - cat 
        - dog 
        - pig
    
  • 行内写法
    pets: [cat,dog,pig]
    

配置文件注入

  • YAML文件内容

    user:
        lastName: hello
        age: 18
        boss: false
        birth: 2017/12/12
        maps: {qq: 1000 , mobile: 13811002233}
        lists:
          - lisi
          - zhaoliu
        dog:
          name: 小狗
          age: 12
    
    address: shanghai
    
  • properties

    person.last-name=hello${user.lastName}
    person.age=${random.int}
    person.birth=2017/12/15
    person.boss=false
    person.maps.aa=v1
    person.maps.bb=14
    person.lists=a,b,c
    person.dog.name=${person.hello:hello}_dog
    person.dog.age=15
    
  • 随机值的使用

    ${random.value} 
    随机生成一个32位的字符串,如:b21d56d2f10d74f84608dfff01b25552 
    ${random.int} 
    随机生成一个int范围的随机数,如:-386223791 
    ${random.long} 
    随机生成一个long范围的随机数,如:2404587442488649534 
    ${random.int(10)} 
    随机生一个[0,10]之间的随机数,如:8 
    ${random.int[1024,65536]} 
    随机生成一个[1024,65536]之间的随机数,如:63856 
    ${user.userName} 
    获取配置文件中已经配置好的属性值,不存在时直接返回整个“${user.userName}”
    ${user.width:hello} 
    获取配置文件中已经配置好的属性值,不存在时则用"hello"返回
    
  • application.properties和application.yml同时存在

    如果你在相同优先级位置同时有application.properties和application.yml,
    那么application.yml 里面的属性就会覆盖application.properties里的属性。
     yaml > properties
    
  • 配置文件加载位置

    springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件
     –file:./config/ 
     –file:./ 
     –classpath:/config/ 
     –classpath:/ 
     优先级由高到底,高优先级的配置会覆盖低优先级的配置;
    

测试使用

指定bean对象
// 指定配置文件
@PropertySource(value = {"classpath:application.yml"})
@Component
@ConfigurationProperties(prefix = "user")
public class User {
    private String lastName;
    private Integer age;
    private Boolean boss;
    private Date birth;
    private Map<String, Object> maps;
    private List<Object> lists;
    private Dog dog;
测试
@Controller
public class YmlController {

     @Autowired
     User user;
     @Value("${address}")
     String address;
     @Autowired
     Person person;
     @Value("${user.lastName}")
     String lastName;

     @Value("${password}")
     String password;
     @RequestMapping("/yml4")
     @ResponseBody
     public String yml4Test() {
         return "profile = " + password;
     }
     @RequestMapping("/yml3")
     @ResponseBody
     public Person yml3Test() {
         return person;
     }
     @RequestMapping("/yml2")
     @ResponseBody
     public String yml2Test() {
         return "address = " + address + " lastName = " + lastName;
     }
     @RequestMapping("/yml")
     @ResponseBody
     public User ymlTest() {
         return user;
     }
}

profile环境切换

多profile

我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml 默认使用
application.properties的配置;例如:

  • application-dev.properties:开发环境
  • application-test.properties:测试环境
  • application-prod.properties:生产环境
激活指定profile
  1. 在配置文件中指定 spring.profiles.active=dev
  2. 命令行: java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;
    可以直接在测试的时候,配置传入命令行参数
  3. 虚拟机参数; -Dspring.profiles.active=dev
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值