外观
快速上手
技术交流QQ群:3549030
创建一个Maven后端项目
- 方式一 命令方式创建
mvn org.apache.maven.plugins:maven-archetype-plugin:3.2.1:creat
-DgroupId=com.kungfu.demo
-DartifactId=demo
-DpackageName=com.kungfu.demo
方式二 idea开发工具进行创建
方式三 其他开发工具创建,如eclipse
引入Maven依赖
xml
<dependency>
<groupId>io.github.ticktack</groupId>
<artifactId>kungfu</artifactId>
<version>1.2.0</version>
</dependency>
在这里查看最新依赖版本 Kungfu Latest Maven Repository
包括常规的JFinal相关包的引入:
xml
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jfinal</artifactId>
<version>${jfinal-version}</version>
</dependency>
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jfinal-undertow</artifactId>
<version>${jfinal-undertow-version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson-version}</version>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>${java-jwt-version}</version>
</dependency>
<dependency>
<groupId>com.lastB7</groupId>
<artifactId>jfinal-swagger-knife4j</artifactId>
<version>${jfinal-swagger-knife4j-version}</version>
</dependency>
项目重点配置
在JFinal常规配置的基础上,这里仅介绍重点配置,内嵌容器undertow配置和在线接口文档Swagger配置,采用的是jfinal-swagger-knife4j
内嵌容器undertow配置
解决引用外部依赖热加载问题。如Swagger、Kungfu的引入。
xml
# 配置 undertow
undertow.devMode=true
undertow.host=0.0.0.0
undertow.port=9000
# 注意:此处为热加载类前缀配置,多个用英文逗号隔开
undertow.hotSwapClassPrefix=com.lastb7.swagger.,org.kungfu.
热加载类异常分析
如果两个类路径与类名完全一样的两个类出现类型转换异常(java.lang.ClassCastException),或者子类对象无法赋值给基类变量,可以通过配置 hotSwapClassPrefix 来解决。
再补充几个也属于这个问题的异常:java.lang.VerifyError: Bad type on operand stack 以及 java.lang.IncompatibleClassChangeError
假定出现转换异常的类为: "com.demo.UserService",可以通过热加载类前缀配置解决,如下:
xml
undertow.hotSwapClassPrefix=com.demo.
原因是 jfinal undertow 默认只对 target/classes 以及 jfinal 自身进行热加载。所以当你的类文件在 jar 包并且需要被热加载的时候就需要通过上面的办法添加为被热加载。
一般情况下你项目中 target/classes 下的类文件正好才是需要被热加载的类,所以不会有问题。这个配置仅用于开发环境,部署环境没有热加载机制,所以完全没有影响。
应用接口Swagger配置
提供在线API文档,主要解决前后端对接效率问题。
- 配置路由
java
@Override
public void configRoute(Routes me) {
// swagger路由
me.add(new SwaggerRoutes());
}
- 配置插件
java
@Override
public void configPlugin(Plugins me) {
// swagger插件
me.add(new SwaggerPlugin());
}
- 配置处理器
java
@Override
public void configHandler(Handlers me) {
// swagger处理
me.add(new SwaggerHandler());
}
其他常规配置,不再赘述。