SpringBoot---入门和配置

在控制类上可以使用@RestController替换@ResponseBody和@Controller注解


//这个类的所有方法返回的数据直接写给浏览器(如果是对象转为json数据)

/*@ResponseBody

@Controller*/

@RestController//替换上面两个注解

public class helloController {

@RequestMapping(“/hello”)

public String hello()

{

return “大忽悠”;

}

}


配置文件

===================================================================

在这里插入图片描述

SpringBoot全局配置文件的名字是固定的application,但是格式可以是properties或者yml(yaml)



yaml配置文件


在这里插入图片描述

在这里插入图片描述


YAML基本语法


1.基本语法

在这里插入图片描述

2.值的写法


字面量: 普通的值(数组,字符串,布尔)

在这里插入图片描述

对象,Map(属性和值)(键值对)

在这里插入图片描述

数组(List,Set)

在这里插入图片描述


YAML配置文件注入组件


yaml:

server:

port: 8081

person:

name: 大忽悠

age: 18

boss: false

birth: 2002/1/2

maps: {k1: v1,k2: 12}

lists:

  • 历史

  • 语文

  • 数学

dog:

name: 小狗

age: 1

将配置文件中配置的每一个属性的值,映射到这个组件中;

@ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中的相关的配置进行绑定

prefix = “person”:配置文件中哪个下面的所有属性进行一一映射

只有这个组件是容器中的组件,才能使用容器中提供的@ConfigurationProperties功能

peo类:

/*

  • 将配置文件中配置的每一个属性的值,映射到这个组件中

  • @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中的相关的配置进行绑定

  • prefix = “person”:配置文件中哪个下面的所有属性进行一一映射

  • 只有这个组件是容器中的组件,才能使用容器中提供的@ConfigurationProperties功能

  • */

@Controller

@ConfigurationProperties(prefix = “person”)

public class peo

{

private String name;

private Integer age;

private Boolean boss;

private Date birth;

private Map<String,Object> maps;

private List lists;

private Dog dog;

@Override

public String toString() {

return “peo{” +

“name='” + name + ‘’’ +

“, age=” + age +

“, boss=” + boss +

“, birth=” + birth +

“, maps=” + maps +

“, lists=” + lists +

“, dog=” + dog +

‘}’;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

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 getLists() {

return lists;

}

public void setLists(List lists) {

this.lists = lists;

}

public Dog getDog() {

return dog;

}

public void setDog(Dog dog) {

this.dog = dog;

}

}

导入配置文件处理器的依赖,这样对应组件和配置文件进行绑定就会有提示,且打包时排除对应的依赖

在这里插入图片描述

springboot的注释配置处理器没有在类路径下找到,需要导入配置文件处理器的依赖

org.springframework.boot

spring-boot-configuration-processor

true

org.springframework.boot

spring-boot-maven-plugin

org.springframework.boot

spring-boot-configuration-processor


SpringBoot单元测试刚才的注入结果


如果要完成对应类属性的注入,那么对应的类要提供set方法

@RunWith(SpringRunner.class)

@SpringBootTest

class SpringBootQuickStartOneApplicationTests {

@Autowired

peo people;

@Test

void contextLoads()

{

System.out.println(people);

}

}

在这里插入图片描述


properties配置文件编码问题


显示结果:(出现乱码问题)===》原因:idea使用的是UTF-8 而properties文件一般都是ASCALL

#配置person的值

person.name=大忽悠

person.age=18

person.birth=2002/1/2

person.maps.k1=v1

person.maps.k2=14

person.lists=1,2,3

person.dog.name=dog

person.dog.age=2

在这里插入图片描述

解决方案如下

在这里插入图片描述

结果


在这里插入图片描述


IDEA springboot项目中properties配置文件 {针对将对应GBK改为UTF-8并勾选转为ASCII后仍无效情况} 运行时中文乱码解决

IDEA springboot项目中properties配置文件 {针对将对应GBK改为UTF-8并勾选转为ASCII后仍无效情况} 运行时中文乱码解决


@Value注解和 @ConfigurationProperties的区别


@Value注解使用演示:

@Controller

public class peo

{

/*

  • */

@Value(“${person.name}”)

private String name;

@Value(“#{11*2}”)

private Integer age;

@Value(“true”)

private Boolean boss;

在这里插入图片描述


在这里插入图片描述

在这里插入图片描述

配置文件yml还是properties他们都可以获取到值

如果我们只是需要在业务逻辑中获取一下配置文件中的值,可以使用@Value注解

在这里插入图片描述

如果说我们编写了一个类和配置文件进行映射,我们就直接使用 @ConfigurationProperties


对于是否支持JSR303校验的演示

在这里插入图片描述

在这里插入图片描述

SpringBoot @Vaild注解拦截不生效的问题解决

不要单独引入包,可能引入的包不全导致不生效!

直接引入SpringBoot 的starter

org.springframework.boot

spring-boot-starter-validation

RELEASE

compile

注解@ConfigurationProperties 和 @Value 对比,详细篇

注解@ConfigurationProperties 和 @Value 对比


@ConfigurationProperties(prefix = “person”)默认从全局配置文件中获取值,全局配置文件的名字是固定的application

================================================================================================================================================


@PropertySource加载指定配置文件===>加载类路径下peo.properties,并绑定到对象中


@PropertySource(value={“classpath:peo.properties”})

@Controller

@ConfigurationProperties(prefix = “person”)

public class peo

{

private String name;

private Integer age;

private Boolean boss;

private Date birth;

private Map<String,Object> maps;

private List lists;

private Dog dog;

在这里插入图片描述

要注意Spring Boot配置文件的加载顺序,如果全局配置文件.properties, .yaml和peo.properties中都符合前缀匹配条件,那么先执行全局配置文件


全局配置文件中.properties优先级高于.yaml


全局配置文件都不满足,才会执行peo.properties


在这里插入图片描述


@PropertySource 注解的使用详情看下面这两篇文章


@PropertySource 注解的使用

@PropertySource和@ConfigurationProperties


Spring Boot配置文件的加载顺序详情看下面这篇文章


【小家Spring】一篇文章彻底搞懂Spring Boot配置文件的加载顺序(项目内部配置和外部配置)


@ImportResource:导入Spring的配置文件,让配置文件中的内容生效

========================================================================================================

在这里插入图片描述

spring.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns=“http://www.springframework.org/schema/beans”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=“http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd”>

springBoot单元测试:

@RunWith(SpringRunner.class)

@SpringBootTest

class SpringBootQuickStartOneApplicationTests {

@Autowired

peo people;

@Autowired //注入IOC容器

ApplicationContext ioc;

@Test

void contextLoads()

{

//判断容器中是否由pig

boolean ret = ioc.containsBean(“pig”);

System.out.println(ret);

}

}

如果此时不在配置类上导入我们写的spring的配置文件,那么结果为false,即容器中没有保存对应的Bean

如果写了,如下面这样:

@ImportResource(locations = {“classpath:spring.xml”})

@SpringBootApplication

public class SpringBootQuickStartOneApplication {

public static void main(String[] args) {

SpringApplication.run(SpringBootQuickStartOneApplication.class, args);

}

}

在这里插入图片描述


SpringBoot推荐给容器中添加组件的方式,推荐使用全注解的方式

=================================================================================================

配置类=====Spring配置文件


@Configuration: 指明当前类是一个配置类,替代之前Spring配置文件

@Bean(“此处可以设置id名”):将方法的返回值添加到容器中,容器中这个组件默认的id就是方法名(不是首字母小写)

配置类:

@Configuration//指明当前类是一个配置类,替代之前Spring配置文件

public class MyConfig

{

@Bean(“pig”)//将方法的返回值添加到容器中,容器中这个组件默认的id就是方法名(不是首字母小写)

public pig HelloPig()

{

return new pig();

}

}

单元测试类:

@RunWith(SpringRunner.class)

@SpringBootTest

class SpringBootQuickStartOneApplicationTests {

@Autowired

peo people;

@Autowired //注入IOC容器

ApplicationContext ioc;

@Test

void contextLoads()

{

//判断容器中是否由pig

boolean ret = ioc.containsBean(“HelloPig”);

System.out.println(ret);

}

}

在这里插入图片描述


配置文件中的占位符

========================================================================

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


Propfile多环境支持

============================================================================

在这里插入图片描述


多profile文件


在这里插入图片描述

在这里插入图片描述


在application.properties主配置文件中激活不同环境的配置文件


SpringBoot项目多环境配置(亲测有效)


在application.yml主配置文件中激活不同环境的配置文件


命令行的方式激活=项目打成jar包 ,然后启动dos命令行的方式激活以及使用虚拟机参数方式激活


在这里插入图片描述

在这里插入图片描述


SpringBoot配置Profile多环境支持可以看下面这篇文章


SpringBoot配置Profile多环境支持


springboot多环境(dev、test、prod) 配置详解可以看下面这篇文章


pringboot多环境(dev、test、prod) 配置详解可以看下面这篇文章


配置文件加载位置

=======================================================================

在这里插入图片描述

在这里插入图片描述

优先级高的覆盖优先级低的,可以注意点的是,只是对相同配置项才会产生覆盖作用,不同的话是互补作用,也就是说如果四个地方都配了的话,是会累加起来的。


Spring会从这四个位置全部加载主配置文件===》互补配置


例如:我们在高优先级配置文件中配置了端口号,低优先级配置文件中配置了端口号和项目的访问路径,那么高优先级只会覆盖低优先级的端口号,访问路径还是采用低优先级的

server.port=8081 ===>配置端口号
servlet.context-path=/hello ===>配置项目的访问路径

我们可以通过spring.config.location引用外部配置文件


总结

虽然我个人也经常自嘲,十年之后要去成为外卖专员,但实际上依靠自身的努力,是能够减少三十五岁之后的焦虑的,毕竟好的架构师并不多。

架构师,是我们大部分技术人的职业目标,一名好的架构师来源于机遇(公司)、个人努力(吃得苦、肯钻研)、天分(真的热爱)的三者协作的结果,实践+机遇+努力才能助你成为优秀的架构师。

如果你也想成为一名好的架构师,那或许这份Java成长笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。

image

e9e464e2ebffd94769212d13d.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzUzMTU3MTcz,size_16,color_FFFFFF,t_70)

优先级高的覆盖优先级低的,可以注意点的是,只是对相同配置项才会产生覆盖作用,不同的话是互补作用,也就是说如果四个地方都配了的话,是会累加起来的。


Spring会从这四个位置全部加载主配置文件===》互补配置


例如:我们在高优先级配置文件中配置了端口号,低优先级配置文件中配置了端口号和项目的访问路径,那么高优先级只会覆盖低优先级的端口号,访问路径还是采用低优先级的

server.port=8081 ===>配置端口号
servlet.context-path=/hello ===>配置项目的访问路径

我们可以通过spring.config.location引用外部配置文件


总结

虽然我个人也经常自嘲,十年之后要去成为外卖专员,但实际上依靠自身的努力,是能够减少三十五岁之后的焦虑的,毕竟好的架构师并不多。

架构师,是我们大部分技术人的职业目标,一名好的架构师来源于机遇(公司)、个人努力(吃得苦、肯钻研)、天分(真的热爱)的三者协作的结果,实践+机遇+努力才能助你成为优秀的架构师。

如果你也想成为一名好的架构师,那或许这份Java成长笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。

[外链图片转存中…(img-SiQGTftb-1714460601504)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 29
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值