Springboot的第二天

Springboot的配置

SpringBoot使用一个全局的配置文件,配置文件名是固定的;

在这里插入图片描述

分别是application.properties和application.yml
我们同样可以在Springboot的配置文件中配置端口号配置虚拟路径以及字面量数据,对象,集合,数组等

application.properties文件中配置

server.port=8081
person.last-name=张三
person.age=12
person.birth=2019/12/30
person.boss=false
person.lists=a,b,c
person.maps.k1=value1
person.maps.k2=value2
person.dog.name=大黄
person.dog.age=1

application.yml文件中的配置

在这里插入图片描述

1.YAML的基本语法

k:(空格)v:表示一对键值对(空格必须有);
以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的,属性和值敏感大小写(参考上图);

2.值的写法

1.字面量普通的值(字符串,数字,布尔值):字面量直接写,格式: k: v:,
字符串默认不用加上单引号或者双引号;
“”:双引号;会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
name: “zhangsan \n lisi”:输出;zhangsan 换行 lisi
‘’:单引号;不会转义特殊字符,特殊字符终只是一个普通的字符串数据
name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi
2.对象
k: v:在下一行来写对象的属性和值的关系;注意缩进
对象还是k: v的方式

3.在springboot中,如何将配置文件中的属性注入到bean中

1.导入配置文件处理器(编写之后会有提示,非常方便)

<!--配置文件处理器-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

2.分别提供实体类 Person Dog

public class Person {
    private String lastName;
    private Integer age;
    private Boolean boss;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
//提供 Get  Set方法   toString方法
}
public class Dog {
    private String name;
    private Integer age;
//提供 Get  Set方法   toString方法
}

3.在aplication.yml中为属性赋值

person:
  lastName: Oscar
  age: 19
  boss: false
  birth: 2019/10/10
  maps: {k1: v1,k2: v2}
  lists:
    - eric
    - kobe
  dog:
    name: 大黄
    age: 2

4.在注入的Person的类上面添加注解

@Component  //只有将这个配置在spring容器中,才能使用@ConfigurationProperties的功能
@ConfigurationProperties(prefix = "person")// 告诉springboot 将当前类的所有属性和配置文件中的相关信息进行绑定
public class Person {
·······
}

5.进行测试

    @Autowired
    private Person person;
    @RequestMapping("person")
    public Person helloSpringboot(){
        System.out.println(person);
        return person;
    }

测试结果

{"id":1,"lastName":"张三","boss":false,"birth":"2019-12-29T16:00:00.000+0000","map":{"k1":"v1","k2":"v2"},"lists":["a","b","c"],"dog":{"id":1,"name":"大黄","age":1}}

4.常用的注解有哪些?

  1. (1)@value 和@ConfigurationProperties

  2. (2)@PropertySource

  3. (3)@ImportResource

(1)@Value获取值和@ConfigurationProperties

两者都是用来为类中属性注入值,区别在于

在这里插入图片描述

两者最大的区别在于:@ConfigurationProperties支持数据校验,而@Value则不支持

在这里插入图片描述

在application.yml文件中 email的值只能是邮箱类型,否则启动报错。

在这里插入图片描述

小结:当我们只需要获取配置文件中某一个属性或对象的值,使用@value最简单,当需要批量获取数据时,比如:编写了一个JavaBean来和配置文件进行映射,我们就直接使用@configurationProperties

----------------------------------------我是分割线---------------------------------------------

(2)@PropertySource(获取局部的配置文件)

在前面的配置中,使用@ConfigurationProperties注解可以获取配置文件中的属性值。但是@ConfigurationProperties读取的配置文件是全局的,也就是说这个注解只能加载全局的配置文件,
但是全局配置文件一般定义的都是有关spring配置的信息。如果我们需要定义一些与spring配置无关的信息,那么该如何呢?
我们可以定义局部的配置文件,然后使用@PropertySource注解进行获取。具体步骤:

(1)定义emp.properties配置文件

在这里插入图片描述

(2)在yml文件中为属性赋值

emp.empName=kobe
emp.age=19
emp.email=risswen@sina.com
emp.isMarried=true

(3)@PropertySource 引入局部的properties配置文件
在这里插入图片描述

-----------------------------------------我也是分割线------------------------------------------

(3)@ImportResource用来识别XML配置文件,放在启动类上面,用法如下:

@SpringBootApplication
@ImportResource(locations = {"classpath:bean.xml"})//加载类路径下面的配置文件
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class,args);
    }
}

定义一个UserSercice方法,使用xml配置文件的方式管理UserService类。

public class UserService {
    public void test(){
        System.out.println("这是UserService里面的方法");
    }
}

定义bean.xml配置文件,管理bean

<bean id="userService" class="com.oracle.service.UserService"></bean>

测试

@RestController
public class controller {
    @Autowired
    ApplicationContext applicationContext;
    @RequestMapping("/hello")
    public String hello(){
        UserService userService = (UserService) applicationContext.getBean("userService");
        userService.test();
        return "这是我的第一个springboot程序";
    }
}

在springboot中,我们一般不用xml的方式去管理bean,因为springboot默认是不识别xml文件的,所以使用Java配置类的方式来管理bean
1.创建一个配置类
2.使用@configuration注解修饰这个类
3.在配置类中定义一个方法,管理Bean,这个方法使用@Bean注解修饰
4.方法的返回值是被管理的bean的类型,方法名就是bean的id

定义OrderService

public class OrderService {
    public void test(){
        System.out.println("这是OrderService里面的方法");
    }
}

定义配置类

package com.oracle.config;
import com.oracle.service.OrderService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration// 指明当前类就是一个配置类,用来替代之前的配置文件<bean class=""></bean>
public class MyAppConfig {
    @Bean //将方法的返回值添加到spring容器中,组件的默认id就是当前方法名
    public OrderService orderService(){
        return new OrderService();
    }
}

测试调用

@RestController
public class controller {
    @Autowired
    ApplicationContext applicationContext;

    @RequestMapping("/hello")
    public String hello(){
        OrderService userService = (OrderService) applicationContext.getBean("orderService");
        userService.test();
        return "这是我的第一个springboot程序";
    }
}

总结:写完这个我有点晕,本来还信心满满的,准备把自己学到的知识和心得分享出来,没想到,写了几条就晕了,看来下回写之前要把思路捋清楚,再下笔。。。。。。。算了,我的脑子告诉我,它想休息一下,有错误的地方,请批评指正!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值