Springboot配置文件: application.yml   application.properties(自带)

yml的格式写起来稍微舒服一点

在application.properties中数据是下面的样子:

#IDEA的 properties配置文件是utf-8编码的
#配置实体类Person字段
person.lastame=张三
person.age=18
person.birth=2018/11/12
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c
person.dog.petname=佩奇
person.dog.petage=2

如果跑测试出错,说明在IDEA的settings中file encoding没有设置为utf-8

在bean中:

package com.example.demo11.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated; import javax.validation.constraints.Email;
import java.util.Date;
import java.util.List;
import java.util.Map; /**
* 将配置文件中配置的每一个属性的值,映射到这个组件中
* @ConfigurationProperties 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
* prefix = "person"; 配置文件中哪个下面的所有属性进行一一映射
*
* 只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能;
*/ @Data
@NoArgsConstructor
@AllArgsConstructor
@ConfigurationProperties(prefix = "person")
@Validated //配合ConfigurationProperties注解进行JSR303数据校验
@Component
public class Person { /**
* <bean class="Person">
* <property name="lastName" value="字面量/${key}从环境变量,配置文件中获取值/#{SpEL}"></property>
* </bean>
*/ //必须为邮箱格式,该校验必须在@ConfigurationProperties与@Validated在的情况下使用
@Email
private String email;
// @Value("${person.lastame}")
private String lastame;
// @Value("#{11*2}")
private Integer age;
// @Value("true")
private boolean boss;
// @Value("${person.birth}")
private Date birth; private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
}

@Value的方式也能对应properties中的对应的值.但其只是对应单个数据比较有效,例如写一个controller,获取姓名:

controller: (这时候的bean中不使用@ConfigurationProperties和@Validated 而使用lastname)

@Value("${person.lastame}")
private String lastame;
package com.example.demo11.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
public class HelloController { @Value("${person.lastame}")
private String name; @RequestMapping("/sayHello")
public String sayHello(){
return "Hello , " + name;
}
}

运行主程序,(非测试) 查看路径可以获取到bean中person的lastname属性值.

还挺方便.

>

|

>

简单说下SpringBoot的测试类:

package com.example.demo11;

import com.example.demo11.bean.Person;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class)
@SpringBootTest
public class Demo11ApplicationTests { @Autowired
private Person person;
@Test
public void contextLoads() {
System.out.println(person);
} }
SpringBoot 测试类,(单元测试)
注解 @SpringBootTest 说明这个类是一个SpringBoot的测试类,
@RunWith(SpringRunner.class) 说明是用Spring的驱动器来跑,而不是用原来的Junit
可以在测试期间很方便地类似编码一样进行自动注入等容器的功能.
 
如果不使用@ConfigurationProperties 也可以使用@Value注解
但@ConfigurationProperties这种支持数据名称松散绑定,而@Value必须对应
 
 
配置文件yml还是properties都能获取到值.
如果说,只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value
如果说,我们专门编写一个javaBean来和配置文件进行映射,
我们就直接使用@ConfigurationProperties
特殊情况下可以@ConfigurationProperties和@Value结合使用.
 
 
 
两种数据获取的注解区别:

SpEL : Spring表达式语言 ...
自定义数据校验注解: https://www.cnblogs.com/niceyoo/p/9497235.html
自定义数据校验:
 
 
||||
 
自定义数据校验:
 
 
 
注意,使用建立class的方式,将class改为@interface  
详见 https://www.ibm.com/developerworks/cn/java/j-lo-jsr303/ 创建一个包含验证逻辑的简单应用(基于 JSP)下面的 >> 定制化的 constraint
IDValidator : (Annotation)
package com.example.demo11.validator.annotation;

import com.example.demo11.validator.IDConstraintValidator;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*; @Documented
@Constraint(validatedBy = {IDConstraintValidator.class})
@Target({ElementType.METHOD,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface IDValidator { //提示信息
String message() default "身份证号长度需要在15或18位,并全为阿拉伯数字."; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {};
}
IDConstraintValidator:(定义一个类用来处理具体的验证逻辑)
package com.example.demo11.validator;

import com.example.demo11.validator.annotation.IDValidator;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext; public class IDConstraintValidator implements ConstraintValidator<IDValidator,String> { @Override
public void initialize(IDValidator constraintAnnotation) { } @Override
public boolean isValid(String id, ConstraintValidatorContext constraintValidatorContext) {
int length = id.length();
//验证id全为数字,长度为15位或18位.(现在估计全是18位了?)
if ((id.matches("^[0-9]*$")) && (length == 15 || length == 18)){
//验证成功
return true;
}
//否则不予通过
return false;
}
}

之后在bean中加入属性:

@IDValidator
private String idnumber;
这个属性说明这是一个CN身份证号码,上面的验证逻辑也说明了这一点: (这样是不准确的,因为身份证中还可能含有字母X,x)
身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X
所以经过更改后:
IDConstraintValidator:
package com.example.demo11.validator;

import com.example.demo11.validator.annotation.IDValidator;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext; public class IDConstraintValidator implements ConstraintValidator<IDValidator,String> { @Override
public void initialize(IDValidator constraintAnnotation) { } @Override
public boolean isValid(String id, ConstraintValidatorContext constraintValidatorContext) {
int length = id.length();
//直接使用身份证号码的正则表达式:
//身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X,x
//15位或18位的正则表达式为:
//^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$
//下面的是18位的身份证验证:
if(id.matches("^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$")){
return true;
}
//否则不予通过
return false;
}
}

同样提示message也更改为:  注解 - IDValidator 中:

//提示信息
String message() default "非正确的身份证格式.";
||||
 
 
部分的数据校验注解:
JSR303上面的链接中还说明了使用自定义的验证注解.
下面的图表名了注解的有效性,但必须配合@ConfigurationProperties和@Validated
 
 
 

[SpringBoot] - 配置文件的多种形式及JSR303数据校验的更多相关文章

  1. springboot配置(yami配置文件,JSR303数据校验,多环境配置)

    yami配置文件 YAML是 "YAML Ain't a Markup Language" (YAML不是一种标记语言)的递归缩写.在开发的这种语言时,YAML 的意思其实是:&q ...

  2. Springboot:JSR303数据校验(五)

    @Validated //开启JSR303数据校验注解 校验规则如下: [一]空检查 @Null 验证对象是否为null @NotNull 验证对象是否不为null, 无法查检长度为0的字符串 @No ...

  3. YAML语法使用,JSR303数据校验

    YAML YAML是 "YAML Ain't a Markup Language" (YAML不是一种置标语言)的递归缩写 # yaml配置 server: prot: YAML语 ...

  4. SpringBoot 之 JSR303 数据校验

    使用示例: @Component @ConfigurationProperties(prefix = "person") @Validated //使用数据校验注解 public ...

  5. SpringMVC框架07——服务器端JSR303数据校验

    1.数据校验概述 数据校验分为客户端校验和服务器端校验,客户端主要是通过过滤正常用户的误操作,是第一道防线,一般使用JavaScript代码实现.但是只有客户端校验是不够的,攻击者可以绕过客户端验证直 ...

  6. springMVC使用JSR303数据校验

    JSR303注解 hibernate validate是jsr 303的一个参考实现,除支持所有的标准校验注解外,他还支持扩展注解 spring4.0拥有自己独立的数据校验框架,同时支持jsr 303 ...

  7. SpringBoot 2 快速整合 | Hibernate Validator 数据校验

    概述 在开发RESTFull API 和普通的表单提交都需要对用户提交的数据进行校验,例如:用户姓名不能为空,年龄必须大于0 等等.这里我们主要说的是后台的校验,在 SpringBoot 中我们可以通 ...

  8. JSR303数据校验

    Springboot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理. 导入依赖: <dependency> <groupId>org ...

  9. JSR-303 数据校验学习

    一.JSR-303简介JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是Hibernate Validator. 此实现与 Hibernate ...

随机推荐

  1. ubuntu android studio kvm

    Android studio 启动模拟器失败: Cannot launch AVD in emulator.Output:emulator: ERROR: x86 emulation currentl ...

  2. Cordova 3.0 初步使用

    主要参考 http://docs.phonegap.com/en/3.0.0/guide_cli_index.md.html#The%20Command-line%20Interface Cordov ...

  3. 删除lv

    author: headsen  chen date: 2018-09-12  11:52:02 [root@sz02 ~]# umount /var/lib/docker [root@sz02 ~] ...

  4. Windows Phone 自定义一个启动画面

    1.新建一个UserControl <UserControl x:Class="LoadingPage.PopupSplash" xmlns="http://sch ...

  5. 微信小程序 --- loading提示框

    loading:提示框: 效果: loading和toast和像,只不过 toast 是设置结束时间,时间到了去触发bindchange事件,进行隐藏. 但是 loading 是没有办法设置事件让其隐 ...

  6. 问答项目---金币经验奖励规则及网站配置写入config文件

    具体步骤: 引入配置文件——>获取当前数组——>进行合并 public function edit(){ //引入 config.php配置文件 $file = APP_PATH.'Com ...

  7. Redis连接(二)

    Redis 命令 Redis 命令用于在 redis 服务上执行操作. 要在 redis 服务上执行命令需要一个 redis 客户端.Redis 客户端在我们之前下载的的 redis 的安装包中. 语 ...

  8. T-SQL备份数据库恢复

    注:此操作在master数据库上执行 /*1.--得到数据库的文件目录 @dbname 指定要取得目录的数据库名 如果指定的数据不存在,返回安装SQL时设置的默认数据目录 如果指定NULL,则返回默认 ...

  9. Nginx正向代理配置

    服务器端: server { resolver 8.8.8.8; resolver_timeout 5s; listen 0.0.0.0:8888; access_log /usr/local/ngi ...

  10. Ftp服务器配置讲解

    ftp.server.ip=192.168.80.130ftp.user=ftpuserftp.pass=ftpuserftp.server.http.prefix=http://image.imoo ...