访问 配置文件 (分为自定义的和application的)

注意:当application.properties与application.yml两个文件同时存在时,当属性名相同时application.properties中的属性会 覆盖 application.yml中的属性。

一、yml区别

1.1 自定义的yml或者properties

@Component
@PropertySource("classpath:config/my.properties")
public class MyTestConfig {
    @Value("${my.test}")
    public String testss;
}
@GetMapping("/test123")
    public void test123() throws IOException {
        String testss = myTestConfig.testss;
        System.out.println("===="+testss);

    }

结果:====123456

1.2 原始的application.yml

# 配置yml层级树键值文件要注意的两个问题
# 1. 兄弟节点必须对齐
# 2. 如果写值,冒号后面必有一个空格
# 覆盖自动配置类的默认属性
server:
  port: 9002
  servlet:
    contextPath: /
 
# 定义自已项目中需要的属性
# 标量类型(8基本+string)
my:            //这儿是自己控制器类通过注解@ConfigurationProperties(prefix = "my")
 host: 127.0.0.1
 port: 3306
 
 # 对象类型
 user:
   name: 小华华
   age: 18
   sex: 男
 
 # 数组类型
 address:
   - 天河九巷
   - 天河八巷
   - 天河十巷
 
 # 对象数组类型
 users:
   - name: 李小三
     age: 18
     sex: 女
   - name: 李小一
     age: 20
     sex: 男

二、方法

方式一:@ConfigurationProperties + set方法 : java语言中的全部数据类型

  1. java类的定义属性名必须与配置文件中的属性一致
  2. 所有的属性必须提供setter方法
package cn.itcast.controller;
 
import cn.itcast.pojo.User;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.List;
 
/** 第一种方式: 注入属性 */
@RestController   //-----------------控制器
@ConfigurationProperties(prefix = "my")
public class PropController1 {
 
    private String host;
    private int port;
    private User user;   //pojo类,那就得自定义一个user类了,属性名要与配文一致
    private String[] address;
    private List<User> users;
 
    @GetMapping("/test1")
    public String test1(){
        System.out.println("======test1=======");
        System.out.println("host = " + host);
        System.out.println("port = " + port);
        System.out.println("user = " + user);
        System.out.println("address = " + Arrays.toString(address));
        System.out.println("users = " + users);
        return "test1方法,访问成功!";
    }
 
    /** 注入的属性必须提供setter方法 */
    public void setHost(String host) {
        this.host = host;
    }
    public void setPort(int port) {
        this.port = port;
    }
    public void setUser(User user) {
        this.user = user;
    }
    public void setAddress(String[] address) {
        this.address = address;
    }
    public void setUsers(List<User> users) {
        this.users = users;
    }
}

package cn.itcast.pojo;
 
public class User {
    private String name;
    private int age;
    private String sex;
    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 getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }
}


方式二:@Value: 基本数据类型和String

@Value注解只能注入基本数据类型与String
@Value注解注入的属性不需要setter方法

package cn.itcast.controller;
 
import cn.itcast.pojo.User;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
 
import java.util.Arrays;
import java.util.List;
 
/** 第二种方式: 注入属性 */
@RestController
@ConfigurationProperties(prefix = "my")
public class PropController2 {
 
    @Value("${my.host}")
    private String host;
    @Value("${my.port}")
    private int port;
    private User user;
    private String[] address;
    private List<User> users;
     
    @GetMapping("/test2")
    public String test2(){
        System.out.println("======test2=======");
        System.out.println("host = " + host);
        System.out.println("port = " + port);
        System.out.println("user = " + user);
        System.out.println("address = " + Arrays.toString(address));
        System.out.println("users = " + users);
        return "test2方法,访问成功!";
    }
 
    public void setUser(User user) {
        this.user = user;
    }
    public void setAddress(String[] address) {
        this.address = address;
    }
    public void setUsers(List<User> users) {
        this.users = users;
    }
}

方式三:创建bean对象

将需要注入的属性定义成一个属性类,创建bean对象。这样做属性类就可以重复使用。

@ConfigurationProperties: 配置属性,变成属性类了

@Component: 创建普通bean对象(泛指组件,当组件不好归类的时候,可以使用这个注解)

package cn.itcast.configuration;
 
import cn.itcast.pojo.User;
import org.springframework.boot.context.properties.ConfigurationProperties;
import java.util.List;
 
@ConfigurationProperties(prefix = "my")
@Component
public class UserProperties {
 
    private String host;
    private int port;
    private User user;
    private String[] address;
    private List<User> users;
 
    public String getHost() {
        return host;
    }
    public void setHost(String host) {
        this.host = host;
    }
    public int getPort() {
        return port;
    }
 
    public void setPort(int port) {
        this.port = port;
    }
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
    public String[] getAddress() {
        return address;
    }
    public void setAddress(String[] address) {
        this.address = address;
    }
    public List<User> getUsers() {
        return users;
    }
    public void setUsers(List<User> users) {
        this.users = users;
    }
}



启用属性类来用配置的属性

package cn.itcast.controller;
 
import cn.itcast.configuration.UserProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
 
/** 第三种方式: 注入属性 */
@RestController
public class PropController3 {
 
    @Autowired(required = false)
    private UserProperties userProperties;
 
    @GetMapping("/test3")
    public String test3(){
        System.out.println("======test3======");
        System.out.println(userProperties.getHost());
        System.out.println(userProperties.getPort());
        System.out.println(userProperties.getUser());
        System.out.println(userProperties.getAddress());
        System.out.println(userProperties.getUsers());
        return "test3方法,访问成功!";
    }
}

三、直接使用整个配置文件,不设置前缀

第一步,定义一个配置文件

在这里插入图片描述

# 存储一些配置

qhl.GetDataList.Device.url= https://xxx

第二步:读取配置文件

package com.zykj.newsell.config;

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.annotation.PropertySources;
import org.springframework.stereotype.Component;

/**
 * 自定义配置properties的属性类
 *
 * @author lc
 * @version 1.0
 * @date 2022/4/13 15:39
 */
@Data
@Component
@PropertySource("classpath:configInfo.properties")
public class ConfigInfo {
  
    @Value("${qhl.GetDataList.Device.url}")
    public String deviceUrl;

 




}

第三步:使用

package com.zykj.newsell.controller;

import com.zykj.newsell.common.response.ResultInfo;
import com.zykj.newsell.config.ConfigInfo;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 第三方接口
 *
 * @author lc
 * @version 1.0
 * @date 2022/4/13 15:26
 */
@Api(value = "第三方接口")
@RestController
@RequestMapping("/three/qhl")
public class ThreeController {
    @Autowired
    private ConfigInfo configInfo;

    /**
     *
     *
     * @return
     */
    @PostMapping("/getDeviceList")
    public ResultInfo getDeviceList() {
        String dashboardUrl = configInfo.getDashboardUrl();
        System.out.println(dashboardUrl);
        return ResultInfo.ok();
    }

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LC超人在良家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值