SpringBoot

SpringBoot2.0快速上手
首先访问此网站,选择:
SpringBoot_第1张图片SpringBoot_第2张图片
点击Generate the project,生成项目。
解压之后,将项目导入到Eclipse中,选择Existing Maven Projects。

注意:pom.xml文件中第一行可能会报错,解决这个问题只需要在pom.xml 文件中的 properties 中加入maven jar 插件的版本号,如下所示:

3.1.1

主要原因是2.1.8.RELEASE 升级到了3.1.2 造成的问题,有些IDE插件不兼容的问题造成的。

resources目录下的static文件夹用来放静态页面,例如CSS,JS等等,它是静态路径,可以直接访问。
resources目录下的templates文件夹用来放模板页面。
SpringBoot_第3张图片

运行DemoApplication.java,出现下图,则运行成功。
SpringBoot_第4张图片

现在可以直接通过浏览器访问。
SpringBoot_第5张图片

与平常的空页面不同,说明已经访问到了,只不过没有页面而已。
现在我们来写一个页面,与SpringMVC写法相同。
在DemoApplication.java中添加代码:

package com.xixi.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@SpringBootApplication
public class DemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}

	@ResponseBody
	@RequestMapping("/hello.html")
	public Object hello() {
		return "我的SpringBoot项目";
	}
	
}

运行结果:
SpringBoot_第6张图片

在static目录下创建一个img目录,放入图片:mimi.jpg。
SpringBoot_第7张图片
在浏览器中访问,如下图:(static是一个可以直接被访问的静态路径,所有静态资源都可以放进里面)

------------------------------------------------------------------------------------------------------------------------------

两种配置文件
application.properties

server.port=8080
my.age=18

application.yml

server:
	port: 8080
my:
	name: xixi

先加载yaml再加载properties,因此当它们同时存在时,最终生效的是properties文件中的配置。

------------------------------------------------------------------------------------------------------------------------------

设置ContextPath上下文路径
ContextPath上下文目录的设置:
在SpringBoot1中是server.context-path,而在SpringBoot2中改为server.servlet.context-path

springboot1 :server.context-path
springboot2 :server.servlet.context-path

在application.properties中添加代码:

server.port=8080

server.servlet.context-path=/demo

或在application.yml中添加代码:

server:
    port: 8080
    servlet: 
      context-path: /mydemo

运行结果:
SpringBoot_第8张图片

------------------------------------------------------------------------------------------------------------------------------

对比properties和yaml配置文件
对于较复杂的数据结构来说,yaml要优于properties结构。
先来看一个SpringBoot中的properties文件和对应YAML文件的对比:

#properties(示例来源于Springboot User guide):

environments.dev.url=http://dev.bar.com
environments.dev.name=Developer Setup
environments.prod.url=http://foo.bar.com
environments.prod.name=My Cool App
my.servers[0]=dev.bar.com
my.servers[1]=foo.bar.com
#YAML格式
environments:
    dev:
        url: http://dev.bar.com
        name: Developer Setup
    prod:
        url: http://foo.bar.com
        name: My Cool App
my:
    servers:
        - dev.bar.com
        - foo.bar.com

可以明显的看到,在处理层级关系的时候,properties需要使用大量的路径来描述层级(或者属性),而数组的写法更是复杂,相比较而言,YAML格式文件就清晰很多。
可以直观的看到,YAML使用冒号加缩进的方式代表层级(属性)关系,使用短横杠(-)代表数组元素。经过这个示例的演示,可以很明显的看到YAML相对于properties文件的优异之处。

------------------------------------------------------------------------------------------------------------------------------

YAML的常用语法
YAML中允许表示三种格式,分别是常量值,对象和数组。
例:

#表示url属性值;
url: http://www.xixi.com

#表示server.host属性的值;
server:
    host: http://www.xixi.com
    
#数组,表示server为[a,b,c]
server:
    - 192.168.1.101
    - 192.168.1.102
    - 192.168.1.103

#常量
pi: 3.14   #定义一个数值3.14
hasChild: true  #定义一个boolean值
name: '你好YAML'   #定义一个字符串

注释:和properties相同,使用#作为注释,YAML中只有行注释。

基本格式要求:
1.YAML大小写敏感
2.使用缩进代表层级关系
3.缩进只能使用空格,不能使用TAB,不要求空格个数,只需要相同层级左对齐(一般4个空格)

对象:使用冒号代表,格式为:key: value(冒号后面要加一个空格)。

key: value

可以使用缩进表示层级关系:

obj1:
    name: xixi
    age: 18

YAML中还支持流式(flow)语法表示对象,比如上面的例子可以写为:

obj1: {name: xixi,age: 18}

较为复杂的对象格式,可以使用问号加一个空格代表一个复杂的key,配合一个冒号加一个空格代表一个value:

?
    - name
    - age
:
    -xixi
    -18

表示对象的属性是一个数组[name,age],对应的值也是一个数组[xixi,18]。

数组:使用一个短横线加一个空格代表一个数组项。

hobby:
    - Java
    - LOL

也可以有这样的写法:

-
    - Java
    - LOL

可以简单理解为:[[Java,LOL]]

一个相对复杂的例子:

companies:
    -
        id: 1
        name: company1
        price: 200W
    -
        id: 2
        name: company2
        price: 500W

意思是companies属性是一个数组,每一个数组元素又是由id,name,price三个属性构成。

数组也可以使用流式(flow)的方式表示:

companies: [{id: 1,name: company1,price: 200W},{id: 2,name: company2,price: 500W}]

常量:YAML中提供了多种常量结构,包括:整数,浮点数,字符串,NULL,日期,布尔,时间。

boolean: 
    - TRUE  #true,True都可以
    - FALSE  #false,False都可以
float:
    - 3.14
    - 6.8523015e+5  #可以使用科学计数法
int:
    - 123
    - 0b1010_0111_0100_1010_1110    #二进制表示
null:
    nodeName: 'node'
    parent: ~  #使用~表示null
string:
    - 哈哈
    - 'Hello world'  #可以使用双引号或者单引号包裹特殊字符
    - newline
      newline2    #字符串可以拆成多行,每一行会被转化成一个空格
date:
    - 2018-02-17    #日期必须使用ISO 8601格式,即yyyy-MM-dd
datetime: 
    -  2018-02-17T15:02:31+08:00    #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区

一些特殊符号:YAML中提供了很多特殊符号,在这里简单介绍常用的一些。

1 --- YAML可以在同一个文件中,使用---表示一个文档的开始;比如Springboot中profile的定义:

server:
    address: 192.168.1.101
---
spring:
    profiles: development
    server:
        address: 127.0.0.1
---
spring:
    profiles: production
    server:
        address: 192.168.1.102

代表定义了两个profile,一个是development,一个production;也常常使用---来分割不同的内容,比如记录日志:

---
Time: 2018-02-17T15:02:31+08:00
User: ed
Warning:
     This is an error message for the log file
---
Time: 2018-02-17T15:05:21+08:00
User: ed
Warning:
    A slightly different error message.

2 ... 和---配合使用,在一个配置文件中代表一个文件的结束:

---
time: 20:03:20
player: Sammy Sosa
action: strike (miss)
...
---
time: 20:03:47
player: Sammy Sosa
action: grand slam
...

相当于在一个yaml文件中连续写了两个yaml配置项。

3 !! YAML中使用!!做类型强行转换:

string:
    - !!str 54321
    - !!str true

相当于把数字和布尔类型强转为字符串。当然允许转型的类型很多,比如:

--- !!set
- Mark McGwire: 65
- Sammy Sosa: 63
- Sammy Sosa: 63
- Ken Griffy: 58

将数组解析为set,简单理解,转化的内容就是:[{Ken Griffy=58}, {Mark McGwire=65}, {Sammy Sosa=63}],重复的Sammy Sosa去掉;

------------------------------------------------------------------------------------------------------------------------------

使用Devtools热部署
spring-boot-devtools是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到程序。原理是在发现代码有更改之后,重新启动应用,但是速度比手动停止后再启动更快。
其深层原理是使用了两个ClassLoader,一个ClassLoader加载那些不会改变的类(第三方jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。
即devtools会监听classpath下的文件变动,并且会立即重启应用(发生在保存时刻)。

从spring-boot-1.3开始支持热部署功能
1.引入maven依赖


    org.springframework.boot
    spring-boot-devtools
    true

2.开启热部署

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
			    
	                true
	            
			   	
		
	

------------------------------------------------------------------------------------------------------------------------------

加载并调试SpringBoot项目
使用IDEA打开SpringBoot项目。
File->Settings->搜索Maven->配置如图->Apply->OK
SpringBoot_第9张图片

IDEA右侧点击Maven->“加号”->选择demo项目中的pom.xml文件->OK

File->Settings->搜索font可以更改字体

选择项目->File->Project Structure->配置如图->Apply->OK
SpringBoot_第10张图片

直接点击main方法左边的绿色启动标志即可运行。
SpringBoot_第11张图片运行结果:
SpringBoot_第12张图片

------------------------------------------------------------------------------------------------------------------------------

设置IDEA支持热部署
1.Ctrl + Shift + A -> 查找make project automatically -> 选中 -> Apply -> OK
SpringBoot_第13张图片
2.Ctrl + Shift + A -> 查找Registry -> 找到并勾选compiler.automake.allow.when.app.running -> 重启IDEA
在这里插入图片描述

------------------------------------------------------------------------------------------------------------------------------

自定义属性参数并通过@Value引用
在application.properties文件中添加代码:

server.port=8080

server.servlet.context-path=/demo

[email protected]

在application.yml文件中添加代码:

server:
    port: 8080
    servlet:
        context-path: /mydemo

obj1:
    name: 西西

创建一个Hello类,添加代码:

package com.xixi.demo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class Hello {

    @Value("${admin.email}")
    String email;

    @Value("${obj1.name}")
    String name;

    @ResponseBody
    @RequestMapping("/hello")
    public void hello() {
        System.out.println("姓名:"+name);
        System.out.println("邮箱:"+email);

    }
}

运行结果:
SpringBoot_第14张图片

你可能感兴趣的:(Web)