SpringBoot常见问题(2):

1:Spirng Boot 常用的两种配置文件
application.properties或者 application.yml 对 Spring Boot 程序进行简单的配置。

2:什么是 YML(YAML)?yml 配置的优势在哪里 ? 缺点呢
yml 是一种人类可读的数据序列化语言。它通常用于配置文件。
与属性文件相比,yml 文件就更加结构化,而且更少混淆。

缺点:不支持 @PropertySource 注解导入自定义的 yml 配置(后面有详细介绍)
配置格式对比.png

3:Spring Boot 常用的读取配置文件的方法有哪些?
#yml配置文件

wuhan2020: 2020年初武汉爆发了新型冠状病毒,但我相信一切都会过去,中国加油!

my-profile:
    name: 我是名称
    email: koushuangbwcx@163.com

library:
    location: 湖北武汉加油中国加油
    books:
        - name: 时间的秩序
        description: 为什么我们记得过去,而非未来?时间“流逝”意味着什么?是我们存在于时间之内,还是时间存在于我们之中?卡洛·罗韦利用诗意的文字,邀请我们思考这一亘古难题——时间的本质。
        - name: 了不起的我
        description: 如何养成一个新习惯?如何让心智变得更成熟?如何拥有高质量的关系? 如何走出人生的艰难时刻?
 方法一:
  通过@ConfigurationProperties读取并与 bean 绑定
@Component
@ConfigurationProperties(prefix = "library")
@Data
class LibraryProperties {
private String location;
    private List<Book> books;

    static class Book {
        String name;
        String description;
    }
}
方法二: 
 如果LibraryProperties 类没有加 @Component 注解。
 我们在我们要使用LibraryProperties 的地方使用
 @EnableConfigurationProperties注册我们的配置 bean:
  @EnableConfigurationProperties(LibraryProperties.class)
    @Configuration
    @EnableConfigurationProperties(LibraryProperties.class)
    public class LibraryConfiguration {    
 
        @Bean    
        public String dataSource(LibraryPropertiesl libraryProperties) {   
            return libraryProperties.getName();
       }
    }
方法3: 
@Value("${property}") 
需要注意的是 @value这种方式是不被推荐的
    @Compoent
    @Data
    public void Value(){
    
        @Value("${wuhan2020}")
        String wuhan2020; 
        
        @Value("${my-profile.name}")
        String name;  
    } 
另外注意:
@ConfigurationProperties只能读取全局配置文件

@PropertySource读取指定的 properties 文件
    当然也可以读默认配置文件,但不能读取yml配置文件
    源码中的createPropertySource设置仅能读取 properties(除非重写)
@Component
@PropertySource("classpath:website.properties")
@Data
public class WebsiteProperies {
}

4:Spring Boot 加载配置文件的优先级是怎么样的?
5:常用的 Bean 映射工具有哪些?
MapStruct、ModelMapper、Dozer、Orika、JMapper 是 5 种常用的 Bean 映射工具。
综合日常使用情况和相关测试数据,其中 MapStruct、ModelMapper 这两个 Bean 映射框架是最佳选择。
6: Spring Boot 如何做请求参数校验?
如果spring-boot版本小于2.3,spring-boot-starter-web包含Hibernate Validator
否则需要在pom包中进行引入:
<dependency>    
    <groupId>org.hibernate</groupId>    
    <artifactId>hibernate-validator</artifactId>    
</dependency>
Hibernate Validator包含了jakarta.validation(javax.validation.constraints)
(JSR)(全称Java Specification Requests )Java规范请求
可使用以下常用注解:

@NotNull 被注释的元素必须不为 null
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值       
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max=, min=) 被注释的元素的大小必须在指定的范围内
@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式
  
@NotEmpty 被注释的字符串的必须非空
@NotBlank(message =) 验证字符串非 null,且长度必须大于 0
@Email 被注释的元素必须是电子邮箱地址
@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内 
@Range(min=,max=,message=) 被注释的元素必须在合适的范围内

注意: 可以使用 (message = "我是自定义信息")

使用教程:
    @Data
    public class Person {

    @NotNull(message = "classId 不能为空")
    private String classId;

    @Pattern(regexp = "((^Man$|^Woman$|^UGM$))", 
    message = "sex 值不在可选范围")
    @NotNull(message = "sex 不能为空")
    private String sex;

    @Email(message = "email 格式不正确")
    @NotNull(message = "email 不能为空")
    private String email;
}
    //验证请求体(RequestBody
@RestController(Controller + ResponseBody)
@RequestMapping("/requestBody")
public class PersonController {

    @PostMapping("/person")
    public String getPerson(@RequestBody @Valid Person person) {
        return "Success"
        }
}

@RestController
@RequestMapping("/Param")
@Validated
public class PersonController {

    //使用占位符
    @GetMapping("/person/{id}")
    public String getPersonByID(
        @Valid @PathVariable("id") 
        @Max(value = 5,message = "超过 id 的范围了")   
        Integer id) {
                return "Success"
    }
    //没使用占位符
    @GetMapping("/person")
    public String getPersonByName(
        @Valid @RequestParam("name") 
        @Size(max = 5,message = "超过 name 的范围了") 
        String name) {
                 return "Success"
    }
}
7: Spring Boot 中如何实现定时任务 ?
    //在SpringBoot的启动类中加入注解@EnableScheduling 注解
   //(作用是发现注解 @Scheduled 的任务并在后台执行该任务)

@Component
@Slf4j
public class ScheduledTasks {
/**
* fixedRate:固定速率执行。每5秒执行一次。
*/
@Scheduled(fixedRate = 5000)
public void reportCurrentTimeWithFixedRate() {
    log.info("Fixed Rate Task : The time is now {}", dateFormat.format(new Date()));
    }
}
Schedule格式: 秒 分 时 日 月 年 
0/5 *  * * * ? (每5秒执行一次)
0 0/10  * * * ? (每10分钟执行一次)

注意验证Scheduled网址:@Scheduled

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容