SpringBoot2零基础到精通之profile功能与自定义starter

SpringBoot2零基础到精通之profile功能与自定义starter

本文将详细讲解SpringBoot2中的profile功能和自定义starter,在文章中会通过两个实例来演示,帮助读者更好地理解。

profile功能

什么是profile

Profile是SpringBoot提供的一个在不同环境下使用不同配置的功能。比如在开发环境中使用开发配置,在测试环境中使用测试配置,在生产环境中使用生产配置等等。实现profile的方式是在application.properties文件中定义不同的配置,并在运行时使用profile来加载相应的配置。

配置文件命名规则

SpringBoot支持四种不同的配置文件命名规则,具体如下:

  • application.properties
  • application.yml
  • application-{profile}.properties
  • application-{profile}.yml

其中application.properties和application.yml是默认的配置文件,如果指定了profile,则会优先加载application-{profile}.properties或application-{profile}.yml文件。

示例

创建示例工程

首先要创建一个SpringBoot工程,并在pom.xml文件中添加以下依赖:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>

然后创建以下文件:

  • application.properties
  • application-dev.properties
  • application-test.properties
  • application-prod.properties

并在这些文件中添加以下内容:

application.properties:

message=Hello

application-dev.properties:

message=Hello Dev

application-test.properties:

message=Hello Test

application-prod.properties:

message=Hello Prod

接下来创建一个Controller类:

@RestController
public class TestController {

    @Value("${message}")
    private String message;

    @GetMapping("/test")
    public String test() {
        return message;
    }
}

这里使用@Value注解来注入message属性的值。

运行示例

接下来我们可以运行工程并访问http://localhost:8080/test来测试不同环境下的配置是否正确。不同环境下的配置加载情况如下:

  • 没有指定profile:默认使用application.properties中的配置。
  • 指定dev profile:使用application-dev.properties中的配置。
  • 指定test profile:使用application-test.properties中的配置。
  • 指定prod profile:使用application-prod.properties中的配置。

在application.properties配置文件中不是必需加入message属性,这里加入只是为了方便演示。在实际开发中,我们可以将application.properties中的常用配置提取出来,而将不同环境下的配置分别写在不同的配置文件中,并通过SpringBoot的@Profile注解来指定使用哪个profile。

自定义starter

什么是starter

Starter是SpringBoot中的重要特性之一,它是一种约定俗成的命名方式,用于开发SpringBoot应用程序的依赖,可以帮助开发者在使用第三方库时实现快速集成,减少配置工作,提高开发效率。

自定义starter

SpringBoot已经内置了很多starter供开发者使用,但是如果需要使用第三方库中没有提供的starter,就需要自己来实现了。自定义starter需要完成以下任务:

  • 编写自定义starter源码
  • 添加SpringBoot自动配置
  • 发布starter到Maven仓库中

示例

创建示例库

首先创建一个SpringBoot工程,该工程将是我们自定义starter的源码工程。在pom.xml文件中添加以下依赖:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-autoconfigure</artifactId>
   <version>2.6.1</version>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter</artifactId>
   <version>2.6.1</version>
   <scope>compile</scope>
</dependency>
  • spring-boot-autoconfigure:该依赖是SpringBoot提供的自动配置核心库。
  • spring-boot-starter:该依赖是SpringBoot提供的starter库。

创建一个自定义类,并添加一个属性msg:

@ConfigurationProperties(prefix = "my")
public class MyProperties {

    private String msg = "World";

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}

在类上使用@ConfigurationProperties来指定前缀为my,并添加一个属性msg。

然后创建一个自动配置类MyAutoConfiguration,实现自动配置逻辑:

@Configuration
@ConditionalOnClass(MyProperties.class)
@EnableConfigurationProperties(MyProperties.class)
public class MyAutoConfiguration {

    @Autowired
    private MyProperties myProperties;

    @Bean
    @ConditionalOnMissingBean
    @ConditionalOnProperty(prefix = "my", value = "enabled", havingValue = "true")
    public MyService myService() {
        return new MyService(myProperties.getMsg());
    }
}

先解释一下各个注解的作用:

  • @Configuration:标识该类为Spring配置类。
  • @ConditionalOnClass:当类路径下有指定的类时才加载该配置类。
  • @EnableConfigurationProperties:开启@ConfigurationProperties注解的配置功能。
  • @Autowired:用于依赖注入。
  • @Bean:用于注册Spring Bean。
  • @ConditionalOnMissingBean:当容器中不存在指定名称或类型的Bean时才注册。
  • @ConditionalOnProperty:当指定属性存在且值为指定值时才注册。

创建一个Service类MyService:

public class MyService {

    private String msg;

    public MyService(String msg) {
        this.msg = msg;
    }

    public String sayHello() {
        return "Hello " + msg;
    }
}

接下来创建一个starter模块,并将自定义的类添加到该模块下。

发布starter

将starter模块打包并发布到Maven仓库中,在使用该starter的应用中可以通过如下方式来使用:

pom.xml文件中添加依赖:

<dependency>
   <groupId>com.example</groupId>
   <artifactId>my-spring-boot-starter</artifactId>
   <version>1.0.0</version>
</dependency>

然后在应用中就可以注入MyService,并调用sayHello方法了:

@RestController
public class TestController {

    @Autowired
    private MyService myService;

    @GetMapping("/test")
    public String test() {
        return myService.sayHello();
    }
}

在访问http://localhost:8080/test时,应用会返回"Hello World"。可以通过application.properties文件中指定属性my.msg来覆盖默认值。例如:

my.msg=Jack

这时应用会返回"Hello Jack"。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot2零基础到精通之profile功能与自定义starter - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Java 时间格式转换之impleDateFormat与Data API解析与使用

    Java 时间格式转换之 SimpleDateFormat 与 Date API 解析与使用 一、简介 在Java中,日期时间格式化和解析的主要API是 SimpleDateFormat 与 Date。 SimpleDateFormat 类可以将 Java 的日期对象转换为指定格式的字符串,也可以将格式化后的日期字符串转换成 Java 的日期对象。 Date…

    Java 2023年5月20日
    00
  • 五种JAVA GUI布局管理的方式

    下面我们来详细讲解“五种JAVA GUI布局管理的方式”。 概述 在Java图形用户界面(GUI)编程中,布局管理是重要的一部分。GUI布局管理的主要作用是定义GUI组件相对于容器的位置和大小。Java提供了五种布局管理方式,分别是FlowLayout、BorderLayout、GridLayout、GridBagLayout和SpringLayout。本篇…

    Java 2023年5月24日
    00
  • Mybatis中动态SQL,if,where,foreach的使用教程详解

    “Mybatis中动态SQL,if,where,foreach的使用教程详解”是一个相当重要的主题,因为它可以帮助我们在Mybatis中更好地处理和生成SQL语句。在这篇攻略中,我们将会从头开始,详细介绍如何使用Mybatis来生成精准的、动态的SQL语句,并且辅以两条相应的示例。 什么是动态SQL? 在Mybatis中提供了一系列动态SQL元素,这些元素允…

    Java 2023年5月20日
    00
  • Tomcat6.0与windows 2003 server 的IIS服务器集成

    Tomcat6.0和windows 2003 server的IIS服务器集成需要以下步骤: 1. 安装IIS和Tomcat 首先,需要在Windows 2003 Server上安装IIS Web服务器。接着需要安装Tomcat6.0版本,安装时需要注意把Tomcat安装在一个容易找到的目录下。 2. 配置IIS 在IIS上创建一个Web站点,为了和Tomca…

    Java 2023年5月19日
    00
  • Spring Boot中的Properties的使用详解

    SpringBoot中的Properties的使用详解 什么是Properties Properties是Java中处理属性文件的一个类。在SpringBoot中,我们可以使用application.properties或application.yml作为配置文件,来替代传统的XML配置文件,来配置服务器的相关信息。 application.properti…

    Java 2023年5月15日
    00
  • asp.net中几种常用的身份验证方法总结

    当用户使用你的网站时,通常需要进行身份验证,以保护用户数据和提供更好的用户体验。ASP.NET 提供了几种身份验证方法,包括基于表单的身份验证、基于 Windows 的身份验证和第三方授权身份验证。本篇攻略将对这些身份验证方法进行总结和详细讲解。 1. 基于表单的身份验证 基于表单的身份验证是 ASP.NET 中最常用的身份验证方法之一。它可以通过简单的 H…

    Java 2023年6月16日
    00
  • SpringBoot发现最新版Druid重大问题(坑)

    SpringBoot发现最新版Druid重大问题(坑)攻略 问题描述 最近,在使用 SpringBoot 和 Druid 进行数据库连接池配置的时候,发现了一个最新版 Druid 的重大问题。具体表现就是,在使用了最新版 Druid 后,产生了以下的错误信息: 错误信息:Cannot create JDBC driver of class ‘com.mysq…

    Java 2023年6月3日
    00
  • SpringBoot使用Maven插件进行项目打包的方法

    下面是详细讲解“SpringBoot使用Maven插件进行项目打包的方法”的完整攻略: 1. 添加 Maven 插件 在 SpringBoot 项目的 pom.xml 文件中,添加 Maven 插件: <build> <plugins> <plugin> <groupId>org.springframework…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部