------向导快速创建Springboot 项目------

  1.使用spring initializer 快速创建一个springboot 项目

  选择后 最后点击finsh 向导会联网创建 spring boot 项目

  自动生成的 pom 文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.lixuchun</groupId>
<artifactId>spring-boot-01-helloworld-quick</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>spring-boot-01-helloworld-quick</name>
<description>Demo project for Spring Boot</description> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <!-- springboot 单元测试模块 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>

  主程序也会自动生成 我们只需要编写自己逻辑就好了

  resources 文件夹 自动生成

    static 静态资源文件 js css images

    templates : 保存所有末班页面 (spring boot 默认jar包使用嵌入式的tomcat 默认不支持jsp 页面) 可以

              使用模板引擎 freemarker thymleaf

  application.properties : springboot 应用的配置文件 可以做一些默认的设置的修改

  

------spring boot 文件的配置------

  1.配置文件, 配置文件的名称是固定的

    application.properties

    application.yaml

    配置文件的作用 :修改spring boot 的默认配置, 因为springboot 初始化都给我们配置好了

    YAML :是一个标记语言

    标记语言:

      之前配置文件是以xxx.xml 为配置文件

      ymal 以数据为中心 更适合做配置文件 更加简洁

    eg : 启动端口为 8081

  2.YAML 语法

  基本语法:

    k: v    : 表示已对键值对(空格必须有)

    以空格缩进控制层级关系 : 只要左对齐数据 都是一个层级的

  server:

    port:8081

    path: /hello

    属性值是大小写敏感的

  值的写法:

    字面量 :普通的值 (数字 字符串 布尔)

      k: v ---》 直接写 不需要单引号 双引号

      "":双引号---》不会转义字符串里面特殊的字符

        name: "zhangsan \n lisi" ---》 输出 zhangsan 换行 lisi

      ‘’:单引号 ---》会转义特殊字符 特殊字符最终只会是一个普通的字符串

        name: 'zhangsan \n lisi' ---》 输出 zhangsan \n lisi

    对象,Map(属性和  值) (键值对)

    

    数组 (list set)

    

   yaml 练习实例:

  创建 dog person 类: Alt + Insert 可以进行set get toString 等方法设定 

package com.lixuchun.springboot.com.lixuchun.springboot.bean;

public class Dog {
private String name;
private String age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getAge() {
return age;
} public void setAge(String age) {
this.age = age;
} @Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
'}';
}
}

  person 类: @Component 将 Person 加入到容器当中 否则 ConfigurationProperties 不好用

package com.lixuchun.springboot.com.lixuchun.springboot.bean;

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: 告訴springboot中所有屬性和配置文件進行綁定
* prefix = "person"C
* 只有組件是容器中的組件 才能容器提供@ConfigurationProperties功能
*/ @Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date birth; private Map<String, Object> maps;
private List<Object> list;
private Dog dog; public String getLastName() {
return lastName;
} public void setLastName(String lastName) {
this.lastName = lastName;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public Boolean getBoss() {
return boss;
} public void setBoss(Boolean boss) {
this.boss = boss;
} public Date getBirth() {
return birth;
} public void setBirth(Date birth) {
this.birth = birth;
} public Map<String, Object> getMaps() {
return maps;
} public void setMaps(Map<String, Object> maps) {
this.maps = maps;
} public List<Object> getList() {
return list;
} public void setList(List<Object> list) {
this.list = list;
} public Dog getDog() {
return dog;
} public void setDog(Dog dog) {
this.dog = dog;
} @Override
public String toString() {
return "Person{" +
"lastName='" + lastName + '\'' +
", age=" + age +
", boss=" + boss +
", birth=" + birth +
", maps=" + maps +
", list=" + list +
", dog=" + dog +
'}';
}
}

  yml 文件内容如下:

server:
port: 8081 person:
lastName: zhangsan
age: 18
boss: false
birth: 2017/12/12
maps: {k1: v1,k2: v2}
lists:
- lisi
- zhaoliu
dog:
name: 小狗
age: 2

  测试类如下:最后yml文件内容成功注入到 bean中

  总结配置文件值注入:

    @Component

    @ConfigureationProperties(prefix="person")

    这样就可以把配置文件内容注入进来了(注意:类必须成为spring容器中的组件才注入,所以必须加 @Component

    可以导入配置文件处理器,以后编写配置文件就有提示了

     <!-- 導入配置文件有提示 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>

  配置properties文件的编码问题

  1.编辑properties文件

  

  再次运行测试类:中文出现乱码问题

  

  解决办法:

    idea 设置默认使用 utf-8

    properties 文件默认设置 assci

    

  

  2.@Value 获取配置文件值 和 @ConfigurationProperties 获取值比较

  @ConfigurationProperties 是从全局配置文件中读取内容

   类上有@Validate 属性可以进行校验 如 @Email 属性必须是邮件格式的值

@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person { //@Value("${person.last-name}")
@Email
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;

  如果说我们只是获取配置文件中的某一项简单类型 string int 值就用@Value 

  如果说专门编写了一个javaBean来和配置文件进行映射,使用@ConfigurationProperties

  3. @PropertySource && @ImportResource  

    @PropertySource 加载指定的配置文件

      @PropertySource(value = {"classpath:person.properties"})

    @ImportResource :导入spring 的配置文件 让配置内容生效

    新建一个service 并且新建一个 beans.xml 将 service 注入进去

    在test测试一下 ioc容器中是否包含了这个bean

    结果 false 发现并不包含 说明没有注入进去:

    如果想加入到ioc容器中 则加上 @ImportResource(locations={"classpath:beans.xml"})

    加到 主配置类上 再次运行 则注入到ioc容器中了

    spring boot 不推荐 xml 配置的方式

  spring boot 推荐给容器中添加组件方式:全部使用注解进行配置

  eg:

package com.lixuchun.springboot.config;

import com.lixuchun.springboot.com.lixuchun.springboot.service.HelloService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; /**
* 注明当前类是一个配置类 就是替代之前的spring配置文件
* 在 配置文件中 <bean></bean> 标签组件
*/
@Configuration
public class MyAppConfig { /**
* 将方法的返回值加载到容器中 容器中id 默认就是方法名称
* @return
*/
@Bean
public HelloService helloService() {
System.out.println("给容器中添加组件了!");
return new HelloService();
}
}

  

  占位符:

  4. profile

    1.多profile 文件,创建多个profile文件app-dev, app-pro。。。。。。

      我们在编辑配置文件的时候文件名称可以是 : application-{profile}.propeties/ yml

      默认使用 application.properties 配置文件

    

    2.yml 支持多文档块模式,下面分成三块 并且激活第一块

  

    3. 激活指定的profile 文件

      1.在指定配置文件中指定激活配置文件: spring.profiles.active=dev

        则 application-dev.properties 配置文件生效

      2.可以使用命令行方式激活指定文件:

        --spring.profile.active=dev 下面图中 通过1,2配置 虽然 yml 配置文件中 prod生效

        但是由于 命令行则是dev 块生效

   也可以通过maven打包后 java -jar 命令进行配置

  也可以通过虚拟机参数进行设置:-Dspring-profiles.active=dev

  spring boot 配置文件的加载位置:file:./ 此目录为 项目跟目录 和 src 目录评级

  spring boot 会从四个位置全部加载配置文件: 互补配置 有高用高 没有用低

  在项目打包后需要 使用命令行参数形式 启动项目的时候指定配置文件位置 指定的配置文件和

  默认的配置文件会起到互补的作用

  

  

  外部配置文件加载:按照优先级从高到低:高优先级的配置覆盖低优先级配置 互补配置

  由jar包外向jar包内进行寻找,有限寻找带 profile的配置文件[jar propertis文件和jar包同目录]

  启动项目会直接加载 application.properties 文件

  

------自动配置原理------

  配置文件可以写什么 如何写 自动配置原理:

  1.spring boot 启动时候 加载主配置类 开启了自动配置功能@EnableAutoConfiguration

  每个xxxAutoConfiguration类都是容器的一个组件,都加入到容器中。用来做自动化配置

  以HttpEncodingAutoConfiguration 为例进行解析:

  精髓

  

  @Conditional 自动配置

  1. @Conditional 派生注解 (spring 注解版原生的 @Conditional 作用)

  自动配置类必须在一定的条件下才能生效,加载了很多的配置 但是生效的话还要自己配置

  比如导入pom jar包等

  如何查看哪些配置类生效了: debug=true

  

  然后启动可以看控制台哪些自动装配了

  Negtive matches: 没有启用的自动装配

springboot 尚桂谷学习总结02的更多相关文章

  1. springboot 尚桂谷学习笔记03

    ------spring boot 与日志------ 日志框架: 市面上的日志框架: jul jcl jboss-logging logback log4j log4j2 ...... 左边一个门面 ...

  2. springboot 尚桂谷学习总结01

    ------springboot 技术入门------ 1.springboot 简介: 优点: 简化spring 应用开发的一个框架 整个spring技术栈的一个大整合 ------微服务----- ...

  3. spring boot 尚桂谷学习笔记10 数据访问02 mybatis

    数据访问 mybatis 创建一个 springboot 工程,模块选择 sql 中 mysql(数据驱动), jdbc(自动配置数据源), mybatis Web模块中选择 web pom 引入: ...

  4. spring boot 尚桂谷学习笔记05 ---Web

    ------web 开发登录功能------ 修改login.html文件:注意加粗部分为 msg 字符串不为空时候 才进行显示 <!DOCTYPE html> <!-- saved ...

  5. spring boot 尚桂谷学习笔记11 数据访问03 JPA

    整合JPA SpringData 程序数据交互结构图 (springdata jpa 默认使用 hibernate 进行封装) 使用之后就关注于 SpringData 不用再花多经历关注具体各个交互框 ...

  6. spring boot 尚桂谷学习笔记09 数据访问

    springboot 与数据库访问 jdbc, mybatis, spring data jpa,  1.jdbc原生访问 新建项目 使用 springboot 快速构建工具 选中 web 组件 sq ...

  7. spring boot 尚桂谷学习笔记07 嵌入式容器 ---Web

    ------配置嵌入式servlet容器------ springboot 默认使用的是嵌入的Servlet(tomcat)容器 问题? 1)如何定制修改Servlet容器的相关配置: 1.修改和se ...

  8. spring boot 尚桂谷学习笔记06 异常处理 ---Web

    ------错误处理机制------ 默认效果 1 返回一个默认的错误页面 浏览器发送请求的请求头:优先接收 text/html 数据 客户端则默认响应json数据 : accept 没有说明返回什么 ...

  9. spring boot 尚桂谷学习笔记04 ---Web开始

    ------web开发------ 1.创建spring boot 应用 选中我们需要的模块 2.spring boot 已经默认将这些场景配置好了 @EnableAutoConfiguration ...

随机推荐

  1. installing-sql-server-2012-error-prior-visual-studio-2010-instances-requiring 转摘

    there are two way: First : Inside your CD of SQL Server 2012 you can go to this path \redist\VisualS ...

  2. k3 cloud中列表字段汇总类型中设置了汇总以后没有显示出汇总值

    处理方法,需要bos中的分组列信息中设置求和: 选择对应字段将其从左侧添加到右侧 方法二: 直接针对[价税合计]字段的列表汇总类型进行设置,步骤如下图所示

  3. C中对整数的大端对齐与小端对齐的理解

    示例 /* 大端与小端对齐 说明: 1.对于arm, intel这种x86架构的复杂指令cpu,整数在内存中是 倒着存放的,低地址放低位,高地址放高位,称之为小端对齐 2.对于linux服务器的cpu ...

  4. 使用Unsafe来实现自定义锁

    1.使用Unsafe类 import sun.misc.Unsafe; class UnsafePackage { private static Unsafe unsafe; static { try ...

  5. windows linux子系统(Windows Subsystem for Linux)的存放目录

    win10子系统把windows的底层接口做了个转换到Linux从而能运行linux,但是他在安装的时候并没有提供安装位置的选项.(还有hyper v) 现在,所有从商店安装的发行版都存在于以下目录中 ...

  6. 非阻塞套接字与IO多路复用(转,python实现版)

    非阻塞:指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回.epoll工作在非阻塞模式时,才会发挥作用. 我们了解了socket之后已经知道,普通套接字实现的服务端的缺陷:一次只能服务一个 ...

  7. NOSQL导图

  8. C#基础提升系列——C#集合

    C#集合 有两种主要的集合类型:泛型集合和非泛型集合. 泛型集合被添加在 .NET Framework 2.0 中,并提供编译时类型安全的集合. 因此,泛型集合通常能提供更好的性能. 构造泛型集合时, ...

  9. app、web其他测试点

  10. auto_now_add与auto_now的区别