[Кейс боевой] Стартовый бой пользовательского пакета SpringBoot3.x

1. Предыстория введения и функция стартера

(1) Что такое стартер

starter — это новое изобретение в SpringBoot, которое эффективно снижает сложность процесса разработки проекта и очень хорошо влияет на упрощение операций разработки.

Концепция стартера: стартер будет включать все используемые зависимости, избегая проблем, вызванных введением зависимостей самими разработчиками. Следует отметить, что для решения разных зависимостей используются разные стартеры, поэтому их внутренняя реализация может сильно отличаться, например, стартер jpa и стартер Redis могут иметь разные реализации, ведь суть стартера заключается в синтезе , который представляет собой уровень абстракции на логическом уровне. Возможно, эта концепция чем-то похожа на Docker, поскольку все они выполняют операцию «упаковки». Если вы знаете, для решения какой проблемы предназначен Docker, возможно, вы можете использовать Docker Make a аналогия со стартером.

(2) Настроить фон стартера

  • Каждый должен был использовать много Starters, и есть много промежуточных программ, но есть также много промежуточных программ, в которых отсутствуют Starters или которые несовместимы.
  • Например, при обновлении версии Spring Boot 3.x некоторые Starters не успели обновиться, поэтому их нельзя использовать.
  • Руководитель технической группы или архитектор на реальном предприятии также
  • Инкапсулируйте Starter вашей собственной проектной группы для ускорения разработки проектов, а также можно унифицировать и стандартизировать для упрощения настройки.

(3) Настроить спецификацию стартового пакета

  • Официальная спецификация стартового пакета: spring-boot-starter-xxx
  • Спецификация пользовательского стартового пакета: xxx-spring-boot-starter
spring-boot-starter
spring-boot-starter-data-jpa
spring-boot-starter-data-redis
spring-boot-starter-data-mongodb
spring-boot-starter-jdbc
mybatis-spring-boot-starter
mybatis-plus-boot-starter

(4) Разница между новой версией Spring Boot3.X и пользовательским Starter перед старой версией SpringBoot2.7

  • До SpringBoot2.7

    • Добавьте в файл META-INF/spring.factoriesorg.springframework.boot.autoconfigure.EnableAutoConfiguration=XXAutoConfiguration
    • Я буду использовать другую статью, чтобы показать пользовательский стартер до springboot2.7. Здесь будет обновлено позже!

    вставьте сюда описание изображения

  • SpringBoot2.7 представляет новую автоматическую настройку

    • 在META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
    • Добавьте имя класса конфигурации в файл, каждая строка содержит полное имя класса конфигурации.
    • Совместимость с методом META-INF/spring.factories
  • SpringBoot3.x удаляет spring.factories

    • Удалить путь META-INF/spring.factories
    • Поддерживает только META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports Добавить автоматическую настройку

2. Шаги по настройке стартера

  • Создать проект xx-spring-boot-starter

  • добавить зависимости

 <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-autoconfigure</artifactId>
      <version>3.0.2</version>
</dependency>

  • Создайте класс конфигурации
  • Создайте класс XXAutoConfiguration.
  • Добавить аннотацию условия Condition
  • Настройка класса автоконфигурации AutoConfiguration.imports

3. Настройте стартовый корпус на практике

(1) Фон спроса

  • Теперь вся смс-рассылка компании интегрирована в центр сообщений.Чтобы упростить разработку каждой платформы, смс-стартер настраивается и упаковывается для каждой используемой платформы.
  • Настройте sms-starter для отправки текстовых сообщений. Starter подключен к различным сторонним платформам SMS, таким как Alibaba Cloud, Tencent Cloud и Amazon Cloud. Разработчики могут настроить поставщика SMS в соответствии с конфигурацией. Поставщиком по умолчанию является Alibaba. Облако.
  • Если в контейнере Spring нет соответствующего bean-компонента, он будет создан, а если есть, то не создан.

(2) Создайте проект SpringBoot3.x sms-spring-boot-starter, добавьте зависимость автонастройки

вставьте сюда описание изображения

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
            <version>3.0.2</version>
        </dependency>

(3) Создайте класс конфигурации и привяжите файл конфигурации application.yml через аннотацию @ConfigurationProperties.

  • Создайте класс перечисления типов для операторов SMS
public enum SmsTypeEnum {
    
    
		//阿里云
    ALI_CLOUD("ali"),
  	//腾讯云
    TX_CLOUD("tx"),
  	//亚马逊云
    YMX_CLOUD("ymx");

    private String type;

    SmsTypeEnum(String ymx) {
    
    }

}
@ConfigurationProperties(prefix = "sms.server.achieve")
public class SmsProperties {
    
    
		
  	/**
   	 * 发送短信类型
   	 */
    private String type;

    public String getType() {
    
    
        if(type == null || "".equals(type)){
    
    
            type = SmsTypeEnum.ALI_YUN.name();
        }
        return type;
    }

    public void setType(String type) {
    
    
        this.type = type;
    }
}

(4) Создайте интерфейс SmsService и инкапсулируйте реализацию отправки SMS трех поставщиков облачных услуг.

public interface SmsService {
    
    
    String send(String fromPhone,String toPhone,String content);
}
/**
 * 阿里云SMS实现
 * @author lixiang
 * @date 2023/5/16 09:30
 */
@Service("ali")
public class AliCloudSmsServiceImpl implements SmsService {
    
    

    @Override
    public String send(String fromPhone, String toPhone, String content) {
    
    
        System.out.println("------------------当前SMS厂商为阿里云------------------");
        System.out.println("----"+fromPhone+" 向 "+toPhone +" 发送了一条短信。"+"----");
        System.out.println("短信内容为:"+content);
        System.out.println("----------------------------------------------------");
        return "success";
    }
}
/**
 * 腾讯云SMS实现
 * @author lixiang
 * @date 2023/5/16 09:44
 */
@Service("tx")
public class TxCloudSmsServiceImpl implements SmsService {
    
    
    @Override
    public String send(String fromPhone, String toPhone, String content) {
    
    
        System.out.println("------------------当前SMS厂商为腾讯云------------------");
        System.out.println("----"+fromPhone+" 向 "+toPhone +" 发送了一条短信。"+"----");
        System.out.println("短信内容为:"+content);
        System.out.println("----------------------------------------------------");
        return "success";
    }
}
/**
 * 亚马逊云SMS实现
 * @author lixiang
 * @date 2023/5/16 09:42
 */
@Service("ymx")
public class YmxCloudSmsServiceImpl implements SmsService {
    
    
    @Override
    public String send(String fromPhone, String toPhone, String content) {
    
    
        System.out.println("------------------当前SMS厂商为亚马逊云------------------");
        System.out.println("----"+fromPhone+" 向 "+toPhone +" 发送了一条短信。"+"----");
        System.out.println("短信内容为:"+content);
        System.out.println("----------------------------------------------------");
        return "success";
    }
}

(5) Определите SmsTemplate для унифицированного предоставления услуг

/**
 * @author lixiang
 * @date 2023/5/16 09:33
 */
public class SmsTemplate {
    
    

    @Autowired
    private SmsProperties smsProperties;

    @Autowired
    private ApplicationContext context;

    public String send(String fromPhone,String toPhone,String content){
    
    
        //获取云厂商的业务实现类
        String type = smsProperties.getType();
        SmsService smsService = (SmsService)context.getBean(type);
        return smsService.send(fromPhone,toPhone,content);
    }
}

(6) Определите класс SmsAutoConfiguration

/**
 * @author lixiang
 * @date 2023/5/16 09:27
 */
@AutoConfiguration
@ConditionalOnClass(SmsTemplate.class)
@EnableConfigurationProperties(value = SmsProperties.class)
public class SmsAutoConfiguration {
    
    

    @Bean
    @ConditionalOnMissingBean
    public SmsTemplate smsTemplate(){
    
    
        return new SmsTemplate();
    }

}

(7) Создайте файл конфигурации импорта и настройте классы, которые необходимо автоматически загружать.

  • @AutoConfiguration впервые представлен в весенней загрузке 2.7.Класс автоматической настройки должен быть помещен в следующий файл, чтобы считаться классом автоматической настройки
  • META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

вставьте сюда описание изображения

com.lixiang.config.SmsAutoConfiguration

(8) чистая установка mvn на локальный склад

вставьте сюда описание изображения

4. Проверьте пользовательский стартер

(1) Чтобы создать новый проект, обратите внимание на версию выше springboot3.x.

        <dependency>
            <groupId>com.lixiang</groupId>
            <artifactId>sms-spring-boot-starter</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

(2) Создать тестовый код

@RestController
@RequestMapping("/spring-test")
public class TestController {
    
    

    @Autowired
    private SmsTemplate smsTemplate;

    @RequestMapping("/sms")
    public String sms(){
    
    
        String fromPhone = "15522834580";
        String toPhone = "13820345839";
        String content = "李祥,李祥,今晚王者峡谷 六点 五缺一,收到请回复,over!";
        return smsTemplate.send(fromPhone,toPhone,content);
    }

}

(3) Если файл конфигурации не настроен, по умолчанию используется поставщик Alibaba Cloud.

вставьте сюда описание изображения

(4) При настройке поставщика облачных услуг будет использоваться настроенный поставщик облачных услуг.

вставьте сюда описание изображения
вставьте сюда описание изображения

Хорошо, SpringBoot3.x, пользовательский пускатель завершен, и этапы пользовательского пускателя springboot2.x будут обновлены позже, потому что в настоящее время многие компании все еще используют версию springboot2.x.

Supongo que te gusta

Origin blog.csdn.net/weixin_47533244/article/details/130703512
Recomendado
Clasificación