🔥博客主页: 【小扳_-CSDN博客】**
❤感谢大家点赞👍收藏⭐评论✍**


1.0 配置文件
** 在 SpringBootWeb 项目中,配置文件通常是 application.properties 或 application.yaml 或者 application.yml ,存放在 src/main/resources 目录下。这些配置文件用于配置应用程序的属性和设置,可以包括数据库连接信息、日志级别、服务器端口等项目配置。**
1.1 yml 配置文件
** 是一种简洁易读的数据序列化格式,常用于配置文件和数据交换。YAML 配置文件通常以 .yml 或 .yaml 为扩展名,其内容由键值对、列表、嵌套结构等组成,支持注释、缩进和多种数据类型。需要注意的是,":" 后面不是直接加上 value 值,而是有一个空格隔离开来的。**
** 1)键值对:使用冒号(:)分隔键和值,例如:**
key1: value1
key2: value2
** 2)列表:使用短横线(-)表示一个项,例如:**
**- item1
- item2**
** 3)嵌套结构:可以将键值对或列表嵌套在另一个键或值中,例如:**
key1:
subkey1: value1
subkey2: value2
在 application.properties 文件中,可以通过键值对的方式来配置属性,例如:
server.port=8080 spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=123456
在 application.yaml 文件中,则采用了更加清晰的层次结构来配置属性,例如:
server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/mydb username: root password: 123456
可以根据项目需求选择使用 application.properties 或 application.yaml 来配置项目属性,这些配置文件会被 SpringBoot 自动加载并应用到项目中。
1.2 参数配置化
** 参数配置化是指将应用程序中的配置参数与代码逻辑分离,以便在不修改代码的情况下更改参数值。在 SpringBoot 项目中,我们可以将参数配置化为配置文件中,然后在代码中通过注解或者通过 @Value 注入方式来使用这些配置参数。**
1.2.1 使用 @Value 注解注入单个配置参数
** 简单来说,根据键来给变量注入值,@Value 注解中的 ${} 的形式来指定键。**
#mysql 配置 spring: datasource: drive-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/db05?characterEncoding=utf-8&useSSL=true username: root password: 123456@Value("${spring.datasource.url}") String databaseUrl; @Test public void test3(){ System.out.println(databaseUrl); }运行结果:
1.2.2 使用 @ConfigurationProperties 注解将一组相关配置参数注入到一个类中
** 首先先创建一个类,成员变量的名称与配置文件中的参数名称保持一致,且将该类对象进行控制反转,将其成为 Bean 对象。**
** 最后,在该类上加上 @ConfigurationProperties 注解,注解中的属性 prefix 指定属性的前缀。**
代码演示:
Pojo 类:
import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Data @Component @ConfigurationProperties(prefix = "spring.datasource") public class Pojo { private String url; private String username; private String password; }配置文件:
#mysql 配置 spring: datasource: drive-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/db05?characterEncoding=utf-8&useSSL=true username: root password: 123456测试代码:
@Autowired Pojo pojo; @Test public void test4(){ System.out.println(pojo.getUrl()); System.out.println(pojo.getUsername()); System.out.println(pojo.getPassword()); }运行结果:
** 这样就可以将一组相关配置参数绑定到一个类中。这样,SpringBoot 会自动将前缀的属性值绑定到类中对应的字段上。这种方式可以使得代码更加清晰和整洁,将一组相关的配置参数集中管理在一个类中。**
2.0 异常处理
** 在 SpringBootWeb 项目中,避免不了会有异常抛出,那么如果异常抛出来,没有进行有效的捕获,那么异常就会直接响应给客户端。**
** 为了避免将异常直接返回给客户端,需要将异常进行全部捕获处理之后,再响应给客户端。**
** 1)首先创建一个捕获异常的类,在类中定义一个方法且在该方法上加上 @ExceptionHandler 注解,在注解上设置 Exception.class 的属性,从而捕获全局的异常。最后在该类上加上 @RestControllerAdvice 注解,将对象返回值的格式转换成 json 格式。**
代码演示:
import org.example.Pojo.Result; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; @RestControllerAdvice public class exceptionHandler { //捕获异常 @ExceptionHandler(Exception.class) public Result catchException(Exception ex){ ex.printStackTrace(); return Result.error("error"); } }
3.0 Spring 事务管理
** 通过使用 Spring 的事务管理可以简化开发过程,同时确保数据操作的一致性和完整性。简单来说,要么都不执行,要么都执行。当在同一件事务中代码执行到一半,遇到异常了,那么后面的代码直接结束,都不会执行了,前面已经执行的代码就会进行回滚,回到原来的状态。**
3.1 @Transactional 注解
** 是 Spring Framework 提供的用于声明式事务管理的注解之一。通过在方法上添加 @Transactional 注解,可以告诉 Spring 将该方法的执行过程纳入事务管理范围。**
** 1)首先,在 Spring 的配置文件中配置事务管理器和事务通知器。**
** 2)然后在需要添加事务的方法上加上 @Transactional 注解,Spring 会根据这个注解来管理该方法的事务。**
** 3)@Transactional 注解提供了很多属性来定义事务的传播行为、隔离级别、超时时间等。**
代码演示:
@Override @Transactional public void deleteId(Integer id) { deptMapper.deleteId(id); empMapper.deleteByDeptId(id); }
** 以上的两个操作就会绑定在一起,要么一起执行,要么都不执行。**
3.2 rollbackFor 属性与 propagation 属性
** 1)rollbackFor 属性用于指定哪些异常需要回滚事务。如果方法中抛出的异常是指定的异常类型之一,事务将回滚;否则,事务不会回滚。接受一个数组,可以指定多个异常类型。常见的用法是将一些受检查异常(checked exception)转换为不受检查异常(unchecked exception),从而触发事务回滚。**
** 默认情况下,@Transactional 注解中的 rollbackFor 属性未指定时,事务将回滚的默认异常是 RuntimeException 及其子类。也就是说,如果方法中抛出的异常是 RuntimeException 或其子类之一,事务将会回滚。**
代码演示:
@Transactional(rollbackFor = Exception.class) public void deleteId(Integer id) { deptMapper.deleteId(id); empMapper.deleteByDeptId(id); }** 一旦抛出异常,都会进行回滚操作。Exception.class 代表遇到任何一种异常都会进行回滚操作。**
** 2)propagation 属性**
** propagation 属性是 @Transactional 注解中用来指定事务的传播行为的一个属性。通过设置 propagation 属性,可以控制方法之间的事务如何传播和交互。**
propagation 属性可能的取值:
** Propagation.REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是最常用的传播行为。**
@Transactional(propagation = Propagation.REQUIRED) public void updateUser(User user) { // 如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务 }
** Propagation.REQUIRES_NEW:创建一个新的事务,并暂停当前事务(如果存在)。新事务和当前事务之间是独立的,互不影响。**
@Transactional(propagation = Propagation.REQUIRES_NEW) public void updateUserWithNewTransaction(User user) { // 创建一个新的事务,暂停当前事务(如果存在) }
** 通过合理设置 propagation 属性,可以实现对事务传播行为的控制,确保事务的正确性和一致性。 **

版权归原作者 小扳 所有, 如有侵权,请联系我们删除。

