meethigher-实现SpringBoot的jar包引入其他项目

我手里有个日志监控功能,而我手里又有很多套项目,我都想加上这个日志监控功能,又不想每个项目都写一遍,怎么办呢?

于是便想到了,将项目打成jar包嵌入到其他项目里,别的项目就可以复用里面的接口、静态资源。

步骤:

  1. 更换打包插件。去掉springboot的maven打包插件,更改apache的打包插件
  2. 去掉不必要的文件。如application、test、配置文件等
  3. 自动装配。通过spring.factories实现自动装配,参考spring-boot-admin源码,可以不用在嵌入后,再去配置@ComponentScan扫包
  4. 内置静态资源文件
  5. 修改内置异常优先级。如果不修改的话,被嵌入的项目中,如果没有该自定义的异常,就会抛出别的异常,为了避免这个问题,将嵌入包的异常优先级提前。

源码meethigher/log-monitor-embedded

参考

一、更换打包插件

修改pom,将spring-boot-maven-plugin替换成maven-compiler-pluginspring-boot-maven-plugin插件本身就是将springboot项目打包成启动包,而我们不需要打包成启动包,我们需要用作嵌入的,也就是只是需要里面的字节码和静态资源而已。

<build>
    <plugins>
        <!--该插件3.2.0版本配合多个springboot版本都有bug,建议采用3.1.0-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>3.1.0</version>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

打包后的效果如图

二、去掉不必要文件

可对照meethigher/log-monitor: Java实现监控本地日志并实现实时查看,查看去掉了哪些文件。

主要的就是启动类、单元测试、配置文件等。删掉之后,保证这个嵌入包干净清爽!

为了避免重复引用(其实重复引用,只要不是版本不一致,也没问题),可以在引用时,剔除掉。

<dependency>
    <groupId>top.meethigher</groupId>
    <artifactId>log-monitor-embedded</artifactId>
    <version>1.0.0</version>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </exclusion>
        <exclusion>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
        </exclusion>
        <exclusion>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
        </exclusion>
    </exclusions>
</dependency>

三、自动装配

参考codecentric/spring-boot-admin: Admin UI for administration of spring boot applications

修改配置类,进行扫包

@Configuration
@ComponentScan("top.meethigher.logmonitorembedded")
public class LogMonitorEmbeddedApplication {

}

src/main/resources/META-INF路径下,创建spring.factories

org.springframework.boot.autoconfigure.EnableAutoConfiguration=top.meethigher.logmonitorembedded.LogMonitorEmbeddedApplication

通过自动装配,可以不用在被嵌入的项目里,再去@ComponentScan扫包了。

这边我也没太用明白,但是这么搞是可以用的。也欢迎补充

四、内置静态资源文件

Tomcat8.0+,也就是servlet3.0+以上,可以直接在项目里面存放静态资源,并且被打包后嵌入还是可以访问的。

在servlet3.0协议规范中,包含在jar文件 /META-INFO/resources/ 路径下的资源是可以直接访问的

五、修改内置异常优先级

通过@Order注解配置全局异常捕获的优先级

@RestControllerAdvice
@Order(Ordered.HIGHEST_PRECEDENCE)
public class LogMonitorExceptionHandler {

    private final static Logger log = LoggerFactory.getLogger(LogMonitorExceptionHandler.class);


    @ExceptionHandler(CommonException.class)
    public BaseResponse handleCommonException(CommonException e) {
        e.printStackTrace();
        log.error("CommonException :{} ", e.getResponseEnum().desc);
        return ResponseUtils.getResponseCode(e.getResponseEnum());
    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值