springboot 尚桂谷学习总结02
------向导快速创建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}")
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的更多相关文章
- springboot 尚桂谷学习笔记03
------spring boot 与日志------ 日志框架: 市面上的日志框架: jul jcl jboss-logging logback log4j log4j2 ...... 左边一个门面 ...
- springboot 尚桂谷学习总结01
------springboot 技术入门------ 1.springboot 简介: 优点: 简化spring 应用开发的一个框架 整个spring技术栈的一个大整合 ------微服务----- ...
- spring boot 尚桂谷学习笔记10 数据访问02 mybatis
数据访问 mybatis 创建一个 springboot 工程,模块选择 sql 中 mysql(数据驱动), jdbc(自动配置数据源), mybatis Web模块中选择 web pom 引入: ...
- spring boot 尚桂谷学习笔记05 ---Web
------web 开发登录功能------ 修改login.html文件:注意加粗部分为 msg 字符串不为空时候 才进行显示 <!DOCTYPE html> <!-- saved ...
- spring boot 尚桂谷学习笔记11 数据访问03 JPA
整合JPA SpringData 程序数据交互结构图 (springdata jpa 默认使用 hibernate 进行封装) 使用之后就关注于 SpringData 不用再花多经历关注具体各个交互框 ...
- spring boot 尚桂谷学习笔记09 数据访问
springboot 与数据库访问 jdbc, mybatis, spring data jpa, 1.jdbc原生访问 新建项目 使用 springboot 快速构建工具 选中 web 组件 sq ...
- spring boot 尚桂谷学习笔记07 嵌入式容器 ---Web
------配置嵌入式servlet容器------ springboot 默认使用的是嵌入的Servlet(tomcat)容器 问题? 1)如何定制修改Servlet容器的相关配置: 1.修改和se ...
- spring boot 尚桂谷学习笔记06 异常处理 ---Web
------错误处理机制------ 默认效果 1 返回一个默认的错误页面 浏览器发送请求的请求头:优先接收 text/html 数据 客户端则默认响应json数据 : accept 没有说明返回什么 ...
- spring boot 尚桂谷学习笔记04 ---Web开始
------web开发------ 1.创建spring boot 应用 选中我们需要的模块 2.spring boot 已经默认将这些场景配置好了 @EnableAutoConfiguration ...
随机推荐
- 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 ...
- k3 cloud中列表字段汇总类型中设置了汇总以后没有显示出汇总值
处理方法,需要bos中的分组列信息中设置求和: 选择对应字段将其从左侧添加到右侧 方法二: 直接针对[价税合计]字段的列表汇总类型进行设置,步骤如下图所示
- C中对整数的大端对齐与小端对齐的理解
示例 /* 大端与小端对齐 说明: 1.对于arm, intel这种x86架构的复杂指令cpu,整数在内存中是 倒着存放的,低地址放低位,高地址放高位,称之为小端对齐 2.对于linux服务器的cpu ...
- 使用Unsafe来实现自定义锁
1.使用Unsafe类 import sun.misc.Unsafe; class UnsafePackage { private static Unsafe unsafe; static { try ...
- windows linux子系统(Windows Subsystem for Linux)的存放目录
win10子系统把windows的底层接口做了个转换到Linux从而能运行linux,但是他在安装的时候并没有提供安装位置的选项.(还有hyper v) 现在,所有从商店安装的发行版都存在于以下目录中 ...
- 非阻塞套接字与IO多路复用(转,python实现版)
非阻塞:指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回.epoll工作在非阻塞模式时,才会发挥作用. 我们了解了socket之后已经知道,普通套接字实现的服务端的缺陷:一次只能服务一个 ...
- NOSQL导图
- C#基础提升系列——C#集合
C#集合 有两种主要的集合类型:泛型集合和非泛型集合. 泛型集合被添加在 .NET Framework 2.0 中,并提供编译时类型安全的集合. 因此,泛型集合通常能提供更好的性能. 构造泛型集合时, ...
- app、web其他测试点
- auto_now_add与auto_now的区别