SpringBoot는 대부분의 수동 구성을 제거하지만 일부 특정 상황에서는 여전히 수동 구성을 수행해야 합니다. SpringBoot는 application.properties 구성 파일을 제공하여 일부 세 번째를 포함하여 특정 생산 상황에 맞게 수정되었습니다. -물론 파티 구성. 거의 모든 구성은 SpringBoot에 의해 자동으로 로드되는 application.peroperties 파일에 기록될 수 있으므로 수동으로 로드하는 수고를 덜 수 있습니다. 그러나 실제로 구성 파일을 사용자 정의하는 경우가 많으므로 이를 수동으로 로드해야 합니다. SpringBoot는 이러한 파일을 자동으로 인식하지 않습니다.
1. 구성 파일 형식
SpringBoot는 yml 파일과 속성 파일의 두 가지 형식을 인식할 수 있습니다. 두 파일 모두 SpringBoot에서 사용할 수 있습니다. 그러나 사용자 정의 구성 파일인 경우에는 속성 형식 파일을 사용하는 것이 가장 좋습니다. 왜냐하면 SpringBoot는 아직 yml 형식 파일을 수동으로 로드하는 기능을 제공하지 않기 때문입니다(여기서는 주석 방법 참조).
SpringBoot가 자동으로 로드하려면 application.properties 구성 파일이 지정된 위치인 src/main/resource 디렉터리에 있어야 합니다. 일반적으로 사용자 정의된 구성 파일도 이 디렉터리에 있습니다.
2. 구성 파일 로드
로드는 파일을 Spring 컨테이너로 읽는 것을 의미합니다. 더 정확하게 말하면 각 구성 항목을 Spring 컨텍스트 컨테이너에 로드하여 즉시 액세스할 수 있다는 의미입니다.
SpringBoot 프로젝트가 시작되면 application.properties 구성 파일이 자동으로 로드됩니다. 내부 관련 설정은 SpringBoot 기본 해당 설정을 자동으로 재정의하며 모든 구성 항목은 Spring 컨테이너에 저장됩니다.
1-공개 구성 파일: application.properties
1 donghao.name=唯一浩哥2 donghao.sex=男3 donghao.age=80
사용자 정의된 xxx.properties 구성 파일은 SpringBoot에 의해 자동으로 로드되지 않으며 수동으로 로드해야 합니다. 여기서 수동 로드는 일반적으로 주석 방법을 나타냅니다. 오늘 우리의 핵심 사항 중 하나인 사용자 정의 속성 파일을 로드하기 위한 주석: @PropertySource("classpath:xxx.properties")가 포함됩니다. 이 주석은 특별히 지정된 위치에 속성 파일을 로드하는 데 사용됩니다. 이전 명령문이 있도록 위치 yml 파일의 주석을 지정합니다.
2-사용자 정의 구성 파일: donghao.properties
1 donghao1.name=动画2 donghao1.sex=女3 donghao1.age=22
其实无论对于哪里的properties文件,当我们需要使用其中配置内容的时候,就在当前类的顶部加注该注解,将该配置文件加载到内存,这些配置文件一次加载即可多次使用。
3、配置项的使用
配置项的使用其实很简单,只要是加载到Spring容器中的配置项都可以直接使用@Value("${key}")的方式来引用,一般将其配置在字段顶部,表示将配置项的值赋值给该字段。
当然更多的情况是将这些配置项与一个JavaBean绑定起来使用,这样绑定一次,我们就可以随时使用。这里涉及到两种情况,一种是将application.properties中的配置与JavaBean绑定,一种是将自定义配置文件中的配置与Javabean绑定。
第一种:applicaiton.properties属性绑定JavaBean
这种情况相对简单(因为application.properties文件会被自动加载,也就是说配置项会被自动加载到内存,到Spring容器之中,省去了手动加载的配置),然后我们在要与属性绑定的JavaBean的类定义顶部加@Component注解和@ConfigurationProperties(prefix="key")注解,前者的目的是为了这个JavaBean可以被SpringBoot项目启动时候被扫描到并加载到Spring容器之中,重点是后者,这个注解一般不是单独使用的,他一般与后面要说的@EnableConfigurationProperties(JavaBean.class)配合使用,但是二者并非使用在同一位置,@ConfigurationProperties(prefix="key")注解加注在JavaBean类定义之上,按字面可以理解为属性配置注解,更直接点的说法就是属性绑定注解,官方解释是:如果想要绑定或者验证一些来源自.properties文件中的额外属性时,你可以在一个标注的@Configuration的类的注有@Bean注解的方法或者一个类之上加注这个注解。我们完全可以将其理解为绑定专用注解。它的作用就是将指定的前缀的配置项的值与JavaBean的字段绑定,这里要注意,为了绑定的成功,一般将字段的名称与配置项键的最后一个键名相同,这样整个键在去掉前缀的情况下就和字段名称一致,以此来进行绑定。
第二种:自定义配置的属性绑定JavaBean
这种情况与之前的基本相同,只是不能自动加载,需要手动加载,在JavaBean之上加上之前介绍的@PropertySource注解进行配置文件加载。还有一点就是将@Component改为@Configuration,为什么这么做呢?
@Configuration注解的底层就是@Component,但是二者意义不同,@Configuration注解侧重配置之意,@Component侧重组件之意,当然配置也是项目组件之一,在这里我们要将配置文件属性与JavaBean绑定,当然更侧重配置之意。
将配置与JavaBean绑定之后,我们就可以通过JavaBean来获取配置的内容,而且JavaBean已经被@Component注解或者@Configuration注解加载到Spring容器,我们可以使用自动注入的方式在其他类中随便使用。
这里要注意一点:当我们在某个类中要使用这个JavaBean时,需要在这个类中指定这个JavaBean的类型,这个指定也要使用注解来制定,正是之前介绍的@EnableConfigurationProperties注解,这个注解与@ConfigurationProperties注解配套使用。官方给出的解释:这个注解是对@ConfigurationProperties的有效支持。标注有@ConfigurationProperties注解的Beans可以被使用标准的方式注册(使用@Bean注解),或者,为了方便起见,直接用使用@EnableConfigurationProperties指定注册。意思是这个注解提供了一种方便直接的注册Bean的方式。
3-绑定JavaBean:Donghao.java
1 package com.donghao.model; 2 3 import org.springframework.boot.context.properties.ConfigurationProperties; 4 import org.springframework.context.annotation.Configuration; 5 import org.springframework.context.annotation.PropertySource; 6 7 @Configuration 8 @PropertySource("classpath:donghao.properties") 9 @ConfigurationProperties(prefix="donghao1")10 public class Donghao {11 private String name;12 private String sex;13 private String age;14 public String getName() {15 return name;16 }17 public void setName(String name) {18 this.name = name;19 }20 public String getSex() {21 return sex;22 }23 public void setSex(String sex) {24 this.sex = sex;25 }26 public String getAge() {27 return age;28 }29 public void setAge(String age) {30 this.age = age;31 }32 }
4-定义控制器:DonghaoController
1 package com.donghao.controller; 2 3 import org.springframework.beans.factory.annotation.Autowired; 4 import org.springframework.beans.factory.annotation.Value; 5 import org.springframework.boot.context.properties.EnableConfigurationProperties; 6 import org.springframework.web.bind.annotation.RequestMapping; 7 import org.springframework.web.bind.annotation.RestController; 8 9 import com.donghao.model.Donghao;10 11 @RestController12 @RequestMapping("/donghao")13 @EnableConfigurationProperties(Donghao.class)14 public class DonghaoController {15 16 @Autowired17 Donghao donghao;18 19 @Value("${donghao.name}")20 private String name;21 22 @Value("${donghao.sex}")23 private String sex;24 25 @Value("${donghao.age}")26 private String age;27 28 29 @RequestMapping("/hello")30 public String hello(){31 return "我的名字叫"+name+",我是"+sex+"生,今年"+age+"岁了!";32 }33 34 @RequestMapping("/ss")35 public String ss(){36 return donghao.getName()+donghao.getSex()+donghao.getAge();37 }38 }
5-定义启动入口类:DonghaoApplication.java
1 package com.donghao; 2 3 import org.springframework.boot.SpringApplication; 4 import org.springframework.boot.autoconfigure.SpringBootApplication; 5 6 @SpringBootApplication 7 public class DonghaoApplication { 8 9 public static void main(String[] args) {10 11 SpringApplication.run(DonghaoApplication.class, args);12 13 }14 15 }
프로그램을 시작한 후 브라우저는 http://localhost:8080/donghao/hello에 액세스하고 결과는 다음과 같습니다.
브라우저는 http://localhost:8080/donghao/ss
에 액세스합니다.
Me 여기서 로딩과 사용은 관련이 없다는 점을 강조하는 것이 중요합니다. 로딩의 목적은 사용이지만 로딩과 사용은 밀접한 관련이 없으므로 로딩 프로세스를 비교해야 합니다. 사용된 프로세스는 서로 다른 주석에 해당하며 각각 고유한 목적과 기능을 가지고 있습니다. 단 하나의 @PropertySource 주석이면 충분합니다. , 사용 주석에 대해 걱정할 필요가 없습니다. 이를 사용해야 하는 경우 다양한 사용 방법을 선택할 수 있습니다. 직접 사용하는 경우 이 주석을 직접 로드할 수 있습니다. Spring 컨테이너에 속성 구성의 값이 지정된 필드에 할당됩니다. 물론 JavaBean을 바인딩하는 방법을 사용할 수도 있습니다.
또 한 가지 주의할 점은 공개 구성 파일 application.properties와 사용자 정의 구성 파일 xxx.properties에서 동일한 구성 항목에 대해 서로 다른 값을 구성하면 안 된다는 점입니다. 공개 구성 파일의 우선순위가 가장 높고 구성 파일에 내용을 정의하면 공용 구성 파일의 특정 구성이 시작 시 Spring 컨테이너에 로드되고 동일한 이름의 구성 항목이 로드됩니다. 다른 사용자 정의 구성 파일에는 두 가지 값이 서로 다르지만 시스템은 두 가지의 우선 순위를 확인하여 더 높은 사람이 남고 더 낮은 사람이 이동하며 최종적으로 사용자 정의 구성 파일의 값이 유효하지 않습니다.
위 내용은 속성 구성에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!