一个springboot项目的controller直接被另外一个
2020-08-24 本文已影响0人
一个忙来无聊的人
本文基于springboot开发处理
在实际操作中,有这么一个需求,需要编写一堆接口,能直接打成jar包通过其他项目引入就能使用,而不是传统的 client 方式进行调用处理;
本文通过调研处理实现A springboot项目直接被 B springboot项目使用,并且B Springboot项目还能直接使用A项目的controller(接口),也就是前端能直接通过A 项目部署的jar包同时访问A、B 项目的所有接口
具体操作步骤如下,(新建项目过程就省略了。。某度有一大堆)
A项目 pom 文件改造
如下代码所示,将jar包更改为不可执行模式
<!-- <build>-->
<!-- <plugins>-->
<!-- <plugin>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-maven-plugin</artifactId>-->
<!-- </plugin>-->
<!-- </plugins>-->
<!-- </build>-->
<!--不可执行jar打包插件-->
<build>
<plugins>
<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>
项目配置文件改造
- 如下JAVA 配置文件, 包扫描路径为原先项目启动扫描路径信息
- MapperScan 路径为原先包配置扫描路径信息
@Configuration
@ComponentScan(basePackages = {"com.xiaoxiao.workflow", "com.xiaoxiao.demo.swagger"})
@MapperScan("com.xiaoxiao.workflow.mapper")
@ConditionalOnWebApplication
public class TestConfiguration {
}
项目配置文件改造--扫描时排除扫描类
ps: 具体排除某个类或者某个注解的方法参考的链接链接地址为请求点击这儿
- ANNOTATION:注解类型
- ASSIGNABLE_TYPE:ANNOTATION:指定的类型,可用于排除某个类
- ASPECTJ:按照Aspectj的表达式,基本上不会用到
- REGEX:按照正则表达式
- CUSTOM:自定义规则
@Configuration
@ComponentScan(basePackages = {"com.xiaoxiao.workflow", "com.xiaoxiao.skull","org.flowable.ui.modeler", "org.flowable.ui.common"}
, excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = SecurityAutoConfiguration.class)
)
@MapperScan("com.xiaoxiao.workflow.mapper")
@ConditionalOnWebApplication
public class SystemConfig {
}
pom文件中项目的名称信息(这个地方时为了便于在实际使用是引入)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xiaoxiao.workflow</groupId>
<artifactId>flowable-workflow</artifactId>
<version>1.0.0</version>
<parent>
省略
</parent>
</project>
打成jar包 ,参考如下截图,如果有报错自己百度咯。。。
image.png实际项目中使用
- pom 文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
省略
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.xiaoxiao.test</groupId>
<artifactId>swagger-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>swagger-demo</name>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- 引入刚刚打的jar包的信息,注意groupId 和 artifactId 以及版本要一致 -->
<dependency>
<groupId>com.xiaoxiao.workflow</groupId>
<artifactId>flowable-workflow</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
- Application 启动类
配置扫描路径为当前项目路径和引入的jar的 路径信息。 如下 com.xiaoxiao.test 为当前项目启动类包路径 com.xiaoxiao.workflow 为引入的jar 的application类路径(当然引入的jarapplication类已经被删掉了。不知道怎么描述恰当。权且这样表述吧)
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication(scanBasePackages = {"com.xiaoxiao.workflow","com.xiaoxiao.test"})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
好了 本文结束,如果有错误地方欢迎指出留言,如果对你有帮助欢迎点赞,谢谢!