------向导快速创建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. Cookie/Session/Local Storage/IndexedDB

    本文主要总结客户端/浏览器端数据存储的技术. 在客户端或者浏览器端存储,可以快速的访问页面,当前主要有Cookie,Session,Local Storage,IndexedDB四种(WebSQL呗废 ...

  2. debain8 安装mysql8

    一.下载apt源 https://dev.mysql.com/downloads/repo/apt/ 二.更新apt sudo apt-get update 三.安装mysql sudo apt-ge ...

  3. Scala函数高级操作

    字符串高级操作:***** 非常重要 将函数赋值给变量/值def sayHello(name:String): Unit = { println(s"Hello:$name")} ...

  4. js实现千位符分隔

    前几天面试做保险项目的公司,被问到了一道实现千位符分割方法的题,乍一看挺简单,但做起来最后却没给出来一个合适的解决方法.回来自己琢磨了一个还行的答案. var num = 3899000001, ar ...

  5. 自定义InputFormat

    回顾: 在上一篇https://www.cnblogs.com/superlsj/p/11857691.html详细介绍了InputFormat的原理和常见的实现类.总结来说,一个InputForma ...

  6. meterpreter Command Sample

    meterpreter Command Sample ========================================================================= ...

  7. 为什么MySQL索引要使用 B+树,而不是其它树形结构?

    作者:李平 https://www.cnblogs.com/leefreeman/p/8315844.html 一个问题? InnoDB一棵B+树可以存放多少行数据?这个问题的简单回答是:约2千万 为 ...

  8. 一、WebApi模型验证

    一.新建项目 选择空的项目webapi 查看启动端口 创建控制器 添加方法 public class VerifController : ApiController { public IHttpAct ...

  9. 脚本_检测mysql存活状态

    #!bin/bash#功能:检测mysql服务是否存活#作者:liusingbon# host为你需要检测的mysql主机的IP 地址,user为mysql账户名,passwd为密码; 这些信息需要根 ...

  10. rabbitmq AmqpClient 使用Direct 交换机投递与接收消息,C++代码示例

    // 以DIRECT 交换机和ROUTING_KEY的方式进行消息的发布与订阅 // send // strUri = "amqp://guest:guest@192.168.30.11:8 ...