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 ...
随机推荐
- Cookie/Session/Local Storage/IndexedDB
本文主要总结客户端/浏览器端数据存储的技术. 在客户端或者浏览器端存储,可以快速的访问页面,当前主要有Cookie,Session,Local Storage,IndexedDB四种(WebSQL呗废 ...
- debain8 安装mysql8
一.下载apt源 https://dev.mysql.com/downloads/repo/apt/ 二.更新apt sudo apt-get update 三.安装mysql sudo apt-ge ...
- Scala函数高级操作
字符串高级操作:***** 非常重要 将函数赋值给变量/值def sayHello(name:String): Unit = { println(s"Hello:$name")} ...
- js实现千位符分隔
前几天面试做保险项目的公司,被问到了一道实现千位符分割方法的题,乍一看挺简单,但做起来最后却没给出来一个合适的解决方法.回来自己琢磨了一个还行的答案. var num = 3899000001, ar ...
- 自定义InputFormat
回顾: 在上一篇https://www.cnblogs.com/superlsj/p/11857691.html详细介绍了InputFormat的原理和常见的实现类.总结来说,一个InputForma ...
- meterpreter Command Sample
meterpreter Command Sample ========================================================================= ...
- 为什么MySQL索引要使用 B+树,而不是其它树形结构?
作者:李平 https://www.cnblogs.com/leefreeman/p/8315844.html 一个问题? InnoDB一棵B+树可以存放多少行数据?这个问题的简单回答是:约2千万 为 ...
- 一、WebApi模型验证
一.新建项目 选择空的项目webapi 查看启动端口 创建控制器 添加方法 public class VerifController : ApiController { public IHttpAct ...
- 脚本_检测mysql存活状态
#!bin/bash#功能:检测mysql服务是否存活#作者:liusingbon# host为你需要检测的mysql主机的IP 地址,user为mysql账户名,passwd为密码; 这些信息需要根 ...
- rabbitmq AmqpClient 使用Direct 交换机投递与接收消息,C++代码示例
// 以DIRECT 交换机和ROUTING_KEY的方式进行消息的发布与订阅 // send // strUri = "amqp://guest:guest@192.168.30.11:8 ...