SpringBoot(三)

server/2024/11/15 4:00:02/

最佳实践

1.SpringBoot 应用如何编写

  • 引入场景依赖
    • 官方文档
  • 查看自动配置了哪些(选做)
    • 自己分析,引入场景对应的自动配置一般都生效了
    • 配置文件中 debug=true 开启自动配置报告。
      • Negative(不生效)
      • Positive(生效)
  • 是否需要修改
    • 参照文档修改配置项
      • 官方文档
      • 自己分析。xxxxProperties 绑定了配置文件的哪些。
    • 自定义加入或者替换组件
      • @Bean、@Component…
    • 自定义器 XXXXXCustomizer;

2.Lombok 简化开发

Lombok 用标签方式代替构造器、getter/setter、toString()等鸡肋代码。

spring boot 已经管理 Lombok。引入依赖:

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>
</dependency>

IDEA 中 File->Settings->Plugins,搜索安装 Lombok 插件。

java">@NoArgsConstructor
//@AllArgsConstructor
@Data
@ToString
@EqualsAndHashCode
public class User {private String name;private Integer age;private Pet pet;public User(String name,Integer age){this.name = name;this.age = age;}
}

简化日志开发

java">@Slf4j
@RestController
public class HelloController {@RequestMapping("/hello")public String handle01(@RequestParam("name") String name){log.info("请求进来了....");return "Hello, Spring Boot 2!"+"你好:"+name;}
}

3.dev-tools

Spring Boot includes an additional set of tools that can make the application development experience a little more pleasant. The spring-boot-devtools module can be included in any project to provide additional development-time features.——link

Applications that use spring-boot-devtools automatically restart whenever files on the classpath change. This can be a useful feature when working in an IDE, as it gives a very fast feedback loop for code changes. By default, any entry on the classpath that points to a directory is monitored for changes. Note that certain resources, such as static assets and view templates, do not need to restart the application.——link

Triggering a restart

As DevTools monitors classpath resources, the only way to trigger a restart is to update the classpath. The way in which you cause the classpath to be updated depends on the IDE that you are using:

  • In Eclipse, saving a modified file causes the classpath to be updated and triggers a restart.
  • In IntelliJ IDEA, building the project (Build -> Build Project)(shortcut: Ctrl+F9) has the same effect.

添加依赖:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency>
</dependencies>

在 IDEA 中,项目或者页面修改以后:Ctrl+F9。

4.Spring Initailizr

Spring Initailizr是创建 Spring Boot 工程向导。

在 IDEA 中,菜单栏 New -> Project -> Spring Initailizr。

配置文件

yarm 的用法

同以前的 properties 用法

YAML 是 “YAML Ain’t Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)。

非常适合用来做以数据为中心的配置文件

1.基本语法

  • key: value;kv 之间有空格
  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进不允许使用 tab,只允许空格
  • 缩进的空格数不重要,只要相同层级的元素左对齐即可
  • '#'表示注释
  • 字符串无需加引号,如果要加,单引号’'、双引号""表示字符串内容会被 转义、不转义

2.数据类型

  • 字面量:单个的、不可再分的值。date、boolean、string、number、null
k: v
  • 对象:键值对的集合。map、hash、set、object
#行内写法:k: {k1:v1,k2:v2,k3:v3}#或k:k1: v1k2: v2k3: v3
  • 数组:一组按次序排列的值。array、list、queue
#行内写法:k: [v1,v2,v3]#或者k:- v1- v2- v3

3.实例

java">@Data
public class Person {private String userName;private Boolean boss;private Date birth;private Integer age;private Pet pet;private String[] interests;private List<String> animal;private Map<String, Object> score;private Set<Double> salarys;private Map<String, List<Pet>> allPets;
}@Data
public class Pet {private String name;private Double weight;
}

用 yaml 表示以上对象

person:userName: zhangsanboss: falsebirth: 2019/12/12 20:12:33age: 18pet:name: tomcatweight: 23.4interests: [篮球, 游泳]animal:- jerry- marioscore:english:first: 30second: 40third: 50math: [131, 140, 148]chinese: { first: 128, second: 136 }salarys: [3999, 4999.98, 5999.99]allPets:sick:- { name: tom }- { name: jerry, weight: 47 }health: [{ name: mario, weight: 47 }]

自定义类绑定的配置提示

You can easily generate your own configuration metadata file from items annotated with @ConfigurationProperties by using the spring-boot-configuration-processor jar. The jar includes a Java annotation processor which is invoked as your project is compiled.——link

自定义的类和配置文件绑定一般没有提示。若要提示,添加如下依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
</dependency><!-- 下面插件作用是工程打包时,不将spring-boot-configuration-processor打进包内,让其只在编码的时候有用 -->
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId></exclude></excludes></configuration></plugin></plugins>
</build>

模板

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!--项目maven坐标--><groupId>com.nianxi</groupId><artifactId>springboot-mybatis-demo</artifactId><version>1.0-SNAPSHOT</version><!--    继承spring-boot-starter-parent--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.2</version></parent><!--属性设置--><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><mysql.version>8.0.33</mysql.version><mybatis-plus.version>3.5.3.1</mybatis-plus.version><lombok.version>1.18.24</lombok.version><devtools.version>3.2.4</devtools.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><!--devtools--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><version>${devtools.version}</version></dependency><!-- mysql --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>${mysql.version}</version></dependency><!-- mybatis-plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis-plus.version}</version></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></dependency><!--字符串的处理--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId></dependency></dependencies><!--添加maven插件,项目的打包工具,打成jar包,否则在打包运行时报错   --><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

application.yml

server:port: 8080spring:profiles:# 设置当前环境,用来区分不同环境的配置active: devmain:# 设置banner模式,用来关闭启动时的图标allow-circular-references: true# 配置Spring boot数据源datasource:driver-class-name: ${star.datasource.driver-class-name}url: ${star.datasource.url}username: ${star.datasource.username}password: ${star.datasource.password}# 配置mybatis-plus
mybatis-plus:configuration:# 配置驼峰命名(实体类属性与数据库字段名称的下划线规则)map-underscore-to-camel-case: true# 日志log-impl: org.apache.ibatis.logging.stdout.StdOutImpl# 实体类别名type-aliases-package: com.nianxi.entity# 全局配置global-config:db-config:# 主键类型id-type: auto# 映射文件位置mapper-locations: classpath:mapper/*Mapper.xml# 日志配置
logging:level: # 日志级别com:nianxi:mapper: debug # mapper包下的日志级别为debugservice: infocontroller: info

application-dev.yml

star:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/springbootDemo?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghaiusername: rootpassword: 123456

java_397">common.Result.java

java">package com.nianxi.common;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Result<T> {// 状态码 0为成功,1为失败private Integer code;// 返回信息private String msg;// 返回前端的数据private T data;public static <T> Result<T> success() {Result<T> result = new Result<T>();result.code = 1;return result;}public static <T> Result<T> success(T object) {Result<T> result = new Result<T>();result.data = object;result.code = 1;return result;}public static <T> Result<T> error(String msg) {Result<T> result = new Result<T>();result.msg = msg;result.code = 0;return result;}
}

java_439">config.MyBatisPlusConfig.java

java">package com.nianxi.config;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration
public class MyBatisPlusConfig {//分页插件@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();//设置数据库类型mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return mybatisPlusInterceptor;}//RestTemplate@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}
}

http://www.ppmy.cn/server/141708.html

相关文章

ctfshow-web入门-反序列化(web260-web264)

目录 1、web260 2、web261 3、web262 4、web263 5、web264 1、web260 要求传入的内容序列化后包含指定内容即可&#xff0c;在 PHP 序列化中&#xff0c;如果键名或值包含 ctfshow_i_love_36D&#xff0c;那么整个序列化结果也会包含这个字符串。 payload&#xff1a; ?…

软件设计师-数据库

上午6分&#xff0c;下午15分&#xff0c;很重要 数据库&#xff0c;长期存储在计算机内的、有组织的、可共享的数据集合&#xff0c;数据库中的数据按照数据模型组织&#xff0c;描述和存储&#xff0c;具有较小的冗余度&#xff0c;较高的数据独立性和易拓展性&#xff0c;并…

【LeetCode】【算法】240. 搜索二维矩阵II

LeetCode 240. 搜索二维矩阵II 题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 思路 思路&#xff1a;K神真强啊240.搜索二维矩阵II&#xff0…

Ubuntu22.04安装cuDNN

根据下面地址选择安装即可: 英伟达cuDNN下载 wget https://developer.download.nvidia.com/compute/cudnn/9.5.1/local_installers/cudnn-local-repo-ubuntu2204-9.5.1_1.0-1_amd64.deb sudo dpkg -i cudnn-local-repo-ubuntu2204-9.5.1_1.0-1_amd64.deb sudo cp /var/cudnn-…

Android 开发指南:初学者入门

Android 是全球最受欢迎的移动操作系统之一&#xff0c;为开发者提供了丰富的工具和资源来创建各种类型的应用程序。本文将为你提供一个全面的入门指南&#xff0c;帮助你从零开始学习 Android 开发。 目录 1. 了解 Android 平台[1]2. 设置开发环境[2]3. 学习基础知识[3]4. 创…

什么是上拉和下拉

在电子电路和嵌入式系统中&#xff0c;“上拉”和“下拉”通常指的是上拉电阻&#xff08;pull-up resistor&#xff09;和下拉电阻&#xff08;pull-down resistor&#xff09;。它们是被用于稳定电路输入或输出引脚的电阻器&#xff0c;通过将引脚电位锁定到特定的电压水平来…

资产安全加固的面试点

资产加固 资产管理属于蓝队前期要做的事情&#xff0c;首先客户单位对他自身的单位资产有一定的了解哪些资产的优先级和重要程度等等&#xff0c;所以开始要做相关的资产梳理&#xff0c;对客户单位进行统计&#xff0c;梳理&#xff0c;分析&#xff0c;找到哪些点是可以授权…

vue3实现一个无缝衔接、滚动平滑的列表自动滚屏效果,支持鼠标移入停止移出滚动

文章目录 前言一、滚动元素相关属性回顾一、实现分析二、代码实现示例&#xff1a;2、继续添加功能&#xff0c;增加鼠标移入停止滚动、移出继续滚动效果2、继续完善 前言 列表自动滚屏效果常见于大屏开发场景中&#xff0c;本文将讲解用vue3实现一个无缝衔接、滚动平滑的列表自…