스프링 구름 프로파일 속성 값을 읽어
1, 콩
@Data 공용 클래스 LocalFileConfig { / ** *文件存储地址 * / 개인 문자열 fileServerPath; 개인 문자열 fileDownloadUrl; 개인 문자열 defaultCutSize; 개인 문자열 fileValidateType; 개인 롱 이는 파일 크기; }
구성
@Configuration @PropertySource (값 = { "클래스 경로 : 속성 / oss.properties"}) 공용 클래스 LocalFileConfigConfiguration { @Value ( "$ {file.config.server.path}") 개인 문자열 fileServerPath; @Value ( "$ {file.config.download.url}") 개인 문자열 fileDownloadUrl; @Value ( "$ {file.config.default.cutSize}") 개인 문자열 fileDefaultCutSize; @Value ( "$ {file.config.validate.type}") 개인 문자열 fileValidateType; @Value ( "$ {file.config.validate.fileSize}") 개인 롱 이는 파일 크기; localFileConfig.setFileServerPath (fileServerPath); localFileConfig.setFileDownloadUrl (fileDownloadUrl); localFileConfig.setFileValidateType (fileValidateType); localFileConfig.setDefaultCutSize (fileDefaultCutSize); localFileConfig.setFileSize (이는 파일 크기); localFileConfig를 반환; } }
2,
@NoArgsConstructor
@AllArgsConstructor
@Component
@ConfigurationProperties (접두사 = "파일")
공용 클래스 FileStorageProperties {
개인 문자열 uploaddir;
공공 문자열 getUploadDir () {
반환 uploaddir;
}
공공 무효 setUploadDir (문자열 uploaddir) {
this.uploadDir = uploaddir;
}
}
온라인 두 번째 방법을 찾아, 캐스케이드 응용
링크 : https://www.cnblogs.com/lihaoyang/p/10223339.html
구성 파일 값 @CONFIGURATIONPROPERTIES를 얻을 수 SPRINGBOOT
SpringBoot 프로파일 유무 YML와 속성은 일부 기사가 더 나은, YML 데이터 중심의 말을보고, 두 가지입니다. 개인적으로 나는 그래서 여기에 특성 형식으로 예입니다, 더 나은 특성을 가진 것을 느낀다.
우리 모두는 비교, 그러한 xxx.domain = www.xxx.com로 구성된 특정 도메인 이름과 같은 값을 구성하는 경우 @Value 노트 그래서 직접 코드에서 @Value를 익숙해, 구성 프로파일에서 읽을 수 있습니다 알고 편리합니다.
이 같은 코드 관련 구성과 관련 구성의 그룹 인 경우 인증 코드 길이가 구성되어 있는지 확인하고 싶은 경우에, 번호, 전화 번호, 이메일 주소 확인 코드 검증 사진이있다. springboot 구성 등의 여부,
서면으로 참조 :
확실히 그래!
참조 소스를 살펴 보자의 springboot이 수행하는 방법입니다, 배울 수있는 가장 좋은 방법입니다
분류 구성 서버에 해당 ServerProperties (문제를 설명하기 위해 부분적으로 만 멤버 변수 붙여)
@ConfigurationProperties (접두사 = "서버", ignoreUnknownFields = TRUE) 공용 클래스 ServerProperties의 구현 {순서가 EmbeddedServletContainerCustomizer, EnvironmentAware, / ** * 서버 HTTP 포트. * / 개인 정수 포트; @NestedConfigurationProperty 전용 압축 압축 = 새로운 압축 (); //省略其他成员变量, 게터, 세터
코드의 압축 기반 부분 :
공용 클래스 압축 { / ** 응답 압축을 사용하는 경우 *. * / 전용 부울 활성화 = 거짓;
독서 후 매우 명확해야하고, 그 이유는 server.port = 8081, server.display 이름 = 쓸 수 , server.compression.enabled = 사실, lhyapp을 하기 때문에 ServerProperties 클래스 사용
@ConfigurationProperties (접두사 = "서버", ignoreUnknownFields = TRUE) server.compression.enabled = 사실은 이런 종류의 뭔가를 원하는 경우, 접두사 접두사 구성 파일을 지정 주석, 우리는 클래스 명성을 압축 한 다음 필요 ServerProperties 이 클래스에서 참조, 속성 이름은 구성 프로파일의 이름에 해당합니다.
@ConfigurationProperties :
SpringBoot 해당 구성 바인딩이 클래스의 모든 속성과 구성 파일을에게,
접두사 = "XXX": 다음의 모든 하나의 매핑을 특성있는 프로필
만이 컴퍼넌트가 컨테이너를 제공하기 위해, 조립 컨테이너입니다 @ConfigurationProperties가 작동,
@ConfigurationProperties (접두사 = "XXX")이 전역 기본 구성 파일에서 값을 가져;
를 달성하기 위해 아래 위의 검증 코드 구성, 당신은 클래스가 필요 말했다 :
코드 :
CoreConfiguration.java
@Configuration @EnableConfigurationProperties (SecurityProperties.class) 공용 클래스 CoreConfiguration { //配置一些콩 // @ 콩 // 공공 XXXX xxxx를 () {} }
SecurityProperties.java
@ConfigurationProperties (접두사 = "MyApp를") 공용 클래스 SecurityProperties { 개인 ValidateCodeProperties 코드 = 새로운 ValidateCodeProperties (); 공공 ValidateCodeProperties getCode () { 리턴 코드; } 공개 무효 setCode (ValidateCodeProperties 코드) { this.code = 코드; } }
ValidateCodeProperties.java
public class ValidateCodeProperties { private SmsCodeProperties sms = new SmsCodeProperties(); private ImageCodeProperties image = new ImageCodeProperties(); public SmsCodeProperties getSms() { return sms; } public void setSms(SmsCodeProperties sms) { this.sms = sms; } public ImageCodeProperties getImage() { return image; } public void setImage(ImageCodeProperties image) { this.image = image; } }
SmsCodeProperties.java
public class SmsCodeProperties { private int length = 4; public int getLength() { return length; } public void setLength(int length) { this.length = length; } }
在application.properties 里配置
myapp.code.sms.length = 10
使用配置:
@Autowired private SecurityProperties securityProperties; @RequestMapping("/length") public @ResponseBody String length(){ int length = securityProperties.getCode().getSms().getLength(); return String.valueOf(length); }
SpringBoot的配置文件有yml和properties两种,看一些文章说yml以数据为中心,比较好。个人觉得properties更好用,所以这里以properties格式为例来说。
我们都知道@Value 注解可以从配置文件读取一个配置,如果只是配置某个值,比如 某一个域名,配置为xxx.domain = www.xxx.com ,这样直接在代码里用@Value获取,比较方便。
但是如果是一组相关的配置,比如验证码相关的配置,有图片验证码、手机验证码、邮箱验证码,如果想把验证码的长度做成可配置。是否能像springboot的配置,
参照着写成:
肯定是可以的!
参照源码是最好的学习方式,下面来看springboot是怎么做的
server对应着一个配置类:ServerProperties(只粘贴出了部分成员变量,来说明问题)
@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true) public class ServerProperties implements EmbeddedServletContainerCustomizer, EnvironmentAware, Ordered { /** * Server HTTP port. */ private Integer port; @NestedConfigurationProperty private Compression compression = new Compression(); //省略其他成员变量、getter 、setter
Compression类部分代码:
public class Compression { /** * If response compression is enabled. */ private boolean enabled = false;
看过后应该很明白了,之所以能写成server.port=8081,server.display-name=lhyapp,server.compression.enabled=true ,是因为 ServerProperties 类上使用了
@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true) 注解,其中prefix 指定配置文件里的前缀, 如果想弄成这样式的 server.compression.enabled = true ,就需要再声名一个类 Compression ,然后在ServerProperties 中引用这个类,属性名对应配置文件中的配置名。
@ConfigurationProperties:
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
prefix = "xxx":配置文件中哪个下面的所有属性进行一一映射
只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
@ConfigurationProperties(prefix = "xxx")默认从全局配置文件中获取值;
下边实现上面说的验证码配置,需要的类:
代码:
CoreConfiguration.java
@Configuration @EnableConfigurationProperties(SecurityProperties.class) public class CoreConfiguration { //配置一些bean //@Bean //public XXXX xxxx(){} }
SecurityProperties.java
@ConfigurationProperties(prefix = "myapp") public class SecurityProperties { private ValidateCodeProperties code = new ValidateCodeProperties(); public ValidateCodeProperties getCode() { return code; } public void setCode(ValidateCodeProperties code) { this.code = code; } }
ValidateCodeProperties.java
public class ValidateCodeProperties { private SmsCodeProperties sms = new SmsCodeProperties(); private ImageCodeProperties image = new ImageCodeProperties(); public SmsCodeProperties getSms() { return sms; } public void setSms(SmsCodeProperties sms) { this.sms = sms; } public ImageCodeProperties getImage() { return image; } public void setImage(ImageCodeProperties image) { this.image = image; } }
SmsCodeProperties.java
공용 클래스 SmsCodeProperties { 개인 INT 길이 = 4; 공공 INT getLength () { 반환 길이; } 공중으로 SetLength 공극 (INT 길이) { 식에서 나타내지 = 길이; } }
application.properties의 구성에서
myapp.code.sms.length = 10
구성을 사용합니다 :
@Autowired 개인 SecurityProperties의 securityProperties을; ( "/ 길이") @RequestMapping 공개 @ResponseBody 문자열 길이 () { . INT 길이 = securityProperties.getCode ()를 getSms () getLength ().; 복귀 한 String.valueOf (길이); }