springboot创建父子工程、聚合工程
开发工具:IntellJ IDEA 2017
springboot创建父子工程、聚合工程及搭建框架过程中遇到的问题解决
项目名称
wyait父工程【父】:wyait-parent(用于统一依赖版本管理)
wyait通用工程【子】:wyait-common(统一保存通用工具类)
wyait-web工程【子】:wyait-web(聚合工程)
项目框架简述
wyait-web 项目框架设计简述:
- wyait-web-pojo:保存pojo和entity实体类;
- wyait-web-dao:数据访问层,与底层 MySQL进行数据交互(依赖pojo);
- wyait-web-service:相对具体的业务逻辑服务层(依赖mapper/pojo);
- wyait-web-controller:对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等(依赖service/pojo);
- wyait-web-webapp:项目启动Application类、配置类、静态资源文件(依赖controller/pojo)。
项目源码
github:https://github.com/wyait/web.git
码云:https://gitee.com/wyait/web.git
注意,源码中没有提交空白目录,有些src/main/java/、src/main/resources/等目录需要大家手动创建!!!
初始技术依赖包括:
- springboot
- spring
- mybatis
- thymeleaf模版
- redis
- httpclient
- oval校验
- commons包
- devTools热部署
- 静态资源配置(详见:MyWebMvcConfig类)
- druid数据库连接池
- pagehelper分页
- log4j2
静态资源配置说明
MyWebMvcConfig类片段:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler(“/css/**”).addResourceLocations(“/css/”);
registry.addResourceHandler(“/images/**”).addResourceLocations(“/images/”);
registry.addResourceHandler(“/js/**”).addResourceLocations(“/js/”);
//配置中的file:表示是一个具体的硬盘路径,其他的配置指的是系统环境变量
registry.addResourceHandler(“/img/**”).addResourceLocations(“file:D:/demo-images/”);
super.addResourceHandlers(registry);
}
-
把0.jpg图片放到D:/demo-images/路径下,启动项目,访问:
http://127.0.0.1:8099/img/0.jpg
显示图片,配置ok。 - 其他静态文件,样式、图片、js等均可直接访问。
- 注释的代码,是拦截器的配置;
- 过滤器、监听器等配置实现,参考博客:
spring boot 整合redis、拦截器、过滤器、监听器、静态资源配置:https://blog.51cto.com/wyait/1971108。
注意:使用IntellJ IDEA开发工具时,有个问题,见文末。
RedisUtil
redis的使用,参考wyait-common项目中RedisUtil类中的API方法;
参考博客:
spring boot 1.5.9 整合redis:https://blog.51cto.com/wyait/2048478
HttpService
httpClient操作,参考midd-common项目中HttpService类中的API方法,结果封装在HttpResult类中
搭建项目框架
wyait-parent(版本管理)
每个平台都有一个parent项目,用于项目依赖版本统一管理
创建wyait-parent项目
导入依赖
注意:
- springboot在创建单应用项目的时候,有默认的
依赖;我们在自定义wyait-parent项目时,如果直接以springboot的parent作为wyait-parent项目的 父依赖管理的话,子项目会由于存在两个parent而报错,无法导入依赖。
解决方案如下:
org.springframework.boot
spring-boot-dependencies
${spring.boot.version}
pom
import
使用spring-boot-dependencies依赖对springboot的依赖包进行统一管理。
- maven项目的pom中的标签的含义,自行google、百度了解 //TODO
... ...
com.wyait.parent
wyait-parent
1.0.0
pom
UTF-8
UTF-8
1.7
4.3.13.RELEASE
1.5.9.RELEASE
1.3.1
1.1.5
1.2.3
3.6
2.5
1.86
org.springframework
spring-framework-bom
${springframework.version}
pom
import
org.springframework.boot
spring-boot-dependencies
${spring.boot.version}
pom
import
...
maven-compiler-plugin
1.7
wyait-common(通用工具类项目)
用于存放通用的工具类;
wyait-common项目,统一保存通用工具类
涉及到bean注入,需要在wyait-web的Application启动类中,添加注解:
@SpringBootApplication
//@ComponentScan用于配置扫描com.wyait.web之外的包下面的类
@ComponentScan(basePackages={"com.wyait"})
public class WyaitWebApplication {
public static void main(String[] args) {
SpringApplication sa=new SpringApplication(WyaitWebApplication.class);
// 禁用devTools热部署
//System.setProperty("spring.devtools.restart.enabled", "false");
// 禁用命令行更改application.properties属性
sa.setAddCommandLineProperties(false);
sa.run(args);
}
}
创建wyait-common
方法和创建wyait-parent一致,注意不删除src。
pom依赖
com.wyait.parent
wyait-parent
1.0.0
com.wyait.common
wyait-common
1.0.0
jar
...
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
wyait-web聚合工程
本demo为了方便,前期所有第三方依赖统一加在pom工程里面。比如:都放在wyait-web的pom文件中。上线前,再统一做调整,分别配置依赖。
建议前期就分配module各项目需要的依赖,避免引入不必要的。
创建wyait-web
操作和创建wyait-common一致。
pom依赖
- 项目内版本管理,通过配置properties实现;
- 引入通用工具项目wyait-common;
- 解决项目启动后,webapp/资源目录编译之后访问不到的问题。
...
com.wyait.web
wyait-web
${wyait.web.version}
pom
com.wyait.parent
wyait-parent
1.0.0
1.0.0
1.0.0
com.wyait.common
wyait-common
${wyait.common.version}
...
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
src/main/webapp
META-INF/resources
**/**
src/main/resources
true
**/*
创建wyait-web-pojo
选中pom项目wyait-web,右键:new --> module --> maven :
finish。
pom依赖
wyait-web
com.wyait.web
1.0.0
4.0.0
com.wyait.web.pojo
wyait-web-pojo
${wyait.web.version}
jar
创建wyait-web-service、wyait-web-dao、wyait-web-controller项目一样。pom依赖根据依赖关系,自行调整,详见源码。
创建wyait-web-webapp
方式一
第一种,创建方式和wyait-web-pojo一样;
创建项目完成后,另外需要几步操作:
- 新建src/main/webapp/文件目录,用于存放静态资源文件和页面;
- src/main/java/目录下,新建包com.wyait.web和com.wyait.web.config,存放springboot启动Application类和相关配置类;
- src/main/resources/目录下,保存application.properties、log4j2.xml等配置文件。
wyait-web-webapp项目架构如下:
注意:这里WEB-INF/下面多了一个web.xml文件,或在pom文件中添加一个maven-war-plugin插件配置,下文会说明原因。
方式二
第二种,在选择maven的时候,选中:Create from archetype,找到:maven-archetype-webapp,创建webapp项目;
然后调整项目结构和依赖和方式一一致即可。//TODO
方式三
第三种,New --> project --> Spring Initializr创建springboot项目 --> 调整项目结构和依赖和上面保持一致即可。//TODO
测试
新建controller类、静态文件和页面,详见源码!
启动测试:
IndexController中有midd-common项目中通用工具类的测试,也可自行编写测试
其他技术依赖。//TODO
项目安全
- 用户登录后,设置的cookie值token必须加密处理;
- API接口安全,涉及用户相关模块的操作,后台会校验token;也可参考博客:java接口安全:https://blog.51cto.com/wyait/1920134;
- 防止xss、sql注入等,后期统一处理。
项目检出
eclipse
- 以eclipse为例,找到SVN资源库,输入SVN地址,checkout:
- 检出后,查看项目结构如下:
- 选中其中的module项目,右键 --> import:
选择:Existing Maven Projects --> next --> finish;
就会导出module模块wyait-web-controller,其他模块操作一样。
- 运行:
在wyait-web-webapp项目src/main/java/com/wyait/web/目录下,使用 WyaitWebApplication类中的main方法启动项目。
也可配置tomcat启动,注意项目路径。//TODO
IntellJ IDEA
相比eclipse简单一些,主要在check out过程中,要注意聚合项目的目录层级结构(平行结构、父子结构)。//TODO
坑
开发工具不同遇到的问题
eclipse和IntellJ IDEA开发工具不同遇到的问题。
使用IntellJ IDEA,必须在依赖中添加以下配置:
- 使用IDEA开发工具时,需要在wyait-web目录下,新建src/main/java、src/main/resources空白目录,否则启动时报错:
Caused by: java.lang.IllegalArgumentException: Folder 'D:\wyaitWorkspace\wyait-web\src\main\resources' must exist and must be a directory
加上即可解决;
- 使用IDEA开发工具时,注释下面的依赖:
- 使用IDEA开发时,为了配置静态资源文件放在webapp目录下,需要新增如下配置:
src/main/webapp
META-INF/resources
**/**
src/main/resources
true
**/*
项目package时的问题
wyait-web-webapp要打包为war时,项目src/main/webapp/WEB-INF/目录下,如果没有web.xml文件,打包会报错:找不到WEB-INF/web.xml.
... ...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 30.266 s
[INFO] Finished at: 2018-07-18T11:37:05+08:00
[INFO] Final Memory: 19M/184M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war (default-war) on project mdd-admin: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode) -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
解决方案
方案一:在项目WEB-INF/目录下新建一个web.xml文件,用于项目package时使用,无其他用途。
web.xml文件不需要增加任何配置,内容如下:
Archetype Created Web Application
方案二【推荐】:在pom.xml中添加依赖:
注意Failed失败中,maven-war-plugin的版本为2.2。所以pom中配置的插件版本要对应一样。
org.apache.maven.plugins
maven-war-plugin
2.2
false