一.Properties与Yaml
SpringBoot支持properties与yaml两种配置文件application.properties/application.yml
yaml简单使用
1.yaml简介
yaml是以数据为中心的,比json,xml更适合做配置文件
2.yaml基本语法
k: v:形式的键值对,:后面必须有空格
以空格缩进来控制层级关系
大小写敏感
例子:
server:
port: 8081 # 设置默认端口号
servlet:
path: /init
值的写法
k: v 直接书写
【字符串默认不用加上单引号或者双引号】
"":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
'':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
对象
k: v:在下一行来写对象的属性和值的关系
例如:
persion:
name: zhangsan
age: 10
行内写法:
persion: {name: zhangsan,age: 10}
数组(List,Set,Map)
普通数组,List,Set 使用 -值 来表示数组中的一个元素
arrays:
- arrays1
- arrays2
- arrays3
Map使用k: v的形式来表示
map:
k1: v1
k2: v2
k3: v3
使用配置文件注入
在pom.xml引入依赖,用于注释处理器生成自己的元数据
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
实体类:
/**
* persion类
*/
@Component
@ConfigurationProperties(prefix = "persion")
public class Persion {
private String name;
private int age;
private boolean isMan;
private Date birth;
private String[] hobbys;
private Map<String,String> skills;
private List<String> enjoys;
// 省略getter setter toString
}
yaml配置
persion:
name: zhangsan
age: 20
isMan: true
birth: 1997/11/12
hobbys:
- 篮球
- 足球
- 乒乓球
skills:
java: javase
python: ai
enjoys:
- eating
- running
- playgames
测试类
@Autowired
Persion persion;
@Test
public void contextLoads() {
System.out.println(persion);
}
结果:
...
...
2018-07-18 11:22:23.818 INFO 6528 --- [ main] com.fjut.InitTest : Started InitTest in 2.896 seconds (JVM running for 4.389)
Persion{name='zhangsan', age=20, isMan=false, birth=Wed Nov 12 00:00:00 CST 1997, hobbys=[篮球, 足球, 乒乓球], skills={java=javase, python=ai}, enjoys=[eating, running, playgames]}
2018-07-18 11:22:24.631 INFO 6528 --- [ Thread-2] o.s.w.c.s.GenericWebApplicationContext : Closing org.springframework.web.context.support.GenericWebApplicationContext@38467116: startup date [Wed Jul 18 11:22:21 CST 2018]; root of context hierarchy
yaml语法教程
http://www.ruanyifeng.com/blog/2016/07/yaml.html
二.服务器配置
更改端口:
server.port=8081
更改上下文访问路径,SpringBoot默认范文路径为“/”:
server.servlet.context-path=/base
常见的服务器配置
server.port:SpringBoot监听端口
server.error.path:错误处理路径
server.servlet.context-path:配置SpringBoot默认上下文路径
三.配置启动信息
Spring的启动信息是可以进行配置的
默认情况
可以在类路径下添加banner.txt来更改SpringBoot的启动信息
banner.txt
// .::::.
// .::::::::.
// :::::::::::
// ..:::::::::::'
// '::::::::::::'
// .::::::::::
// '::::::::::::::..
// ..::::::::::::.
// ``::::::::::::::::
// ::::``:::::::::' .:::.
// ::::' ':::::' .::::::::.
// .::::' :::: .:::::::'::::.
// .:::' ::::: .:::::::::' ':::::.
// .::' :::::.:::::::::' ':::::.
// .::' ::::::::::::::' ``::::.
// ...::: ::::::::::::' ``::.
// ```` ':. ':::::::::' ::::..
// '.:::::' ':'````..
//
____ _
/ ___'_ __ _ _(_)_ __ __ _
\___ | '_ | '_| | '_ \/ _` |
___)| |_)| | | | | || (_| |
|____| .__|_| |_|_| |_\__, |
|_| |___/
启动结果:
不仅可以使用文字,也可使用banner.gif或者banner.png/.jpg,控制台会自动将图片转化为Ascii字符打印
四.配置浏览器显示ico
我们可以自定义浏览图标:
步骤:
将图标命名为favicon.ico,丢入resources中即可
运行:
五.日志配置
定义日志级别
日志级别 ERROR WARN DEBUF INFO TRACE 级别从高到低
# 输出日志级别 ERROR WARN DEBUF INFO TRACE,日志只会打印当前级别,以及高于当前级别的日志
logging.level.root=info
输出日志到文件
# 输出日志到文件
logging.file=/my.log
定义日志输出格式
输出到控制台日志格式:
logging.pattern.console=【%level %date %logger %thread %M %L %m】 %n
输出到日志文件的日志格式:
# 定义输出到文件的日志格式
logging.pattern.file=【%level %date %logger %thread %M %L %m】 %n
日志格式基本参数
属性 | 内容 |
---|---|
%level | 表示输出日志级别 |
%date | 表示日期发生时的时间 |
%logger | 用于输出Logger名字,包名+类名,{n}限定输出长度 |
%thread | 当前线程名 |
%M | 日志发生时方法的名字 |
%L | 日志调用所在代码行 |
%m | 日志消息 |
%n | 日志换行 |
六.Enviroment
Enviroment是一个通用的读取应用程序运行时环境变量的类,可以读取application.properties,命令行输入参数,系统属性,操作系统变量等。可以通过Spring容器自动注入
//在application.properties中添加persion.say=HelloWorld
//测试
@Autowired
Environment environment;
@Test
public void contextLoads() {
System.out.println(environment.getProperty("persion.say"));
}
//结果
...
2018-07-18 12:54:57.697 INFO 5724 --- [ main] c.lgx.SpringBoot01BaseApplicationTests : Started SpringBoot01BaseApplicationTests in 2.854 seconds (JVM running for 4.234)
HelloWorld
2018-07-18 12:54:58.120 INFO 5724 --- [ Thread-3] o.s.w.c.s.GenericWebApplicationContext : Closing org.springframework.web.context.support.GenericWebApplicationContext@38cee291: startup date [Wed Jul 18 12:54:55 CST 2018]; root of context hierarchy
七.@Value与@ConfigurationProperties
八.@PropertySource,@ImportResource,@Bean
@PropertySource:加载指定的配置文件;
@PropertySource(value = {"classpath:xxx.properties"})
@ImportResource:导入Spring的配置文件,让配置文件里面的内容生效;
例如:
@ImportResource(locations = {"classpath:beans.xml"})
//导入Spring的配置文件让其生效
SpringBoot推荐给容器中添加组件的方式:推荐使用全注解配置类的方式
1、配置类@Configuration——>Spring配置文件
2、使用@Bean给容器中添加组件
/**
* @Configuration
* 用来标识这是一个配置类
*/
@Configuration
public class Myconfig {
/**
* 使用配置类就如同较早的xml的配置方式
*
* <beans>
* <bean id="hello" class="xxx.Hello"></bean>
* </beans>
*
* id 就相当于方法名
* class 相当于返回值类型
* 使用 @Bean 标签将它扫描到容器中
*/
@Bean
public Hello hello() {
return new Hello();
}
}
九.Profile
我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml,它用于多环境配置。
默认使用application.properties的配置;
激活指定profile
1.在配置文件中指定激活的环境
# 激活application-dev.properties配置文件
spring.profiles.active=dev
2.使用命令行激活
java -jar xxxx-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;
3.使用虚拟机参数
-Dspring.profiles.active=dev
十.SpringBoot自动装配
1).SpringBoot启动时加载住配置类,开启@EnableAutoConfiguration,自动加载组件
2).根据当前不同的条件判断,决定这个配置类是否生效
3)生效的配置类根据每个Bean不同的条件判断,决定是否把当前Bean扫入容器中
十一.自制SpringBoot starter
略