server:
port: 8080
address: 127.0.0.1
name: abc
(3)YAML:数据格式
⚫ 对象(map):键值对的集合。 注意冒号后的空格
person:
name: zhangsan
#行内写法
person: {name: zhangsan}
⚫ 数组:一组按次序排列的值
address:
-
beijing
-
shanghai
#行内写法
address: [beijing,shanghai]
⚫ 纯量:单个的、不可再分的值
msg1: ‘hello \n world’ # 单引忽略转义字符
msg2: “hello \n world” # 双引识别转义字符
⚫ YAML:参数引用
name: lisi
person:
name: ${name} # 引用上边定义的name值
(4)YAML:使用方式
1)yml
创建application.yml
server:
port: 8082
- 将application.properties当中的内容注释掉
- 运行测试
2)yaml
创建application.yaml
server:
port: 8083
将application.yml当中的内容注释掉
- 重新运行并测试
将三个配置文件当中的配置都打开
重新运行
上述证明application.properties的优先顺序高于application.yaml和application.yml
- 再测试application.yaml和application.yml,将application.properties当中的内容注释掉
运行测试
证明application.yml 要高于application.yaml优先级别
3、三种配置文件的优先加载顺序
优先级:application.properties高于application.yml 要高于application.yaml
1) @Value
1、在application.yml当中准备一些数据
server:
port: 8082
name: abc
对象
person:
name: 张三
age: 20
对象行内写法
person2: {name: 李四, age : 30}
数组
address:
-
beijing
-
shanghai
纯量
msg1: ‘hello \n world’ #不会识别转义字符,会原样输出
msg2: “hello \n world” #会识别转义字符,输出换行
2、HelloController当中通过@Value
读取对应的值
package cn.itbluebox.springbootinit.cn.itbluebox.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController //设置当前类是一个Rest风格的Controller
public class HelloController {
@Value(" n a m e " ) / / {name}")// name")//{}当中的内容必须和配置文件当中的键的值所对应
private String name;
@RequestMapping(“/hello2”) //设置当前的方法的映射路径
public String hello2(){
System.out.println(name);
return “hello Spring Boot init ! 我的第二个SpringBoot项目 name的值为:”+name;
}
@RequestMapping(“/hello”) //设置当前的方法的映射路径
public String hello(){
return “hello Spring Boot init ! 我的第二个SpringBoot项目”;
}
}
运行测试
3、获取对象的值
package cn.itbluebox.springbootinit.cn.itbluebox.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController //设置当前类是一个Rest风格的Controller
public class HelloController {
@Value(" n a m e " ) / / {name}")// name")//{}当中的内容必须和配置文件当中的键的值所对应
private String name;
@Value(" p e r s o n . n a m e " ) / / {person.name}")// person.name")//{}当中的内容必须和配置文件当中的键的值所对应
private String name2;
@Value(" p e r s o n . a g e " ) / / {person.age}")// person.age")//{}当中的内容必须和配置文件当中的键的值所对应
private int age;
@RequestMapping(“/hello2”) //设置当前的方法的映射路径
public String hello2(){
System.out.println(name);
System.out.println(name2);
System.out.println(age);
return “hello Spring Boot init ! 我的第二个SpringBoot项目 name的值为:”+name +" name2:“+name2+” age:"+age;
}
@RequestMapping(“/hello”) //设置当前的方法的映射路径
public String hello(){
return “hello Spring Boot init ! 我的第二个SpringBoot项目”;
}
}
重新运行并测试
-参数注入
修改application.yml
server:
port: 8082
name: abc
对象
person:
name: ${name}
age: 20
对象行内写法
person2: {name: 李四, age : 30}
数组
address:
-
beijing
-
shanghai
纯量
msg1: ‘hello \n world’ #不会识别转义字符,会原样输出
msg2: “hello \n world” #会识别转义字符,输出换行
重新运行并测试
4、获取数组的值
package cn.itbluebox.springbootinit.cn.itbluebox.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController //设置当前类是一个Rest风格的Controller
public class HelloController {
@Value(" n a m e " ) / / {name}")// name")//{}当中的内容必须和配置文件当中的键的值所对应
private String name;
@Value(" p e r s o n . n a m e " ) / / {person.name}")// person.name")//{}当中的内容必须和配置文件当中的键的值所对应
private String name2;
@Value(" p e r s o n . a g e " ) / / {person.age}")// person.age")//{}当中的内容必须和配置文件当中的键的值所对应
private int age;
@Value(" a d d r e s s [ 0 ] " ) / / {address[0]}")// address[0]")//{}当中的内容必须和配置文件当中的键的值所对应
private String address;
@RequestMapping(“/hello2”) //设置当前的方法的映射路径
public String hello2(){
System.out.println(name);
System.out.println(name2);
System.out.println(age);
System.out.println(address);
return “hello Spring Boot init ! 我的第二个SpringBoot项目 name的值为:”
+name +" name2:“+name2+” age:"+age
+" address:"+address
;
}
@RequestMapping(“/hello”) //设置当前的方法的映射路径
public String hello(){
return “hello Spring Boot init ! 我的第二个SpringBoot项目”;
}
}
重新运行并测试
5、纯量的值
package cn.itbluebox.springbootinit.cn.itbluebox.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController //设置当前类是一个Rest风格的Controller
public class HelloController {
@Value(" n a m e " ) / / {name}")// name")//{}当中的内容必须和配置文件当中的键的值所对应
private String name;
@Value(" p e r s o n . n a m e " ) / / {person.name}")// person.name")//{}当中的内容必须和配置文件当中的键的值所对应
private String name2;
@Value(" p e r s o n . a g e " ) / / {person.age}")// person.age")//{}当中的内容必须和配置文件当中的键的值所对应
private int age;
@Value(" a d d r e s s [ 0 ] " ) / / {address[0]}")// address[0]")//{}当中的内容必须和配置文件当中的键的值所对应
private String address;
@Value(" m s g 1 " ) / / {msg1}")// msg1")//{}当中的内容必须和配置文件当中的键的值所对应
private String msg1;
@Value(" m s g 2 " ) / / {msg2}")// msg2")//{}当中的内容必须和配置文件当中的键的值所对应
private String msg2;
@RequestMapping(“/hello2”) //设置当前的方法的映射路径
public String hello2(){
System.out.println(name);
System.out.println(name2);
System.out.println(age);
System.out.println(address);
System.out.println(msg1);
System.out.println(msg2);
return “hello Spring Boot init ! 我的第二个SpringBoot项目 name的值为:”
+name +" name2:“+name2+” age:"+age
+" address:"+address
+" msg1:"+msg1
+" msg2:"+msg2;
}
@RequestMapping(“/hello”) //设置当前的方法的映射路径
public String hello(){
return “hello Spring Boot init ! 我的第二个SpringBoot项目”;
}
}
重新运行并测试
2) Environment
获取对应的值
package cn.itbluebox.springbootinit.cn.itbluebox.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController //设置当前类是一个Rest风格的Controller
public class HelloController {
@Value(" n a m e " ) / / {name}")// name")//{}当中的内容必须和配置文件当中的键的值所对应
private String name;
@Value(" p e r s o n . n a m e " ) / / {person.name}")// person.name")//{}当中的内容必须和配置文件当中的键的值所对应
private String name2;
@Value(" p e r s o n . a g e " ) / / {person.age}")// person.age")//{}当中的内容必须和配置文件当中的键的值所对应
private int age;
@Value(" a d d r e s s [ 0 ] " ) / / {address[0]}")// address[0]")//{}当中的内容必须和配置文件当中的键的值所对应
private String address;
@Value(" m s g 1 " ) / / {msg1}")// msg1")//{}当中的内容必须和配置文件当中的键的值所对应
private String msg1;
@Value(" m s g 2 " ) / / {msg2}")// msg2")//{}当中的内容必须和配置文件当中的键的值所对应
private String msg2;
@Autowired
private Environment env;//SpringBoot启动的时候会在Spring容器当中初始化Environment对象
@RequestMapping(“/hello2”) //设置当前的方法的映射路径
public String hello2(){
System.out.println(name);
System.out.println(name2);
System.out.println(age);
System.out.println(address);
System.out.println(msg1);
System.out.println(msg2);
System.out.println(“-----------------”);
System.out.println(env.getProperty(“name”));
System.out.println(env.getProperty(“person.name”));
System.out.println(env.getProperty(“person.age”));
System.out.println(env.getProperty(“address[0]”));
System.out.println(env.getProperty(“msg1”));
System.out.println(env.getProperty(“msg2”));
return “hello Spring Boot init ! 我的第二个SpringBoot项目 name的值为:”
+name +" name2:“+name2+” age:"+age
+" address:"+address
+" msg1:"+msg1
+" msg2:"+msg2
+"
env.getProperty(“name)=”+env.getProperty(“name”)
+" env.getProperty(“person.name”)="+env.getProperty(“person.name”)
+" env.getProperty(“person.age”)="+env.getProperty(“person.age”)
+" env.getProperty(“address[0]”)="+env.getProperty(“address[0]”)
+" env.getProperty(“msg1”)="+env.getProperty(“msg1”)
+" env.getProperty(“msg2”)="+env.getProperty(“msg2”)
;
}
@RequestMapping(“/hello”) //设置当前的方法的映射路径
public String hello(){
return “hello Spring Boot init ! 我的第二个SpringBoot项目”;
}
}
运行测试
重新运行并测试
3) @ConfigurationProperties
01)默认读取的注入
- 创建Person对象
package cn.itbluebox.springbootinit;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component //将Person 容器当中
@ConfigurationProperties
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return “Person{” +
“name='” + name + ‘’’ +
“, age=” + age +
‘}’;
}
}
- 完善HelloController注入Person
package cn.itbluebox.springbootinit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController //设置当前类是一个Rest风格的Controller
public class HelloController {
@Value(" n a m e " ) / / {name}")// name")//{}当中的内容必须和配置文件当中的键的值所对应
private String name;
@Value(" p e r s o n . n a m e " ) / / {person.name}")// person.name")//{}当中的内容必须和配置文件当中的键的值所对应
private String name2;
@Value(" p e r s o n . a g e " ) / / {person.age}")// person.age")//{}当中的内容必须和配置文件当中的键的值所对应
private int age;
@Value(" a d d r e s s [ 0 ] " ) / / {address[0]}")// address[0]")//{}当中的内容必须和配置文件当中的键的值所对应
private String address;
@Value(" m s g 1 " ) / / {msg1}")// msg1")//{}当中的内容必须和配置文件当中的键的值所对应
private String msg1;
@Value(" m s g 2 " ) / / {msg2}")// msg2")//{}当中的内容必须和配置文件当中的键的值所对应
private String msg2;
@Autowired
private Environment env;//SpringBoot启动的时候会在Spring容器当中初始化Environment对象
@Autowired
private Person person;
@RequestMapping(“/hello2”) //设置当前的方法的映射路径
public String hello2(){
System.out.println(name);
System.out.println(name2);
System.out.println(age);
System.out.println(address);
System.out.println(msg1);
System.out.println(msg2);
System.out.println(“-----------------”);
System.out.println(env.getProperty(“name”));
System.out.println(env.getProperty(“person.name”));
System.out.println(env.getProperty(“person.age”));
System.out.println(env.getProperty(“address[0]”));
System.out.println(env.getProperty(“msg1”));
System.out.println(env.getProperty(“msg2”));
System.out.println(“------------------”);
System.out.println(“person”+person);
return “hello Spring Boot init ! 我的第二个SpringBoot项目 name的值为:”
+name +" name2:“+name2+” age:"+age
+" address:"+address
+" msg1:"+msg1
+" msg2:"+msg2
+"
env.getProperty(“name)=”+env.getProperty(“name”)
+" env.getProperty(“person.name”)="+env.getProperty(“person.name”)
+" env.getProperty(“person.age”)="+env.getProperty(“person.age”)
+" env.getProperty(“address[0]”)="+env.getProperty(“address[0]”)
+" env.getProperty(“msg1”)="+env.getProperty(“msg1”)
+" env.getProperty(“msg2”)="+env.getProperty(“msg2”)
+" person = "+person
;
}
@RequestMapping(“/hello”) //设置当前的方法的映射路径
public String hello(){
return “hello Spring Boot init ! 我的第二个SpringBoot项目”;
}
}
运行测试
重新运行并测试
@Component //将Person 容器当中
@ConfigurationProperties
public class Person {
上面默认读取的是
02)设置注入前缀
@ConfigurationProperties(prefix = “person”)
运行测试
重新运行并测试
得到Person对应的值
得到对应配置文件的值
03)设置对象当中有数组注入
- 修改application.yml
对象
person:
name: ${name}
age: 20
address:
-
beijing
-
shanghai
- 修改Person
package cn.itbluebox.springbootinit;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Arrays;
@Component //将Person 容器当中
@ConfigurationProperties(prefix = “person”)
public class Person {
private String name;
private int age;
private String[] address;
public Person() {
}
public Person(String name, int age, String[] address) {
this.name = name;
this.age = age;
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String[] getAddress() {
return address;
}
public void setAddress(String[] address) {
this.address = address;
}
@Override
public String toString() {
return “Person{” +
“name='” + name + ‘’’ +
“, age=” + age +
“, address=” + Arrays.toString(address) +
‘}’;
}
}
运行测试
重新运行并测试
04)解决Person类上对应的红色警告(设置编写配置文件的时候自动提示)
点击后跳转到网页提示(添加如下的配置依赖)
org.springframework.boot
spring-boot-configuration-processor
true
点击
Person显示正常
同时在application.yml编写配置的时候会有一些提示信息
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
复习的面试资料
这些面试全部出自大厂面试真题和面试合集当中,小编已经为大家整理完毕(PDF版)
- 第一部分:Java基础-中级-高级
- 第二部分:开源框架(SSM:Spring+SpringMVC+MyBatis)
- 第三部分:性能调优(JVM+MySQL+Tomcat)
- 第四部分:分布式(限流:ZK+Nginx;缓存:Redis+MongoDB+Memcached;通讯:MQ+kafka)
- 第五部分:微服务(SpringBoot+SpringCloud+Dubbo)
- 第六部分:其他:并发编程+设计模式+数据结构与算法+网络
进阶学习笔记pdf
- Java架构进阶之架构筑基篇(Java基础+并发编程+JVM+MySQL+Tomcat+网络+数据结构与算法)
- Java架构进阶之开源框架篇(设计模式+Spring+SpringMVC+MyBatis)
- Java架构进阶之分布式架构篇 (限流(ZK/Nginx)+缓存(Redis/MongoDB/Memcached)+通讯(MQ/kafka))
- Java架构进阶之微服务架构篇(RPC+SpringBoot+SpringCloud+Dubbo+K8s)
何学起的朋友,同时减轻大家的负担。**
[外链图片转存中…(img-fhPi2v4m-1711139138261)]
[外链图片转存中…(img-RQkSxljM-1711139138262)]
[外链图片转存中…(img-5DGeHkF4-1711139138262)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-4Z0WWnZG-1711139138262)]
复习的面试资料
这些面试全部出自大厂面试真题和面试合集当中,小编已经为大家整理完毕(PDF版)
- 第一部分:Java基础-中级-高级
[外链图片转存中…(img-8hE8oGlE-1711139138263)]
- 第二部分:开源框架(SSM:Spring+SpringMVC+MyBatis)
[外链图片转存中…(img-mQnZ78hE-1711139138263)]
- 第三部分:性能调优(JVM+MySQL+Tomcat)
[外链图片转存中…(img-yWh792di-1711139138264)]
- 第四部分:分布式(限流:ZK+Nginx;缓存:Redis+MongoDB+Memcached;通讯:MQ+kafka)
[外链图片转存中…(img-lZkB38Yy-1711139138266)]
- 第五部分:微服务(SpringBoot+SpringCloud+Dubbo)
[外链图片转存中…(img-7HrIbnyA-1711139138266)]
- 第六部分:其他:并发编程+设计模式+数据结构与算法+网络
[外链图片转存中…(img-KeMb28S9-1711139138266)]
进阶学习笔记pdf
- Java架构进阶之架构筑基篇(Java基础+并发编程+JVM+MySQL+Tomcat+网络+数据结构与算法)
[外链图片转存中…(img-zbEUSUwM-1711139138267)]
- Java架构进阶之开源框架篇(设计模式+Spring+SpringMVC+MyBatis)
[外链图片转存中…(img-4suUANtQ-1711139138267)]
[外链图片转存中…(img-Q9LSEEQq-1711139138267)]
[外链图片转存中…(img-Cq1bdZul-1711139138268)]
- Java架构进阶之分布式架构篇 (限流(ZK/Nginx)+缓存(Redis/MongoDB/Memcached)+通讯(MQ/kafka))
[外链图片转存中…(img-9e1V7vNM-1711139138268)]
[外链图片转存中…(img-HtnNknR0-1711139138268)]
[外链图片转存中…(img-JfojyJqv-1711139138269)]
- Java架构进阶之微服务架构篇(RPC+SpringBoot+SpringCloud+Dubbo+K8s)
[外链图片转存中…(img-XqqqcxOi-1711139138269)]
[外链图片转存中…(img-HfZ7kIUB-1711139138269)]