Bootstrap

spring boot 多个项目整合,打包成可依赖的包

一、背景介绍

接手前人项目,代码都是一块一块的,很多个spring boot服务,服务器重新启动一下,就要同时再启动很多jar服务,漏一个就麻烦了(虽然有一键启动)。但是有很多终端黑框很是麻烦。领导要求整合成一个,再加个权限认证。特喵的

  • AA_service
  • BB_service
  • CC_service
  • DD_service
  • .....

最先想到就是再搞一个把这几个都加到Maven依赖里面就OK了,啥也不用改,哈哈哈哈。由此开启了踩坑之路。新建一个All_service

二、启动的问题

1、bean冲突

虽然是不同的项目但是里面的对象很多是名字一样的,spring boot的对象自动注册里面是根据名称的。类名字一样就不行了,这个没办法,遇到就一个一个改

2、启动不了

在新的All_service 的启动类上面加上注解扫描其他的包

@EnableAsync
@SpringBootApplication
@ComponentScan(basePackages = {"cn.com.Aa", "cn.com.Bb", "cn.com.Cc"})
@EnableScheduling
public class AllServiceApplication{
    public static void main(String[] args) {
        SpringApplication.run(AllServiceApplication.class, args);
    }
}

3、jar依赖不了

默认情况
mvn clean package 
该命令会打包spring boot项目,将会打包一个XXX.jar 和一个XXX.jar.original
* XXX.jar : 是一个可以执行的jar 也即 java -jar XXX.jar 就可以直接执行
* XXX.jar.original : 不可以直接执行,但是可以被其他项目引用,作为依赖jar包(去掉结尾的.original)

## 注意
被依赖的jar 需要在pom.xml 里面的打包插件 plugin 加入
<classifier>exec</classifier>
<plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <classifier>exec</classifier> 
                </configuration>
            </plugin>
再次打包 mvn clean package 
就会有一个XXX.jar 文件和一个XXX-exec.jar 文件
* XXX.jar : 是一个可以被依赖的jar(被转变了)
* XXX-exec.jar : 是一个可以执行的jar了

三、配置文件的问题

spring:
  config:
    # 所有spring boot的配置文件,去掉数据库链接方式,去掉端口,去掉路由前缀
    import:
      - classpath:yml/application-AA.yml
      - classpath:yml/application-BB.yml
      - classpath:yml/application-CC.yml
      - classpath:yml/application-DD.yml
   

四、冲突的问题

第三方依赖的问题

        <resources>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
            <resource>
                <directory>${project.basedir}/lib</directory>
                <targetPath>BOOT-INF/lib/</targetPath>
                <includes>
                    <include>*.jar</include>
                </includes>
            </resource>
        </resources>

;