思路:直接在原工程改,风险大而且费时,所以选择建个新的springboot工程,把原工程文件挪过来。【activiti版本是5.22,springboot版本是1.5.17.RELEASE】
- 首先创建springboot工程,这儿就在不赘述了,网上很多建springboot的文章,按步骤来做就好,主类不要放在java下面,新建包放在包的顶层即可,不然会提示
Spring Boot Application in default package
建好后新建webapp目录,具体参考:springboot工程创建webapp目录
- 建好之后,把java类直接挪过来,配置文件放在resources下面,楼主天真的以为jsp页面(也就是activiti设计器)放在static或者public等这种springboot用来放静态资源的路径下就可以,可是怎么都不行,jsp必须在webapp下面,保持同springmvc一样结构。
- 主类排除掉spring Security,如下图:
- 加视图解析器,两种方式,代码与配置文件
@Configuration
public class ViewResolverConfig extends WebMvcConfigurerAdapter {
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
/**
* 配置视图解析器
*
* @return
*/
@Bean
public InternalResourceViewResolver configureInternalResourceViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
resolver.setOrder(0);
resolver.setContentType("text/html;charset=UTF-8");
return resolver;
}
或者
spring.mvc.view.prefix=/views/
spring.mvc.view.suffix=.jsp
- pom中加入依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
springboot内置的tomcat不行,真不知道为什么,感觉和activiti版本太低有关
6. 扫描activiti自带的service,springboot是从启动类所在包开始,扫描当前包及其子包下的所有文件,不包含jar中,所以要单独扫描。
7. 继承SpringBootServletInitializer
具体原因参考:SpringBootServletInitializer
7. 如果你的项目没有jsp,只是纯html,那就不用这么费劲了,把静态文件放在resources下面就行了,然后指定静态文件路径和解析路径,如下:
@Configuration
public abstract class StaticResourceConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
}
}
或者
spring.mvc.static-path-pattern=/**
spring.resources.static-locations=classpath:/static/
static-path-pattern的意思是静态资源怎么去访问,static-locations的意思是你的静态资源放在哪,假如在static下有个a.png,可以这样访问:http://localhost:8080/项目的ContextPath/a.png
9. 期间还遇到了很多冲突和版本问题,可适当降低或者升高jar的版本就能解决,比如
java.lang.NoClassDefFoundError: org/hibernate/boot/model/naming/PhysicalNamingStrategy
这是因为hibernatete版本太低了。
再比如
java.io.FileNotFoundException: E:\repository\org\apache\xmlgraphics\fop\0.94\avalon-framework-4.2.0.jar (系统找不到指定的文件。)
at java.util.zip.ZipFile.open(Native Method) ~[na:1.8.0_231]
at java.util.zip.ZipFile.(ZipFile.java:225) ~[na:1.8.0_231]
at java.util.zip.ZipFile.(ZipFile.java:155) ~[na:1.8.0_231]
at java.util.jar.JarFile.(JarFile.java:166) ~[na:1.8.0_231]
at java.util.jar.JarFile.(JarFile.java:130) ~[na:1.8.0_231]
从而引发的一系列的找不到
java.io.FileNotFoundException: E:\repository\org\apache\xmlgraphics\fop\0.94\batik-all-1.6.jar (系统找不到指定的文件。)
java.io.FileNotFoundException: E:\repository\org\apache\xmlgraphics\fop\0.94\fop-hyph.jar (系统找不到指定的文件。)
java.io.FileNotFoundException: E:\repository\org\apache\xmlgraphics\fop\0.94\jai_codec.jar (系统找不到指定的文件。)
java.io.FileNotFoundException: E:\repository\org\apache\xmlgraphics\fop\0.94\jai_core.jar (系统找不到指定的文件。)
java.io.FileNotFoundException: E:\repository\org\apache\xmlgraphics\fop\0.94\jimi.jar (系统找不到指定的文件。)
java.io.FileNotFoundException: E:\repository\org\apache\xmlgraphics\fop\0.94\serializer-2.7.0.jar (系统找不到指定的文件。)
是由于tomcat版本问题造成,只需要将上面pom中的
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
替换为
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>7.0.104</version>
<scope>provided</scope>
</dependency>
即可。
1.5.17版本的springboot自带的tomcat版本为8.5.34,太高了,这边直接指定。
或许会报
java.lang.NoSuchMethodError: org.apache.tomcat.JarScanner.scan(Ljavax/servlet/ServletContext;Ljava/lang/ClassLoader;Lorg/apache/tomcat/JarScannerCallback;Ljava/util/Set;)V
at org.apache.jasper.compiler.TldLocationsCache.init(TldLocationsCache.java:257) ~[tomcat-embed-jasper-7.0.104.jar:7.0.104]
意思是tomcat冲突了,然后发现如下图,没排除干净,继续去springboot根中排除或者单独引依赖,覆盖springboot中的相关版本。
直接添加如下依赖:
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-el</artifactId>
<version>7.0.104</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>7.0.104</version>
</dependency>
启动报:
Caused by: java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory
at org.apache.catalina.util.LifecycleBase.<clinit>(LifecycleBase.java:37)
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:169)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:164)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:134)
... 13 common frames omitted
继续引入:
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-juli</artifactId>
<version>7.0.104</version>
</dependency>
即可。
10. 有什么疑问可以留言哈。