在配置文件中定义属性的值,然后再获取,在这里做一个总结,首先,在application.yml文件中定义端口和属性的值,当然,在.application.properties文件中也能定义,只是格式不同而已:
appliaction.yml:
rver: port: 8081cubsize: bage: 18
然后再定义一个controller,用@value这个注解来获取到值:
package com.dist.tr.controller;import com.dist.tr.entity.grilproperties;import org.springframework.beans.factory.annotation.autowired;import org.springframework.beans.factory.annotation.value;import org.springframework.web.bind.annotation.requestmapping;import org.springframework.web.bind.annotation.requestmethod;import org.springframework.web.bind.annotation.restcontroller;@restcontroller@requestmappingpublic class beautifulgirlcontrller { @value("${cubsize}") private string cubsize; @value("${age}") private integer age; @requestmapping(value = "/gril",method = requestmethod.get) public string hellogril(){ return cubsize + age; }}
运行结果:
如果当属性很多之后,要写很多的@value 的注解嘛???答案当然是no,有简便的写法:
application.yml 文件
rver: port: 8081gril: name: lisa height: 165
grilproperties实体:
注意我们用到了这个注解:@configurationproperties(prefix = “gril”)
package com.dist.tr.entity;import org.springframework.boot.context.properties.configurationproperties;import org.springframework.stereotype.component;@component@configurationproperties(prefix = "gril")public class grilproperties { private string name; private string height; public string getname() { return name; } public void tname(string name) { this.name = name; } public string getheight() { return height; } public void theight(string height) { this.height = height; }}
在controller 中的写法:
首先用注解@autowired 注入这个实体,如果不在实体中加@component这个注解,在idea中发现会有红线出现。
package com.dist.tr.controller;import com.dist.tr.entity.grilproperties;import org.springframework.beans.factory.annotation.autowired;import org.springframework.beans.factory.annotation.value;import org.springframework.web.bind.annotation.requestmapping;import org.springframework.web.bind.annotation.requestmethod;import org.springframework.web.bind.annotation.restcontroller;@restcontroller@requestmappingpublic class beautifulgirlcontrller { @autowired private grilproperties grilproperties; @requestmapping("/grilperproties") public string grilperproties(){ return grilproperties.getname()+grilproperties.getheight(); }}
运行结果:
这样就不会需要去写太多的@value注解了。
还有中形式,就是在配置文件中也可以有这种情况出现:
rver: port: 8081cubsize: bage: 18context: "cubsize:${cubsize},age:${age}"
这种情况证明获取的属性值呢?
在controller中编码:
p阅兵式观后感300字ackage com.dist.tr.controller;import com.dist.tr.entity.grilproperties;import org.springframework.beans.factory.annotation.autowired;import org.springframework.beans.factory.annotation.value;import org.springframework.web.bind.annotation.requestmapping;import org.springframework.web.bind.annotation.requestmethod;import org.springframework.web.bind.annotation.restcontroller;@restcontroller@requestmappingpublic class beautifulgirlcontrller { @value("${context}") private string context; @requestmapping("/grilsize") public string girlcubsize(){ return context ; }}
运行结果:
当在项目开发的时候,如果区分测试和生产环境,那么就得区分开application.yml 文件:
新建application-dev.yml 文件和application-prod.yml文件:
然后在使用测试或者是生产的时候,application.yml 文件中这样写:
spring: profiles: active: prod
决定是用测试环境还是生产环境。
@configurationproperties、@value、@propertysource、@importresource和@bean
(1)定义两个实体类,其中student实体类的属性包括cour类:
@data@component@configurationproperties(prefix = "student")//告诉springboot将本类中的所有属性和配置文件的相关配置进行绑定public class student { //prefix:配置文件中哪一个名称下面的属性进行一一映射 private string sname; private int age; private map<string,object> maps; private list<object> list; private cour cour;}@datapublic class cour { private string courno; private string courname;}
(2)创建yaml配置文件:
student: sname: zhai age: 12 maps: {k1: 12,k2: 13} list: - zhai - zhang cour: courno: 202007 courname: javaweb
(3)创建properties文件:
#配置studentstudent.age=12student.sname=zhaistudent.maps.k1=1student.maps.k2=2student.list=a,b,cstudent.cour.courno=202007student.cour.courname=java
(4)测试类:
//可以在测试期间很方便地类似编码一样进行自动注入等容器的功能@springboottestclass springboot03applicationtests { @autowired student student; @test void contextloads() { system.out.println(student); }}
(5)需要导入的依赖:配置文件处理器,配置文件进行绑定会有提示
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-configuration-processor</artifactid> <version>2.2.1.relea</version> </dependency>
(1)书写配置文件
#配置studentstudent.sname=zhaistudent.age=12student.maps.k1=1student.maps.k2=2student.list=a,b,cs如何提高睡眠质量tudent.cour.courno=202007student.cour.courname=java
(2)获取值:
@data@componentpublic class student { @value("${student.sname}") private string sname; @value("#{2*9}") private int age; private map<string,object> maps; private list<object> list; private cour cour;}
(3)@configurationproperties(prefix = “”)方式与@value方式的比较
@configurationproperties(prefix = “”)方式支持批量注入配置文件的属性,@value方式需要一个个指定@configurationproperties(prefix = “”)方式支持松散绑定,@value方式不支持,yml中写的last-name,这个和lastname是一样的,后面跟着的字母默认是大写的。这就是松散绑定
@value方式支持jsr303校验
@data@component@validatedpublic class student { @nonnull private string sname; private int age; private map<string,object> maps; private list<object> list; private cour cour;}
@value方式支持spel
如果我们只是在某一个业务逻辑中需要获取配置文件的某一项值,可以使用@value,如果是一个javabean来和配置文件进行映射,则要使用@configurationproperties(prefix = “”)方式
@restcontrollerpublic class hellocontroller { @value("${student.sname}") private string sname; @requestmapping("/hello") public string hello(){ return "hello"+sname; }}
配置文件:
#配置studentstudent.sname=zhaistudent.age=12student.maps.k1=1student.maps.k2=2student.list=a,b,cstudent.cour.courno=202007student.cour.courname=java
(1)配置文件(student.properties)
#配置studentstudent.sname=zhaistudent.age=12student.maps.k1=1student.maps.k2=2student.list=a,b,cstudent.cour.courno=202007student.cour.courname=java
(2)实体类获取值
@data@component@propertysource(value = {"classpath:student.properties"})public class student { private string sname; private int age; private map<string,object> maps; privat小康生活e list<object> list; private cour cour;}
@propertysource是从指定路径下获取数据,默认是从application.properties下获取数据
(1)gentle是什么意思指定spring的配置文件
@springbootapplication(scanbapackages = "com")@importresource(locations = {"classpath:beans.xml"})public class springboot02application { public static void main(string[] args) { springapplication.run(springboot02application.class, args); }}
(2)书写spring的配置文件:beans.xml
(3)书写如下配置,可以省略配置文件的书写,用注解来代替
@configurationpublic class myappconfig { @bean public hellorvice hellorvice(){ return new hellrvice(); }}
@configuration说明这是一个配置类,就是在替代之前的配置文件
@bean标记在方法上,该方式将方法的返回值添加到容器中,容器中组件的id默认是小组口号霸气押韵方法名
总结:
(1)@configurationproperties与@value
以上为个人经验,希望能给大家一个参考,也希望大家多多支持www.887551.com。
本文发布于:2023-04-05 00:28:55,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/ae06fd1ec15a9d1ce2d215bf6b8fac40.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:SpringBoot 属性配置中获取值的方式.doc
本文 PDF 下载地址:SpringBoot 属性配置中获取值的方式.pdf
留言与评论(共有 0 条评论) |