• Spring Boot中的常用注解


    Spring Boot中的常用注解

    在这里插入图片描述

    博主 默语带您 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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    上面的代码示例中,@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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    上面的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!";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在上述示例中,我们创建了一个简单的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;
    
        @Autowired
        public MyService(MyRepository repository) {
            this.repository = repository;
        }
        
        // ...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

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

    2. @Component

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

    @Component
    public class MyComponent {
        // ...
    }
    
    • 1
    • 2
    • 3
    • 4

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

    3. @Service

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

    @Service
    public class MyService {
        // ...
    }
    
    • 1
    • 2
    • 3
    • 4

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

    4. @Controller

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

    @Controller
    public class MyController {
        @RequestMapping("/hello")
        public String sayHello() {
            return "hello";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在上述示例中,@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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

    2. @Configuration

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

    @Configuration
    public class MyConfiguration {
        @Bean
        public MyBean myBean() {
            return new MyBean();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

    3. @RestController

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

    @RestController
    public class MyRestController {
        @GetMapping("/hello")
        public String sayHello() {
            return "Hello, Spring Boot!";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在上述示例中,@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 {
        @Override
        public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
            // 根据特定条件返回true或false
            return someCondition;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

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

    2. @Profile

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

    @Profile("development")
    @Component
    public class DevelopmentDataSource {
        // ...
    }
    @Profile("production")
    @Component
    public class ProductionDataSource {
        // ...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在上述示例中,@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() {
            // 执行定时任务的逻辑
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在上述示例中,@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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

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

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

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

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

    在上述示例中,@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
    
    • 1
    • 2
    • 3
    • 4

    然后,在您的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;
    
        // ...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    通过上述示例,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
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

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

    # application.properties
    myapp.database.url=jdbc:mysql://localhost:3306/mydb
    myapp.database.username=myuser
    myapp.database.password=mypassword
    
    • 1
    • 2
    • 3
    • 4

    在这个配置文件中,定义了数据库连接的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 {
        @Id
        private Long id;
        private String username;
        private String email;
        // 省略其他属性和方法
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在上述示例中,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 {
        @Id
        private Long id;
        private String username;
        private String email;
        // 省略其他属性和方法
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

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

    3. @Id

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

    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Entity
    @Table(name = "users")
    public class User {
        @Id
        private Long id;
        private String username;
        private String email;
        // 省略其他属性和方法
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在上述示例中,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;
        // 其他共享属性和方法
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    2. @NoRepositoryBean

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

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

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

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

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

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

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

    @Entity
    public class Employee {
        @Transient
        private double monthlySalary; // 不会持久化到数据库
        // 其他属性和注解
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    6. @Basic

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

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

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

    @Entity
    public class User {
        @JsonIgnore
        private String password; // 在JSON中忽略密码字段
        // 其他属性和注解
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    8. @JoinColumn, @OneToOne, @OneToMany, @ManyToOne

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

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

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

    十、导入配置文件

    导入外部配置文件的方法

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


    导入外部配置文件的方法

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

    1. 创建外部配置文件

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

    properties# myapp.properties
    app.name=My Application
    app.version=1.0
    app.author=John Doe
    
    • 1
    • 2
    • 3
    • 4

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

    2. 导入外部配置文件

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

    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.PropertySource;
    
    @Configuration
    @PropertySource("classpath:myapp.properties")
    public class MyConfiguration {
        // 配置类内容
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    上述示例中,@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;
    
        // 省略其他属性和方法
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在上述示例中,@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 {
    
        @Transactional
        public void performDatabaseOperation() {
            // 执行数据库操作
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在上述示例中,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();
        }
    
        @Transactional
        public void anotherTransactionalMethod() {
            // 执行其他数据库操作
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

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

    3. 事务回滚

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

    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Transactional;
    
    @Service
    public class MyService {
    
        @Transactional
        public void performDatabaseOperation() {
            // 执行数据库操作
            if (someCondition) {
                throw new RuntimeException("An error occurred");
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在上述示例中,如果 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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    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();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    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() {
        // 降级逻辑
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    通过使用这些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技术核心学习团队。一起探索科技的未来,共同成长。

    在这里插入图片描述

  • 相关阅读:
    AlphaFold2中的残基刚体表示
    json的数据类型有哪些?json数据类型介绍
    【JavaWeb】第四章 DOM与正则表达式
    4.5 使用Go Modules自定义模块
    数据结构与算法——算法时间复杂度
    (三十一)大数据实战——一键式DolphinScheduler高可用工作流任务调度系统部署安装
    使用selenium/drissionpage时如何阻止chrome自动跳转http到https
    如何实现基于场景的接口自动化测试用例?
    Mac 下 Go 的安装和卸载
    解决java -jar启动项目以及日志输出相关问题
  • 原文地址:https://blog.csdn.net/qq_42055933/article/details/133916191