Spring Boot中的常用注解

Spring Boot中的常用注解

  • 深入探讨Spring Boot中的常用注解
    • 摘要
    • 引言
    • 一、认识Spring Boot
      • Spring Boot简介和核心概念
      • 核心概念详解
        • 1. 自动配置
        • 2. 起步依赖
        • 3. 嵌入式Web服务器
    • 二、Spring中常用注解
      • Spring框架中的关键注解概览
      • Spring框架中的关键注解概览
        • 1. `@Autowired`
        • 2. `@Component`
        • 3. `@Service`
        • 4. `@Controller`
    • 三、Spring Boot常用注解
      • Spring Boot中常用的注解详解
      • Spring Boot中常用的注解详解
        • 1. `@SpringBootApplication`
        • 2. `@Configuration`
        • 3. `@RestController`
    • 四、选择器注解
      • @Conditional、@Profile等选择器注解的用法
    • 五、缓存注解
      • 使用Spring Boot的缓存注解提高性能
      • @Conditional、@Profile等选择器注解的用法
        • 1. `@Conditional`
        • 2. `@Profile`
    • 六、定时器注解
      • Spring Boot中的定时任务注解使用
      • Spring Boot中的定时任务注解使用
        • 1. `@Scheduled` 注解
        • 2. 配置定时任务
        • 3. 自定义定时任务的时间表达式
    • 七、注入配置文件
      • 从配置文件(properties)中注入属性
      • 从配置文件(properties)中注入属性
        • 1. 使用 `@Value` 注解
        • 2. 使用 `@ConfigurationProperties` 注解
    • 八、Jpa注解
      • 使用JPA进行数据持久化的关键注解
      • 使用JPA进行数据持久化的关键注解
        • 1. `@Entity`
        • 2. `@Table`
        • 3. `@Id`
        • 4. 其他JPA注解
    • 九、实体类注解
      • 实体类注解详解
        • 1. `@MappedSuperclass`
        • 2. `@NoRepositoryBean`
        • 3. `@Column`
        • 4. `@Id`
        • 5. `@Transient`
        • 6. `@Basic`
        • 7. `@JsonIgnore`
        • 8. `@JoinColumn`, `@OneToOne`, `@OneToMany`, `@ManyToOne`
    • 十、导入配置文件
      • 导入外部配置文件的方法
      • 导入外部配置文件的方法
        • 1. 创建外部配置文件
        • 2. 导入外部配置文件
        • 3. 使用配置属性
    • 十一、事务注解
      • Spring Boot事务管理的注解介绍
      • Spring Boot事务管理的注解介绍
        • 1. `@Transactional` 注解
        • 2. 事务传播行为
        • 3. 事务回滚
    • 十二、Spring Cloud注解
      • Spring Cloud注解的应用
      • Spring Cloud注解的应用
        • 1. `@EnableEurekaServer`
        • 2. `@EnableDiscoveryClient`
        • 3. `@LoadBalanced`
        • 4. `@EnableCircuitBreaker`
        • 5. `@HystrixCommand`
    • 总结

在这里插入图片描述

博主 默语带您 Go to New World.
个人主页—— 默语 的博客👦🏻
《java 面试题大全》
🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭
《MYSQL从入门到精通》数据库是开发者必会基础之一~
🪁 吾期望此文有资助于尔,即使粗浅难及深广,亦备添少许微薄之助。苟未尽善尽美,敬请批评指正,以资改进。!💻⌨

![在这里插入图片描述](https://img-blog.csdnimg.cn/0ae9ec71c6d14a058b09f465c64a4354.png)

深入探讨Spring Boot中的常用注解

摘要

作为博主,我将带您深入探讨Spring Boot中的常用注解,这些注解在Java应用程序开发中扮演着重要的角色。我们将逐一介绍这些注解的作用和用法,为您提供全面的知识,让您在Spring Boot项目中更加自信地应用它们。不仅如此,还将附上一些实际的代码示例,以帮助您更好地理解这些注解的实际应用。让我们开始这次深入探讨吧!

引言

Spring Boot是Java应用程序开发的瑞士军刀,而注解是其中的利器之一。在本篇技术博客中,我们将一起学习Spring Boot中的常用注解,包括Spring框架中的一些关键注解,以及Spring Boot特有的注解。这些注解能够帮助您简化开发过程、提高代码质量、增加应用程序的性能和可维护性。让我们一步步深入了解它们。

一、认识Spring Boot

Spring Boot简介和核心概念

Spring Boot是一个用于创建独立的、生产级的基于Spring框架的应用程序的工具。它简化了Spring应用程序的开发,无需繁琐的配置,只需少量的注解和约定即可轻松创建强大的应用。Spring Boot的核心概念包括自动配置、起步依赖、嵌入式Web服务器等。通过这些核心概念,您可以快速搭建一个强大的Spring Boot应用。


核心概念详解

1. 自动配置

Spring Boot的自动配置是其核心特性之一。它允许您在不需要手动配置的情况下,快速搭建Spring Boot应用程序。通过使用各种条件注解,Spring Boot能够根据应用的依赖和环境自动配置各种功能,包括数据库连接、Web服务、消息队列等。这大大减少了开发人员的工作量。

@SpringBootApplication
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

上面的代码示例中,@SpringBootApplication 注解用于启用Spring Boot的自动配置功能,使得您无需手动配置应用程序的入口点。

2. 起步依赖

Spring Boot提供了一系列的起步依赖,它们是预定义的依赖关系,用于简化项目的构建和管理。通过添加适当的起步依赖,您可以轻松地引入各种功能和技术,如数据库访问、安全性、消息队列等。这些依赖会自动处理所需的配置和依赖关系。

xml<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>

上面的XML配置示例展示了如何使用起步依赖来引入Spring Boot的数据访问和Web功能,这样您可以专注于应用程序的业务逻辑而不必担心底层配置。

3. 嵌入式Web服务器

Spring Boot内置了多种嵌入式Web服务器,包括Tomcat、Jetty、Undertow等。这使得您可以轻松地将应用程序打包为可执行的JAR文件,并在其中嵌入Web服务器,无需外部容器。这样可以简化部署和管理。

@RestController
public class HelloController {@GetMapping("/hello")public String sayHello() {return "Hello, Spring Boot!";}
}

在上述示例中,我们创建了一个简单的REST控制器,不需要额外的配置,Spring Boot将自动将它注册到嵌入式Web服务器中,使其成为可访问的端点。

通过这些核心概念,Spring Boot使您能够迅速搭建强大的应用程序,同时减少了繁琐的配置工作。结合自动配置、起步依赖和嵌入式Web服务器,您可以更专注于应用程序的业务逻辑开发。

二、Spring中常用注解

Spring框架中的关键注解概览

Spring框架中有许多重要的注解,例如@Autowired@Component@Service@Controller等。这些注解用于实现依赖注入、组件扫描和请求处理等核心功能。了解这些注解的用法对于Spring应用程序的开发至关重要。


Spring框架中的关键注解概览

Spring框架中的关键注解是实现依赖注入、组件扫描和请求处理等核心功能的重要工具。下面我们将简要介绍一些常用的注解,并提供示例代码以帮助您更好地理解它们的用法。

1. @Autowired

@Autowired 注解用于自动装配(依赖注入)Spring容器中的Bean。它可以用在字段、构造函数、Setter方法上,让Spring自动解析并注入相应类型的Bean。

@Service
public class MyService {private final MyRepository repository;@Autowiredpublic MyService(MyRepository repository) {this.repository = repository;}// ...
}

在上述示例中,@Autowired 注解用于构造函数,使得MyService 类可以自动注入一个MyRepository 的实例。

2. @Component

@Component 注解用于将一个Java类标记为Spring组件,表示这个类会被Spring容器扫描并创建一个Bean实例。通常用于标记普通的Java类。

@Component
public class MyComponent {// ...
}

这个示例中,MyComponent 类被标记为一个Spring组件,它将被Spring容器管理。

3. @Service

@Service 注解是@Component 注解的特定版本,通常用于标记业务逻辑层的类。它有助于更好地表示类的用途。

@Service
public class MyService {// ...
}

@Service 注解用于标记MyService 类,指示它是一个业务逻辑层的组件。

4. @Controller

@Controller 注解通常用于标记Spring MVC中的控制器类,它处理HTTP请求并返回视图或数据。

@Controller
public class MyController {@RequestMapping("/hello")public String sayHello() {return "hello";}
}

在上述示例中,@Controller 注解用于标记MyController 类,表示它是一个控制器,@RequestMapping 注解定义了处理HTTP请求的方法。

这些注解是Spring框架中的基础元素,用于实现依赖注入、组件扫描和请求处理等核心功能。了解它们的用法对于Spring应用程序的开发非常重要。

三、Spring Boot常用注解

Spring Boot中常用的注解详解

Spring Boot为开发者提供了一系列常用注解,用于配置应用、管理Bean、处理请求等。我们将详细介绍@SpringBootApplication@Configuration@RestController等常用注解,帮助您更好地构建Spring Boot应用。


Spring Boot中常用的注解详解

Spring Boot为开发者提供了一系列常用注解,用于配置应用、管理Bean、处理请求等。下面我们将详细介绍一些常用的注解,包括@SpringBootApplication@Configuration@RestController 等,以帮助您更好地构建Spring Boot应用。

1. @SpringBootApplication

@SpringBootApplication 是Spring Boot应用程序的入口点,通常放在主应用程序类上。它是一个复合注解,包括@Configuration@ComponentScan@EnableAutoConfiguration。使用这个注解,您可以轻松地启用Spring Boot的自动配置功能。

@SpringBootApplication
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

上面的示例展示了一个典型的Spring Boot应用程序的入口点,通过@SpringBootApplication 注解,它自动配置了应用程序并启动了Spring Boot。

2. @Configuration

@Configuration 注解表示这个类是一个Spring应用上下文的Java配置类。它通常与@Bean 注解一起使用,用于定义Bean的配置。

@Configuration
public class MyConfiguration {@Beanpublic MyBean myBean() {return new MyBean();}
}

在上述示例中,@Configuration 注解用于标记一个配置类,@Bean 注解用于定义一个Bean。

3. @RestController

@RestController 注解用于标记一个类,表示它是一个RESTful Web服务控制器。它将处理HTTP请求并返回JSON或XML等数据。

@RestController
public class MyRestController {@GetMapping("/hello")public String sayHello() {return "Hello, Spring Boot!";}
}

在上述示例中,@RestController 注解用于标记MyRestController 类,@GetMapping 注解定义了处理HTTP GET请求的方法,并返回一个字符串作为响应。

这些注解是Spring Boot应用程序中常用的元素,有助于配置应用、管理Bean和处理请求。通过合理使用它们,您可以更轻松地构建强大的Spring Boot应用

四、选择器注解

@Conditional、@Profile等选择器注解的用法

选择器注解允许您根据条件选择性地配置组件。我们将深入研究@Conditional@Profile等注解的使用方式,以及如何根据不同的条件加载不同的Bean。

五、缓存注解

使用Spring Boot的缓存注解提高性能

在性能优化方面,缓存起着重要的作用。我们将讨论@Cacheable@CacheEvict等缓存注解的使用,以及如何通过缓存提高应用程序的响应速度。


@Conditional、@Profile等选择器注解的用法

选择器注解允许您根据条件选择性地配置组件。在Spring框架中,@Conditional@Profile 等注解用于根据不同的条件加载不同的Bean,从而实现更灵活的应用程序配置。

1. @Conditional

@Conditional 注解允许您根据特定条件来决定是否创建一个Bean。您可以创建自定义条件类实现Condition 接口,并将其与 @Conditional 注解一起使用。

@Configuration
public class MyConfiguration {@Bean@Conditional(MyCondition.class)public MyBean myBean() {return new MyBean();}
}
public class MyCondition implements Condition {@Overridepublic boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {// 根据特定条件返回true或falsereturn someCondition;}
}

上面的示例中,@Conditional 注解用于 myBean 方法,它引用了自定义的 MyCondition 条件类。根据 MyCondition 中的条件逻辑,决定是否创建 MyBean

2. @Profile

@Profile 注解允许您根据不同的配置文件来加载不同的Bean。您可以使用 spring.profiles.active 属性来指定要激活的配置文件。

@Profile("development")
@Component
public class DevelopmentDataSource {// ...
}
@Profile("production")
@Component
public class ProductionDataSource {// ...
}

在上述示例中,@Profile 注解用于两个不同的数据源类,分别适用于"development" 和 “production” 配置文件。根据激活的配置文件,Spring会选择加载相应的Bean。

这些选择器注解允许您根据条件或配置文件的不同加载不同的Bean,这对于处理不同环境、不同配置要求的应用程序非常有用。通过适当使用它们,您可以实现更加灵活的应用程序配置。

六、定时器注解

Spring Boot中的定时任务注解使用

定时任务是许多应用程序中常见的需求。我们将介绍@Scheduled注解的使用,以及如何在Spring Boot中创建定时任务,执行周期性的任务。


Spring Boot中的定时任务注解使用

定时任务是许多应用程序中常见的需求,它们允许您周期性地执行特定的任务。在Spring Boot中,您可以使用@Scheduled 注解来创建定时任务,让我们深入了解其用法。

1. @Scheduled 注解

@Scheduled 注解用于标记一个方法,指示该方法应该周期性地执行。您可以在@Scheduled 注解中指定执行的时间间隔、固定延迟或固定速率。

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;@Component
public class MyScheduledTask {@Scheduled(fixedRate = 10000) // 每10秒执行一次public void myTask() {// 执行定时任务的逻辑}
}

在上述示例中,@Scheduled 注解用于 myTask 方法,它被配置为每隔10秒执行一次。您可以根据需求配置不同的时间间隔。

2. 配置定时任务

为了启用@Scheduled 注解,您需要在Spring Boot应用程序的配置类上添加@EnableScheduling 注解。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;@SpringBootApplication
@EnableScheduling
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

上述代码示例中,@EnableScheduling 注解用于启用Spring Boot的定时任务功能。

3. 自定义定时任务的时间表达式

除了 fixedRate,您还可以使用更复杂的时间表达式来配置定时任务,例如cron 表达式。cron 表达式允许您非常灵活地定义执行时间。

@Scheduled(cron = "0 0 12 * * ?") // 每天中午12点执行
public void scheduledTaskWithCronExpression() {// 执行定时任务的逻辑
}

在上述示例中,@Scheduled 注解使用了一个cron 表达式,该表达式指示定时任务每天中午12点执行。

通过使用@Scheduled 注解,您可以轻松地创建和管理定时任务,执行周期性的任务,例如数据备份、报告生成等。这对于应用程序的自动化和计划任务非常有用。

七、注入配置文件

从配置文件(properties)中注入属性

应用程序的配置信息通常存储在配置文件中。我们将演示如何使用@Value@ConfigurationProperties注解来将配置文件中的属性注入到Spring Bean中,以方便配置管理。


从配置文件(properties)中注入属性

应用程序的配置信息通常存储在配置文件中。在Spring Boot中,您可以使用 @Value@ConfigurationProperties 注解来将配置文件中的属性注入到Spring Bean中,以方便配置管理。

1. 使用 @Value 注解

@Value 注解允许您将配置文件中的属性值注入到Spring Bean的字段或方法参数中。首先,您需要在配置文件(如 application.propertiesapplication.yml)中定义属性。

properties# application.properties
myapp.database.url=jdbc:mysql://localhost:3306/mydb
myapp.database.username=myuser
myapp.database.password=mypassword

然后,在您的Spring Bean 中使用 @Value 注解来注入这些属性:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;@Component
public class MyComponent {@Value("${myapp.database.url}")private String databaseUrl;@Value("${myapp.database.username}")private String databaseUsername;@Value("${myapp.database.password}")private String databasePassword;// ...
}

通过上述示例,MyComponent 类中的字段 databaseUrldatabaseUsernamedatabasePassword 将被注入为相应的属性值。

2. 使用 @ConfigurationProperties 注解

另一种方法是使用 @ConfigurationProperties 注解,它允许您将配置文件中的属性值映射到一个JavaBean中。首先,创建一个用于存储属性的配置类:

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "myapp.database")
public class DatabaseProperties {private String url;private String username;private String password;// Getters and setters
}

然后,在配置文件中定义属性:

# application.properties
myapp.database.url=jdbc:mysql://localhost:3306/mydb
myapp.database.username=myuser
myapp.database.password=mypassword

在这个配置文件中,定义了数据库连接的URL、用户名和密码属性。这些属性将用于之前的示例中,通过 @Value@ConfigurationProperties 注解注入到Spring Bean中,以进行配置属性的管理。

八、Jpa注解

使用JPA进行数据持久化的关键注解

JPA是Java持久化API的缩写,它用于将Java对象映射到数据库表。我们将深入探讨@Entity@Table和其他JPA注解的使用,以实现数据持久化。


使用JPA进行数据持久化的关键注解

JPA(Java Persistence API)是Java的一种标准API,用于实现数据持久化。JPA使得将Java对象映射到数据库表变得简单而便捷。以下是一些JPA中的关键注解以及它们的用法:

1. @Entity

@Entity 注解用于标记一个Java类,表示它是一个JPA实体类,将映射到数据库中的表。每个实体类通常对应一个数据库表。

import javax.persistence.Entity;
import javax.persistence.Id;@Entity
public class User {@Idprivate Long id;private String username;private String email;// 省略其他属性和方法
}

在上述示例中,User 类被标记为一个JPA实体类,表示它将映射到数据库表。

2. @Table

@Table 注解用于指定实体类与数据库表的映射关系。您可以通过 name 属性指定数据库表的名称。

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;@Entity
@Table(name = "users")
public class User {@Idprivate Long id;private String username;private String email;// 省略其他属性和方法
}

在上述示例中,@Table 注解指定了数据库表的名称为 “users”。

3. @Id

@Id 注解用于标记一个实体类的属性,表示该属性是数据库表的主键。每个实体类必须有一个主键属性。

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;@Entity
@Table(name = "users")
public class User {@Idprivate Long id;private String username;private String email;// 省略其他属性和方法
}

在上述示例中,id 属性被标记为主键属性。

4. 其他JPA注解

除了上述注解之外,JPA还提供了许多其他注解,用于配置数据库表的关系、映射、检索策略等。例如,@OneToMany@ManyToOne@JoinColumn 等注解用于定义实体之间的关联关系。您可以根据具体的需求来使用这些注解,以实现数据持久化和关联关系的配置。

JPA注解为Java对象与数据库表的映射提供了便捷的方式,使得数据持久化变得更加容易。通过使用这些注解,您可以轻松地定义实体类、表名、主键等数据库映射的细节。

九、实体类注解

实体类注解详解

实体类在JPA中扮演着重要的角色,我们将详细讨论与实体类相关的注解,包括@MappedSuperclass@NoRepositoryBean@Column@Id@Transient@Basic@JsonIgnore@JoinColumn@OneToOne@OneToMany@ManyToOne等。


实体类注解在JPA(Java Persistence API)中扮演着关键的角色,用于定义实体类的属性、关系和持久性行为。这些注解允许你将Java对象映射到数据库表,以便在应用程序中进行数据持久化和查询。让我们逐个讨论这些实体类注解的作用和用法:

1. @MappedSuperclass

@MappedSuperclass 注解用于创建一个可重用的实体类的基类。它本身不能被实例化,但它的属性和注解可以继承给其子类,允许多个实体类共享相同的字段和映射规则。

@MappedSuperclass
public class BaseEntity {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)protected Long id;// 其他共享属性和方法
}
2. @NoRepositoryBean

@NoRepositoryBean 注解用于标记一个接口,该接口不应该由Spring Data JPA自动创建实例。通常用于定义自定义的共享接口,而不是具体的仓库接口。

@NoRepositoryBean
public interface MyCustomRepository<T, ID> {// 自定义查询方法
}
3. @Column

@Column 注解用于指定实体类属性与数据库表列的映射关系,包括列名、类型、长度、是否可为空等。

@Entity
public class Person {@Column(name = "full_name", nullable = false)private String name;// 其他属性和注解
}
4. @Id

@Id 注解用于标识实体类中的主键属性。每个实体类必须有一个主键属性,用于唯一标识实体。

@Entity
public class Product {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;// 其他属性和注解
}
5. @Transient

@Transient 注解用于标记实体类属性,表示这些属性不需要持久化到数据库。通常用于临时或计算属性,不会映射到数据库表中。

@Entity
public class Employee {@Transientprivate double monthlySalary; // 不会持久化到数据库// 其他属性和注解
}
6. @Basic

@Basic 注解用于指定属性的基本配置,例如是否可为空、列的名字等。它通常用于调整默认的持久性行为。

@Entity
public class Book {@Basic(optional = false)private String title;// 其他属性和注解
}
7. @JsonIgnore

@JsonIgnore 注解通常与Jackson库一起使用,用于指示在将实体类序列化为JSON时,忽略特定属性。这对于隐藏某些属性在JSON输出中非常有用。

@Entity
public class User {@JsonIgnoreprivate String password; // 在JSON中忽略密码字段// 其他属性和注解
}
8. @JoinColumn, @OneToOne, @OneToMany, @ManyToOne

这些注解用于定义实体之间的关系,包括一对一、一对多和多对一关联。@JoinColumn 用于指定外键列的映射,@OneToOne 表示一对一关联,@OneToMany 表示一对多关联,@ManyToOne 表示多对一关联。

@Entity
public class Author {@OneToMany(mappedBy = "author")private List<Book> books; // 一对多关联// 其他属性和注解
}

这些实体类注解是JPA中非常重要的一部分,它们帮助你定义实体类的结构、属性和关系,以便实现数据持久化和查询功能。根据你的应用程序需求,你可以组合使用这些注解来建立强大的数据模型。

十、导入配置文件

导入外部配置文件的方法

有时候,应用程序需要从外部配置文件中加载配置信息。我们将介绍如何使用@PropertySource注解来导入外部配置文件,以及如何在应用中使用这些配置信息。


导入外部配置文件的方法

有时候,应用程序需要从外部配置文件中加载配置信息。在Spring中,您可以使用@PropertySource注解来导入外部配置文件,然后在应用中使用这些配置信息。

1. 创建外部配置文件

首先,创建一个外部配置文件,通常使用 .properties.yml 格式。例如,创建一个名为 myapp.properties 的配置文件:

properties# myapp.properties
app.name=My Application
app.version=1.0
app.author=John Doe

在上述示例中,配置文件包含了应用程序的名称、版本和作者信息。

2. 导入外部配置文件

在Spring Boot应用程序中,您可以使用 @PropertySource 注解来导入外部配置文件。通常,您将这个注解放在配置类上。

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;@Configuration
@PropertySource("classpath:myapp.properties")
public class MyConfiguration {// 配置类内容
}

上述示例中,@PropertySource 注解用于导入 myapp.properties 文件,它位于类路径下。

3. 使用配置属性

现在,您可以在应用程序中使用导入的配置属性。通过 @Value 注解,您可以将配置属性注入到Spring Bean中。

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;@Component
public class MyAppInfo {@Value("${app.name}")private String appName;@Value("${app.version}")private String appVersion;@Value("${app.author}")private String appAuthor;// 省略其他属性和方法
}

在上述示例中,@Value 注解用于将配置属性注入到 MyAppInfo 类的字段中。

通过这种方式,您可以从外部配置文件中加载配置属性,并在应用程序中使用这些属性,以方便配置和管理应用程序的参数和设置。

十一、事务注解

Spring Boot事务管理的注解介绍

事务管理对于数据库操作是至关重要的。我们将探讨@Transactional注解的使用,以确保数据库操作的一致性和可靠性。


Spring Boot事务管理的注解介绍

事务管理是数据库操作的重要方面,它确保了数据的一致性和可靠性。在Spring Boot中,您可以使用 @Transactional 注解来管理事务,以便在数据库操作时维护数据的完整性。

1. @Transactional 注解

@Transactional 注解用于标记一个方法或类,表示这些方法或类是事务性的。当一个方法或类被标记为 @Transactional 时,Spring Boot将会在执行该方法或类时自动管理事务的开始、提交或回滚。

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;@Service
public class MyService {@Transactionalpublic void performDatabaseOperation() {// 执行数据库操作}
}

在上述示例中,performDatabaseOperation 方法被标记为 @Transactional,这表示在方法内执行的数据库操作将受到事务管理的支持。

2. 事务传播行为

@Transactional 注解允许您指定事务的传播行为,以确定方法内部调用其他带有 @Transactional 注解的方法时的事务行为。例如,您可以使用 Propagation.REQUIRED 来指定如果没有现有事务,则开启一个新事务。

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.annotation.Propagation;@Service
public class MyService {@Transactional(propagation = Propagation.REQUIRED)public void performDatabaseOperation() {// 执行数据库操作anotherTransactionalMethod();}@Transactionalpublic void anotherTransactionalMethod() {// 执行其他数据库操作}
}

在上述示例中,performDatabaseOperation 方法和 anotherTransactionalMethod 方法都有 @Transactional 注解,但由于 performDatabaseOperation 使用了 Propagation.REQUIRED,它们将在同一个事务中运行。

3. 事务回滚

如果在带有 @Transactional 注解的方法中抛出运行时异常,事务将自动回滚。这可以确保在发生错误时,数据库不会处于不一致的状态。

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;@Service
public class MyService {@Transactionalpublic void performDatabaseOperation() {// 执行数据库操作if (someCondition) {throw new RuntimeException("An error occurred");}}
}

在上述示例中,如果 someCondition 为真,performDatabaseOperation 方法中的事务将回滚,确保数据库不会受到不一致的影响。

通过使用 @Transactional 注解,Spring Boot使事务管理变得更加简单,确保了数据库操作的一致性和可靠性。如果出现问题,事务将回滚,从而避免了数据不一致。这对于数据库操作非常重要。

十二、Spring Cloud注解

Spring Cloud注解的应用

Spring Cloud是构建分布式系统的利器,我们将介绍一些关键的Spring Cloud注解,包括@EnableEurekaServer@EnableDiscoveryClient@LoadBalanced@EnableCircuitBreaker@HystrixCommand等,帮助您构建强大的分布式应用。


Spring Cloud注解的应用

Spring Cloud是构建分布式系统的强大工具,它提供了一系列注解,用于简化和增强分布式应用的开发。以下是一些关键的Spring Cloud注解以及它们的应用:

1. @EnableEurekaServer

@EnableEurekaServer 注解用于启用Eureka服务器,Eureka是Spring Cloud的服务发现组件。通过使用这个注解,您可以将应用程序配置为Eureka服务器,以便其他应用程序可以注册和发现它们。

import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}
}
2. @EnableDiscoveryClient

@EnableDiscoveryClient 注解用于启用服务注册和发现功能,允许您的应用程序作为服务注册到Eureka服务器或其他服务注册中心。

import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@EnableDiscoveryClient
@SpringBootApplication
public class MyServiceApplication {public static void main(String[] args) {SpringApplication.run(MyServiceApplication.class, args);}
}
3. @LoadBalanced

@LoadBalanced 注解用于启用负载均衡功能。通过在RestTemplate或WebClient上使用此注解,您可以轻松地实现负载均衡的HTTP请求。

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;@Bean
@LoadBalanced
public RestTemplate restTemplate() {return new RestTemplate();
}
4. @EnableCircuitBreaker

@EnableCircuitBreaker 注解用于启用断路器(Hystrix)功能。Hystrix是一种用于处理分布式系统中的故障和延迟的库。

import org.springframework.cloud.client.circuit.EnableCircuitBreaker;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@EnableCircuitBreaker
@SpringBootApplication
public class MyServiceApplication {public static void main(String[] args) {SpringApplication.run(MyServiceApplication.class, args);}
}
5. @HystrixCommand

@HystrixCommand 注解用于标记一个方法,以指示它是一个断路器(Hystrix)命令。这允许您定义故障时的降级逻辑。

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.web.client.RestTemplate;@HystrixCommand(fallbackMethod = "fallbackMethod")
public String someMethod() {// 业务逻辑
}public String fallbackMethod() {// 降级逻辑
}

通过使用这些Spring Cloud注解,您可以构建强大的分布式应用程序,实现服务注册与发现、负载均衡、断路器等关键功能,从而提高系统的可伸缩性和可靠性。Spring Cloud的这些注解简化了分布式系统的开发,减少了复杂性。

总结

在本篇技术博客中,我们深入探讨了Spring Boot中的常用注解,从Spring Boot的核心概念和Spring框架的关键注解,到Spring Boot中的常用注解、选择器注解、定时器注解、注入配置文件、国际化和本地化、JPA注解、导入配置文件、事务注解、以及Spring Cloud注解。这些注解提供了丰富的功能和工具,帮助开发人员轻松构建强大的应用程序和分布式系统。

总结本篇博客的主要内容:

  1. Spring Boot简化了Spring应用程序的开发,提供了自动配置、起步依赖和嵌入式Web服务器等核心概念,使开发更加便捷。
  2. Spring框架中的关键注解如@Autowired@Component@Service@Controller等用于实现依赖注入、组件扫描和请求处理等核心功能。
  3. Spring Boot提供了一系列常用注解,如@SpringBootApplication@Configuration@RestController等,用于配置应用、管理Bean、处理请求等。
  4. 选择器注解如@Conditional@Profile允许根据条件选择性配置组件,用于实现更灵活的应用程序配置。
  5. 定时器注解@Scheduled用于创建定时任务,执行周期性的任务,如数据备份、报告生成等。
  6. 通过@Value@ConfigurationProperties注解,可以将配置文件中的属性注入到Spring Bean中,以方便配置管理。
  7. 国际化和本地化通过MessageSource和Thymeleaf等工具实现,为应用程序提供多语言支持。
  8. JPA注解如@Entity@Table@Id用于实现数据持久化,将Java对象映射到数据库表。
  9. 导入外部配置文件使用@PropertySource注解,将外部配置属性导入到应用程序中。
  10. 事务注解@Transactional用于管理数据库事务,确保数据操作的一致性和可靠性。
  11. Spring Cloud注解如@EnableEurekaServer@EnableDiscoveryClient@LoadBalanced@EnableCircuitBreaker@HystrixCommand用于构建分布式系统,实现服务注册与发现、负载均衡、断路器等功能。

这些注解和相关概念为Spring Boot和Spring Cloud开发提供了强大的工具和功能,帮助开发人员构建现代化的应用程序和分布式系统。通过深入理解和灵活应用这些注解,开发人员可以提高开发效率,并构建更加稳定和可扩展的应用。希望这篇博客对您有所帮助,激发了您对Spring Boot和Spring Cloud的兴趣和学习热情。

🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥

如对本文内容有任何疑问、建议或意见,请联系作者,作者将尽力回复并改进📓;(联系微信:Solitudemind )

点击下方名片,加入IT技术核心学习团队。一起探索科技的未来,共同成长。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/162220.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GaussDB for openGauss部署形态

前言 华为云数据库GaussDB是华为自主创新研发的分布式关系型数据库&#xff0c;具有高性能、高可用、高安全、低成本的特点&#xff0c;本文带你详细了解GaussDB数据库的部署形态。 1、GaussDB部署形态三种类型 GaussDB部署形态&#xff1a;单机 独立部署是将数据库组件部署…

prometheus获取kubelet接口监控数据

一、前言 k8s集群的kubelet服务内部有自带的cadvisor服务用于收集k8s集群的监控数据&#xff0c;所以可以通过调用kubelet的接口就能获取pod的资源监控数据&#xff0c;在新版本的k8s中&#xff0c;kubelet的监控数据获取端口为10250端口&#xff0c;老版本的是10255端口 二、…

基于Scrapyd与Gerapy部署scrapy爬虫方案【可用于分布式爬虫部署】

scrapyd部署爬虫 Scrapyd 是一个基于 Scrapy 的开源项目&#xff0c;它提供了一个简单的方式来部署、运行和监控 Scrapy 爬虫。它是一个用于集成 Scrapy 爬虫到分布式架构中的工具&#xff0c;允许您在分布式环境中运行爬虫&#xff0c;并提供了一组 Web API&#xff0c;用于管…

docker入门加实战—部署Java和前端项目

docker入门加实战—部署Java和前端项目 部署之前&#xff0c;先删除nginx&#xff0c;和自己创建的dd两个容器&#xff1a; docker rm -f nginx dd部署Java项目 作为演示&#xff0c;我们的Java项目比较简单&#xff0c;提供了一个接口&#xff1a; 配置文件连接docker里的m…

ios safari 浏览器跳转页面没有自适应

今天开发遇到了一个问题&#xff0c;当用户点击浏览器中的表单进行注册时&#xff0c;表单元素会放大&#xff0c;随后跳转页面无法还原到初始状态。 这是因为如果 的 font-size 被设定为 16px 或更大&#xff0c;那么 iOS 上的 Safari 将正常聚焦到输入表单中。但是&#xff…

MultiPlayerShoot----C++学习记录02人物

获取人物和动画 可以再Mixamo下载你想要的人物&#xff0c;将文件全部导入&#xff08;不做更改&#xff09; 再在网站里选到动画&#xff0c;下载一些动画左转&#xff0c;右转&#xff0c;起跳&#xff0c;跳中&#xff0c;落下 导入动画&#xff0c;此时不用选择导入骨骼&a…

智能化安全巡更巡查系统—提升安全管理效率

传统的巡检都是手工完成&#xff0c;记录、拍照&#xff0c;回到办公室打印表单再交给作业队伍整改&#xff0c;再去现场核实复查&#xff0c;流程繁琐&#xff0c;效率低。而且大部分工地为了减少麻烦&#xff0c;人员往往都是口头沟通&#xff0c;存在很大质量风险&#xff0…

【QT】常用控件——按钮组

继承Widget PushButton 设置图片&#xff0c;先导入图片资源&#xff0c;见&#xff1a;【QT】资源文件导入_复制其他项目中的文件到qt项目中_StudyWinter的博客-CSDN博客 在布局中添加图片 调整尺寸 toolButton 显示图片、文本 显示图片&#xff08;图片和文字都有时&#…

web漏洞挖掘指南-前端跨域漏洞

web漏洞挖掘指南 前端跨域漏洞 如果你对网络安全入门感兴趣&#xff0c;那么你需要的话可以点击这里&#x1f449;【入门&进阶全套282G学习资源包免费分享&#xff01;】 一、何为跨域 1.设想一种场景&#xff0c;一个恶意网站上嵌入了一个iframe标签去加载银行的登陆页…

优化大型机床装配调度:项目管理软件的应用方法

最近&#xff0c;Zoho Projects项目管理软件的一位资深客户&#xff0c;跟我们分享了他是如何把Projects应用于大型机床装配的复杂调度。小Z觉得特别有必要&#xff0c;把各行各业的成功应用和实践经验发布出来。在取得这位资深用户同意后&#xff0c;我们推出了本篇文章&#…

vcruntime140.dll如何修复,五种修复vcruntime140.dll方法分享

当我们在运行某些程序时&#xff0c;可能会遇到“找不到VCRuntime140.dll”的错误。这个错误通常表示我们的系统中缺少某个重要的动态链接库文件&#xff0c;而VCRuntime140.dll正是其中之一。本文将详细介绍如何修复这个问题。 一、问题出现的原因 首先&#xff0c;我们需要了…

2.3 如何使用FlinkSQL读取写入到JDBC(MySQL)

1、JDBC SQL 连接器 FlinkSQL允许使用 JDBC连接器&#xff0c;向任意类型的关系型数据库读取或者写入数据 添加Maven依赖 <dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-jdbc</artifactId><version>3.1…

MySQL双主一从高可用

MySQL双主一从高可用 文章目录 MySQL双主一从高可用环境说明1.配置前的准备工作2.配置yum源 1.在部署NFS服务2.安装主数据库的数据库服务&#xff0c;并挂载nfs3.初始化数据库4.配置两台master主机数据库5.配置m1和m2成为主数据库6.安装、配置keepalived7.安装部署从数据库8.测…

用 JHipster Azure Spring Apps 构建和部署 Spring 应用

作者&#xff1a;Hang Wang 排版&#xff1a;Alan Wang 此教程将向您展示如何使用 React、Spring Boot 和 PostgreSQL 在 Azure 上构建和部署全栈 Web 应用程序&#xff0c;由 JHipster Azure Spring Apps 提供支持。 JHipster Azure Spring Apps 为全栈 Web 开发提供了全面的…

虚拟现实VR技术在医疗行业的应用介绍

虚拟现实 (VR) 虽然经常与游戏联系在一起&#xff0c;但不可否认&#xff0c;未来科技少不了虚拟现实&#xff0c;其应用可以彻底改变许多行业。在医疗领域&#xff0c;无数人正在探索 VR 可以帮助患者和医疗从业者实现更好的治疗结果治疗方式&#xff0c;比如在手术、疼痛管理…

下拉选择器的树状结构图

类似&#xff1a;【Vue-Treeselect 和 vue3-treeselect】树形下拉框 一&#xff1a;图 二&#xff1a;如果有多层级的数据结构&#xff0c;可以用treeselect插件实现 1、安装&#xff1a; npm install --save riophae/vue-treeselect 2、实现&#xff1a; <el-form ref&qu…

[计算机入门] 应用软件介绍(娱乐类)

3.21 应用软件介绍(娱乐类) 3.21.1 音乐&#xff1a;酷狗 音乐软件是一类可以帮助人们播放、管理和发现音乐的应用程序。它们提供了丰富的音乐内容&#xff0c;用户可以通过搜索、分类浏览或个性化推荐等方式找到自己喜欢的歌曲、专辑或艺术家。音乐软件还通常支持创建和管理…

【学习笔记】RabbitMQ-5 消息的可靠性投递 以及示例代码

参考资料 RabbitMQ官方网站RabbitMQ官方文档噼咔噼咔-动力节点教程 文章目录 八、RabbitMQ的确认机制 -confirm8.1 Confirm 模式简介8.2 具体代码设置8.2.1 **设置思路**&#xff1a;8.2.2 **代码实现**8.2.2.1 开启生产者的确认模式.8.2.2.2 实现接口ComfirmCallback8.2.2.3 配…

Git 分布式版本控制工具

目录 1. 前言1.1 什么是Git1.2 使用Git能做什么 2. Git概述2.1 Git简介2.2 Git下载与安装 3. Git代码托管服务3.1 常用的Git代码托管服务3.2 码云代码托管服务3.2.1 注册码云账号3.2.2 登录码云3.2.3 创建远程仓库3.2.4 邀请其他用户成为仓库成员 4. Git常用命令4.1 Git全局设置…

Flume 整合 Kafka

1.背景 先说一下,为什么要使用 Flume + Kafka? 以实时流处理项目为例,由于采集的数据量可能存在峰值和峰谷,假设是一个电商项目,那么峰值通常出现在秒杀时,这时如果直接将 Flume 聚合后的数据输入到 Storm 等分布式计算框架中,可能就会超过集群的处理能力,这时采用 Kaf…