springboot 尚桂谷学习总结02
Posted lixuchun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
[email protected] 获取配置文件值 和 @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 尚桂谷学习笔记03
以上是关于springboot 尚桂谷学习总结02的主要内容,如果未能解决你的问题,请参考以下文章
全栈编程系列SpringBoot整合Shiro(含KickoutSessionControlFilter并发在线人数控制以及不生效问题配置启动异常No SecurityManager...)(代码片段