SpringBoot —— 开发自启动的boot依赖包

开发环境

请见《项目部署及打包》

概述

本文主要记录基于IDEA + Maven开发一个依赖SpringBoot的web项目包并提供给其他项目使用的过程,包括

  • 依赖SpringBoot web模块
  • 配置SpringBoot项目自动加载Bean
  • 自定义的banner展示(banner文件)
  • 属性文件读取(兼容不同文件/格式/profiles)
  • 过滤器排序
  • 打包配置
  • 本地安装
  • 附录——SpringBoot注解

Juth2-Server

Juth2-Server 是一个基于SpringBoot开发的OAuth2鉴权服务端,下面会以该库为例记录相关内容

pom配置

Juth2-Service是基于HTTP Filter Chain进行request合法验证,涉及到Servlet、Filter注解、Cors处理器等,最简单的方式是直接引入starter-web依赖


    org.springframework.boot
    spring-boot-starter-web

当然,还需要指定starter-parent,否则你的所有依赖包都必须显式指定版本


    org.springframework.boot
    spring-boot-starter-parent
    2.4.2
     

同样也少不了其他相关依赖包。完成编码后可以通过SpringBootApplication进行启动

自动配置

指依赖包中的@Configuration可以跟随SpringBoot自动启动,而无需额外配置。实现该功能需要启用SpringBoot的自动配置功能,步骤包括

  1. 在resource目录下创建META-INF目录
  2. 在目录中创建spring.factories文件
  3. 在文件中指定自动配置项
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.xxx.Configuration1,\
com.xxx.Configuration2,\
...

banner展示

通常,SpringBoot可以在application.yml中指定banner文件路径。但打包后会被主程序的文件覆盖,可以通过在@Configuration自动加载时读取jar包中的banner文件显示,比如Juth2-Server中

public Juth2Configuration(Juth2Properties juth2Properties, Environment environment) {
  //banner
  String version = this.getClass().getPackage().getImplementationVersion();
  ResourceBanner banner = new ResourceBanner(new ClassPathResource("/juth2-logo.txt"));
  banner.printBanner(environment, Juth2Configuration.class, System.out);
  System.out.println(" ".repeat(61) + version);
  juth2Properties.log();
}

Juth2Configuration使用了构造注入来获取Juth2属性并打印属性加载信息,接着记录如何在jar包中加载主项目的配置信息

加载属性文件

SpringBoot项目可以自动识别 application.yml 或者 application.properties 或者 application-profile.yml 并按照优先级组合文件中的属性。想让自己的jar包实现同样的功能,可以通过SpringBoot提供的属性注解来实现,包括

//实现读取主项目 application 文件中的juth2开头的属性
@ConfigurationProperties(prefix = "juth2",ignoreInvalidFields = true)
//实现读取独立juth2配置文件
@PropertySources({
  //读取yml文件,需要配置一个Yaml解析类
  @PropertySource(value = {"classpath:juth2.yml", "classpath:config/juth2.yml"}, factory = YamlPropertySourceFactory.class,ignoreResourceNotFound = true, encoding = "UTF-8"),
  //读取properties文件
  @PropertySource(value = {"classpath:juth2.properties", "classpath:config/juth2.properties"}, ignoreResourceNotFound = true, encoding = "UTF-8")
})

将以上注解标注在属性Bean上,SpringBoot会自动对实例属性进行映射,这样就实现了banner中的Juth2属性注入

过滤器排序

在SpringBoot中,可以通过注解来挂载一个过滤器,比如

@Order(Ordered.LOWEST_PRECEDENCE)
@Component
public class MyFilter implements Filter {
}

通过增加@Component注解来挂载过滤器并通过@Order注解来指定顺序,但Order注解的参数无法使用变量。
另一种方法通过配置类并主动注册来实现,比如

//配置类
@Configuration
public class FilterConfiguration {
    //注册过滤器1
    @Bean
    public FilterRegistrationBean regFilter1() {
        final FilterRegistrationBean reg = new FilterRegistrationBean<>();

        reg.setFilter(new Filter1());
        reg.addUrlPatterns("/*");
        reg.setOrder(1);//排序

        return reg;
    }
    //注册过滤器2
    @Bean
    public FilterRegistrationBean regFilter2() {
        final FilterRegistrationBean reg = new FilterRegistrationBean<>();

        reg.setFilter(new Filter2());
        reg.addUrlPatterns("/*");
        reg.setOrder(2);//排序

        return reg;
    }

}

打包配置

想要打包为类库就不能使用默认的打包插件,如下


    
        
            org.springframework.boot
            spring-boot-maven-plugin
        
    

可以直接删除build或者使用maven-jar插件,如下


    
        
            org.apache.maven.plugins
            maven-jar-plugin
            
                
                    **/juth2server/**
                    **/*.txt
                
            
        
    

本地安装

build好的jar包需要先在本地测试,IDEA自带了maven工具如下


maven工具

通过install方法,可以把jar包安装在本地maven仓库(通常在C盘 user/.m2目录)


本地maven仓库

然后在主项目的pom文件中加入依赖,比如


    com.github.holyhigh2
    juth2-server
    0.1.2-SNAPSHOT

版本号由库的pom文件决定并体现在本地库中,比如


本地库版本

然后就可以看到依赖库中已经安装了依赖库


依赖库

附录 - 常用注解

@Component - 标注组件类,实现容器管理,是众多注解的元注解
@Configuration - Bean的配置类,提供@Bean注入。使用@Component元注解
@Bean - 标注返回Bean实例的方法
@RestController - 为所有方法都实现了@ResponseBody的@Controller
@Controller - 标注MVC控制器类。使用@Component元注解
@RequestMapping - 标注控制器类/方法的路由地址
@Service - 标注服务类。使用@Component元注解
@Autowired - 标注需要被注入的Bean
@SpringBootApplication - 用来标注SpringBoot项目启动类,包含了自动配置加载、组件扫描、配置类扫描

你可能感兴趣的:(SpringBoot —— 开发自启动的boot依赖包)