千家信息网

SpringBoot怎么配置文件给实体注入值

发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,这篇文章主要介绍了SpringBoot怎么配置文件给实体注入值的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot怎么配置文件给实体注入值文章都会有所收获,
千家信息网最后更新 2025年01月21日SpringBoot怎么配置文件给实体注入值

这篇文章主要介绍了SpringBoot怎么配置文件给实体注入值的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot怎么配置文件给实体注入值文章都会有所收获,下面我们一起来看看吧。

配置文件给实体注入值

SpringBoot 默认的全局配置文件有两个 application.properties 和application.yml

properties用法

# 例如修改端口号 直接赋值server.port=8888

yaml用法

# 例如修改端口号server:    port: 8888
  • YML中赋值是以键值对的形式,且利用缩进表示层级关系,同一级缩进必须一致

  • 大小写敏感,支持松散写法,且冒号后面必须有一个空格

通过配置文件给实体类注入属性

// 实体类@Component // 把实体类放入到spring容器中@ConfigurationProperties(prefix = "student") // 识别配置文件public class Student {    private String name;    private int age;    private boolean sex;    private Date birthday;    private Map location;    private String[] hobbies;    private List skills;    private Pet pet;        // .... set/get/toString}
# yml 配置文件student:         name: zs        age: 23        sex: true        birthday: 2020/10/1        location: {province: 湖北,city: 武汉, zone: 洪山}        hobbies: [足球, 篮球]        skills: [编程, 金融]        pet:                 nickName: wc                strain: hsq

在这里注意不同数据类型的写法,简单的数据直接赋值

# map类型和对象类型 的两种写法# 1.行内写法location: {province: 湖北,city: 武汉, zone: 洪山}pet: {nickName: wc, strain: hsq}# 2.分行写location:        province: 湖北        city: 武汉        zone: 洪山pet:         nickName: wc        strain: hsq
# 数组、list、set# 1、行内写法, 其中中括号还可以省略hobbies: [足球, 篮球]skills: [编程, 金融]# 2、分行写hobbies:        - 足球        - 篮球skills:         - 编程        - 金融

到 SpringBoot 测试文件中测试输出

    @Autowired    Student student;    @Test    void contextLoads() {        System.out.println(student);    }

结果

Student{name='zs', age=23, sex=true, birthday=Thu Oct 01 00:00:00 CST 2020, location={province=湖北, city=武汉, zone=洪山}, hobbies=[足球,篮球], skills=[编程, 金融], pet=Pet{nickName='wc', strain='hsq'}}

上面yml中注意

# 如果对字符串加单引号,双引号会有什么区别location: {province: "湖北",city: '武汉', zone: 洪山}# 如果引号中只是字符串时没什么区别location: {province: "湖\n北",city: '武\n汉', zone: 洪\n山}# 此时双引号中的转义字符会被识别,会换行,单引号和不加引号会原样输出

也可以使用properties注入

student.name=lsstudent.age=24...

其中properties文件和yml文件中的值可以互相引用。两个配置文件可以互补,properties文件优先级高于yml

另外如果要注入的值不在这两个默认配置文件中,这是需要使用@PropertySource注解,遗憾的是该注解只支持properties文件,不支持yml文件

@PropertySource(value = {"classpath:conf.properties"})public class Student {    ...

配置文件值注入方式

1.1 从全局配置文件中读取配置到实体类 (@ConfigurationProperties)

配置文件 (application.yml)(写在application.properties也可以,格式变一下即可)

person:  lastName: Mary  age: 16  birthDate: 2004/01/01  maps: {one:1,two:2,three:3}  lists:    - 1    - 2    - 3  pet:    name: wangcai    age: 3

实体类(javaBean):

/** * 将配置文件中配置的每一个属性的值,映射到这个组件中 * * @Component: *     只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能; * * @ConfigurationProperties: *     告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定(默认配置文件为application.properties与       *     application.yml); * * prefix = "person": *       配置文件中哪个下面的所有属性进行一一映射 */@Component@ConfigurationProperties(prefix = "person")public class Person {    private String lastName;    private Integer age;    private Date birthDate;    private Map maps;    private List lists;    private Pet pet;    //省略get,set方法    @Override    public String toString() {        String mapValue = "";                if(this.maps!=null){            for(String key:this.maps.keySet()){                Object value = this.maps.get(key);                mapValue += key+"\t"+value+"\t";            }        }        return "lastName:"+this.lastName+                "\nage:"+this.age+                "\nbirthDate:"+this.birthDate+                "\nmaps:"+mapValue+                "\nlists:"+this.lists+                this.pet;    }}
public class Pet {    private String name;    private Integer age;    //省略get,set方法        @Override    public String toString() {        return "\nPet:\n\tPet name:"+this.name+                "\n\tPet age:"+this.age+"\n";    }}

我们可以导入配置文件处理器,以后编写配置就有提示了(pom.xml)

    org.springframework.boot    spring-boot-configuration-processor    true

测试

@SpringBootTestclass DemoApplicationTests {    @Autowired    Person person;    @Test    void contextLoads() {        System.out.println(person.toString());    }}

1.2 全局配置文件注入值(@Value)

@Value 其实是Spring中的注解,其功能使用xml文件描述是这样的:

       

其中property表示的是Person类中的各项属性,name用于指定具体属性,value用于指定值。

value的值主要有3种:

  • 字面量,也就是数字(1,2…)、字符串(abc)、布尔变量(true、false)等常量

  • ${key},从环境变量、配置文件中获取值

  • #{SpEL}, Spring的表达式语言,可以执行一些计算,调用一些函数

@Componentpublic class Person {    @Value("${person.last-name}")  //@Value("#{'Lily'.toUpperCase()}")    private String lastName;    @Value("#{11*2}")    private Integer age;    private Date birthDate;    private Map maps;    private List lists;    private Pet pet;        //省略get,set和toString    }

1.3 从指定文件读取并配置实体类(@PropertySource+@ConfigurationProperties)

在 resources 目录下创建 person.properties

person.lastName = Lilyperson.age = 20person.birthDate = 2000/01/01person.maps.one = 1person.maps.two = 2person.lists = a,b,chperson.pet.name = wangcaiperson.pet.age = 3

更改 Person 类中的注解

@Component@PropertySource(value = {"classpath:person.properties"})@ConfigurationProperties(prefix = "person")public class Person {    //...省略属性,get,set,toString}

要注意的是,PropertySource 只支持properties文件,不支持yml文件读取。

1.4 从指定文件读取并注入值(@PropertySource+@Value)

创建配置文件

更改注释

@Component@PropertySource(value = {"classpath:person.properties"})public class Person {        @Value("${person.last-name}")    private String lastName;        //...省略属性,get,set,toString}

关于"SpringBoot怎么配置文件给实体注入值"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"SpringBoot怎么配置文件给实体注入值"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

文件 配置 实体 属性 引号 写法 武汉 洪山 湖北 支持 字符 注解 篮球 足球 金融 编程 两个 全局 字符串 容器 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发培训大纲 怎么从收银系统导出数据库 赛季服哪个服务器预约角色最多 服务器可以用3306吗 网络安全等级三级保护 defcon网络安全盛会 亚马逊的云服务器的作用是什么 黄埔高端网络安全运维 网络安全安全培训计划及内容 数据库及表的建立 数据库收缩以后导致数据库打不开 网络安全法律法规形成过程 网络安全手抄报难度一点 xp软件开发的优缺点 在线平台网络安全管理制度 软件开发会议内容 数据库及软件技术 服务器数据存储排行 搞软件开发的上班时间 郑州网络安全大会 删除或锁定数据库测试用户 云计算专业和数据库专业哪个好 广元市智信软件开发有限公司 合肥做软件开发的公司 澳门网络安全中心统一体系 河南服务器机柜厂家供应云主机 网络安全手抄报难度一点 软件开发中最难的部分是什么 e会计怎么改账套初始数据库 网络安全测漏师
0