SpringBoot|SpringBoot 属性配置中获取值的方式
目录
- SpringBoot 属性配置中获取值
- 首先,定义一个实体类去写属性
- 测试和生产区分
- SpringBoot 获取值和配置文件
- 1、@ConfigurationProperties(prefix = "student")方式
- 2、@Value方式
- 3、@PropertySource
- 4、@ImportResource和@Bean
SpringBoot 属性配置中获取值 在配置文件中定义属性的值,然后再获取,在这里做一个总结,首先,在application.yml文件中定义端口和属性的值,当然,在.application.properties文件中也能定义,只是格式不同而已:
appliaction.yml:
server: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 = "https://www.it610.com/gril",method = RequestMethod.GET)public String HelloGril(){return cubSize + age; }}
运行结果:
文章图片
如果当属性很多之后,要写很多的@Value 的注解嘛???答案当然是No,有简便的写法:
application.yml 文件
server:port: 8081gril:name: lisaheight: 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 setName(String name) {this.name = name; }public String getHeight() {return height; }public void setHeight(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 {@Autowiredprivate GrilProperties grilProperties; @RequestMapping("/grilPerproties")public String grilPerproties(){return grilProperties.getName()+grilProperties.getHeight(); }}
运行结果:
文章图片
这样就不会需要去写太多的@Value注解了。
还有中形式,就是在配置文件中也可以有这种情况出现:
server:port: 8081cubSize: Bage: 18context: "cubSize:${cubSize},age:${age}"
这种情况证明获取的属性值呢?
在controller中编码:
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("${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
决定是用测试环境还是生产环境。
SpringBoot 获取值和配置文件 @ConfigurationProperties、@Value、@PropertySource、@ImportResource和@Bean
1、@ConfigurationProperties(prefix = "student")方式
(1)定义两个实体类,其中student实体类的属性包括Course类:
@Data@Component@ConfigurationProperties(prefix = "student")//告诉springboot将本类中的所有属性和配置文件的相关配置进行绑定public class Student {//prefix:配置文件中哪一个名称下面的属性进行一一映射private String sname; private int age; private Map maps; private List
(2)创建yaml配置文件:
student:sname: zhaiage: 12maps: {k1: 12,k2: 13}list:- zhai- zhangcourse:courseno: 202007coursename: javaweb
(3)创建properties文件:
#配置studentstudent.age=12student.sname=zhaistudent.maps.k1=1student.maps.k2=2student.list=a,b,cstudent.course.courseno=202007student.course.coursename=java
(4)测试类:
//可以在测试期间很方便地类似编码一样进行自动注入等容器的功能@SpringBootTestclass Springboot03ApplicationTests {@AutowiredStudent student; @Testvoid contextLoads() {System.out.println(student); }}
(5)需要导入的依赖:配置文件处理器,配置文件进行绑定会有提示
org.springframework.boot spring-boot-configuration-processor2.2.1.RELEASE
文章图片
2、@Value方式
(1)书写配置文件
#配置studentstudent.sname=zhaistudent.age=12student.maps.k1=1student.maps.k2=2student.list=a,b,cstudent.course.courseno=202007student.course.coursename=java
(2)获取值:
@Data@Componentpublic class Student {@Value("${student.sname}")private String sname; @Value("#{2*9}")private int age; private Map maps; private List
(3)@ConfigurationProperties(prefix = "")方式与@Value方式的比较
- @ConfigurationProperties(prefix = "")方式支持批量注入配置文件的属性,@Value方式需要一个个指定
- @ConfigurationProperties(prefix = "")方式支持松散绑定,@Value方式不支持,
@Value方式支持JSR303校验
@Data@Component@Validatedpublic class Student {@NonNullprivate String sname; private int age; private Map maps; private List
@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.course.courseno=202007student.course.coursename=java
3、@PropertySource
(1)配置文件(student.properties)
#配置studentstudent.sname=zhaistudent.age=12student.maps.k1=1student.maps.k2=2student.list=a,b,cstudent.course.courseno=202007student.course.coursename=java
(2)实体类获取值
@Data@Component@PropertySource(value = https://www.it610.com/article/{"classpath:student.properties"})public class Student {private String sname; private int age; private Map maps; private List
@PropertySource是从指定路径下获取数据,默认是从application.properties下获取数据
4、@ImportResource和@Bean
(1)指定spring的配置文件
@SpringBootApplication(scanBasePackages = "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 {@Beanpublic HelloService helloService(){return new HellService(); }}
@Configuration说明这是一个配置类,就是在替代之前的配置文件
@Bean标记在方法上,该方式将方法的返回值添加到容器中,容器中组件的ID默认是方法名
总结:
(1)@ConfigurationProperties与@Value
文章图片
【SpringBoot|SpringBoot 属性配置中获取值的方式】以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
推荐阅读
- 第6.2章(设置属性)
- vue-cli|vue-cli 3.x vue.config.js 配置
- Activiti(一)SpringBoot2集成Activiti6
- 爱琐搭配(喜欢复古、冷淡,像这种双环设计的气质耳环)
- SpringBoot调用公共模块的自定义注解失效的解决
- opencv|opencv C++模板匹配的简单实现
- 解决SpringBoot引用别的模块无法注入的问题
- 【亲测好用】高逼格配色网站推荐
- 从战略性的角度可以配置股票
- 世界之大,包罗万象--|世界之大,包罗万象-- 读《我不过低配的人生》