把activiti的springmvc工程转为springboot

思路:直接在原工程改,风险大而且费时,所以选择建个新的springboot工程,把原工程文件挪过来。【activiti版本是5.22,springboot版本是1.5.17.RELEASE】

  1. 首先创建springboot工程,这儿就在不赘述了,网上很多建springboot的文章,按步骤来做就好,主类不要放在java下面,新建包放在包的顶层即可,不然会提示

Spring Boot Application in default package

建好后新建webapp目录,具体参考:springboot工程创建webapp目录

  1. 建好之后,把java类直接挪过来,配置文件放在resources下面,楼主天真的以为jsp页面(也就是activiti设计器)放在static或者public等这种springboot用来放静态资源的路径下就可以,可是怎么都不行,jsp必须在webapp下面,保持同springmvc一样结构。
  2. 主类排除掉spring Security,如下图:
    在这里插入图片描述
  3. 加视图解析器,两种方式,代码与配置文件
@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

  1. 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. 有什么疑问可以留言哈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值