使用IDEA创建module模块
点击create按钮后,即可创建新module模块。创建完成后需要做如下修改,保证接口文档、字典切面、新模块下的mapper扫描可以正常使用。
启动模块修改
pom.xml修改
jeecg-boot/jeecg-module-system/jeecg-system-start/pom.xml中新增app-boot的依赖
<dependencies>
<!-- SYSTEM 系统管理模块 -->
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-system-biz</artifactId>
<version>${jeecgboot.version}</version>
</dependency>
<!-- DEMO 示例模块 -->
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-module-demo</artifactId>
<version>${jeecgboot.version}</version>
</dependency>
<!-- app-boot模块 -->
<dependency>
<groupId>com.app.boot</groupId>
<artifactId>app-boot</artifactId>
<version>${jeecgboot.version}</version>
</dependency>
<!-- flyway 数据库自动升级 -->
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
</dependencies>
启动类修改
jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/JeecgSystemApplication.java新增com.app包扫描
/**
* 单体启动类
*/
@Slf4j
@SpringBootApplication
@ComponentScan(basePackages = {"org.jeecg.*","com.app.*"})
public class JeecgSystemApplication extends SpringBootServletInitializer {
接口文档相关修改
Swagger2Config
@Bean(value = "defaultApi2")
public Docket defaultApi2() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
//此包路径下的类,才生成接口文档
// .apis(RequestHandlerSelectors.basePackage("org.jeecg"))
.apis(basePackage("org.jeecg.modules"+SPLITOR+"com.app"))
//加了ApiOperation注解的类,才生成接口文档
.apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
.paths(PathSelectors.any())
.build()
.securitySchemes(Collections.singletonList(securityScheme()))
.securityContexts(securityContexts())
.globalOperationParameters(setHeaderToken());
}
/**
* @author jinhaoxun
* @description 重写basePackage方法,使能够实现多包访问
* @param basePackage 所有包路径
* @return Predicate<RequestHandler>
*/
public static Predicate<RequestHandler> basePackage(final String basePackage) {
return input -> declaringClass(input).transform(handlerPackage(basePackage)::apply).or(true);
}
/**
* @author jinhaoxun
* @description 重写basePackage方法,使能够实现多包访问
* @param basePackage 所有包路径
* @return Function<Class<?>, Boolean>
*/
private static Function<Class<?>, Boolean> handlerPackage(final String basePackage) {
return input -> {
// 循环判断匹配
for (String strPackage : basePackage.split(SPLITOR)) {
assert input != null;
boolean isMatch = input.getPackage().getName().startsWith(strPackage);
if (isMatch) {
return true;
}
}
return false;
};
}
/**
* @author jinhaoxun
* @description 重写basePackage方法,使能够实现多包访问
* @param input
* @return Optional<? extends Class<?>>
*/
private static Optional<Class<?>> declaringClass(RequestHandler input) {
return Optional.fromNullable(input.declaringClass());
}
mapper扫描
MybatisPlusSaasConfig
jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/mybatis/MybatisPlusSaasConfig.java增加com.app包扫描,避免新模块的mapper文件无法加载导致启动错误
/**
* 单数据源配置(jeecg.datasource.open = false时生效)
* @Author zhoujf
*
*/
@Configuration
@MapperScan(value={"org.jeecg.modules.**.mapper*","com.app.**.mapper*"})
public class MybatisPlusSaasConfig {
application-dev.yml
jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml新增com.app包扫描
#mybatis plus 设置
mybatis-plus:
mapper-locations: classpath*:org/jeecg/**/xml/*Mapper.xml,classpath*:com/app/**/xml/*Mapper.xml
global-config:
# 关闭MP3.0自带的banner
本修改需要同步修改其他环境的配置文件例如prod、test等
字典切面修改
jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/common/aspect/DictAspect.java新增com.app包的切面配置
/**
* 定义切点Pointcut
*/
@Pointcut("(@within(org.springframework.web.bind.annotation.RestController) || " +
"@within(org.springframework.stereotype.Controller) || @annotation(org.jeecg.common.aspect.annotation.AutoDict)) " +
"&& execution(public org.jeecg.common.api.vo.Result org.jeecg..*.*(..)) || " +
"execution(public org.jeecg.common.api.vo.Result com.app..*.*(..))")
public void excudeService() {
}