把flowable弄到自己项目中,遇到的各种坑总结。

一、下载官方提供war包

  1、在工程下建flowable包,将内容复制到下面

  复制flowable-modeler\WEB-INF\classes\static到自己项目中

  

  2修改js引用路径 app-cfg.js

    

FLOWABLE.CONFIG = {
    'onPremise' : true,
    'contextRoot' : "",
    'webContextRoot' : "/static/flowable",
    'datesLocalization' : false
};

 

 

  3、引入springboot官方jar包

      

<dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-spring-boot-starter</artifactId>
            <version>${flowable.version}</version>
        </dependency>
        <dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-ui-modeler-rest</artifactId>
            <version>${flowable.version}</version>
            <exclusions>
                <exclusion>
                    <artifactId>guava</artifactId>
                    <groupId>com.google.guava</groupId>
                </exclusion>
            </exclusions>
        </dependency>

  4、添加用户认证,目前比较靠谱的代码如下:

  

@Controller
@RequestMapping("/app")

public class AccountUtil{
@RequestMapping("/rest/account")
@ResponseBody
public UserRepresentation getAccount() {
User user=new User() {
@Override
public String getId() {
return "admin";
}

@Override
public void setId(String s) {

}

@Override
public String getFirstName() {
return "admin";
}

@Override
public void setFirstName(String s) {

}

@Override
public void setLastName(String s) {

}

@Override
public String getLastName() {
return "admin";
}

@Override
public void setEmail(String s) {

}

@Override
public String getEmail() {
return "admin";
}

@Override
public String getPassword() {
return "admin";
}

@Override
public void setPassword(String s) {

}

@Override
public boolean isPictureSet() {
return false;
}
};
user.setId("admin");
SecurityUtils.assumeUser(user);

UserRepresentation userRepresentation = new UserRepresentation();
userRepresentation.setId("admin");
userRepresentation.setFirstName("admin");
List<String> privileges=new ArrayList<>();
List<String> pris = new ArrayList<>();
pris.add(DefaultPrivileges.ACCESS_MODELER);
pris.add(DefaultPrivileges.ACCESS_IDM);
pris.add(DefaultPrivileges.ACCESS_ADMIN);
pris.add(DefaultPrivileges.ACCESS_TASK);
userRepresentation.setPrivileges(privileges);
return userRepresentation;

}
}

二、填坑

  1、启动项目,看看抱什么错误,然后挨个修复

      

Caused by: java.lang.IllegalStateException: Required key 'idm.app.url' not found
    at org.springframework.core.env.AbstractPropertyResolver.getRequiredProperty(AbstractPropertyResolver.java:184)
    at org.springframework.core.env.AbstractEnvironment.getRequiredProperty(AbstractEnvironment.java:552)
    at org.flowable.app.service.idm.RemoteIdmServiceImpl.init(RemoteIdmServiceImpl.java:67)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:365)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:308)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:135)
    ... 31 common frames omitted

    添加idm配置,不通版本可能对应key不一样,这个根据提示自己添加就行

    

idm.app.url=http://localhost:8080/
idm.admin.user=admin
idm.admin.password=test

  2、重启项目可以看到成功页面,其实还未成功,和后台数据还没连起来

  创建流程报错

  

 

 

   服务起返回: {"message":"Internal server error","exception":"nested exception is org.apache.ibatis.exceptions.PersistenceException: \r\n### Error querying database.  Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for org.flowable.app.domain.editor.Model.selectModelByParameters\r\n### Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for org.flowable.app.domain.editor.Model.selectModelByParameters"}

  

  发现mybatis模板没有绑定:

  添加配置,多个可以用,隔开

mybatis-plus.mapper-locations=classpath*:META-INF/modeler-mybatis-mappings/*.xml

    

  3、再次重启后继续报错

Caused by: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'URL [jar:file:/D:/Dev/Repository/org/flowable/flowable-ui-modeler-logic/6.1.2/flowable-ui-modeler-logic-6.1.2.jar!/META-INF/modeler-mybatis-mappings/Model.xml]'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving JdbcType. Cause: java.lang.IllegalArgumentException: No enum constant org.apache.ibatis.type.JdbcType.${blobType}
at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:120)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder.java:92)
at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.buildSqlSessionFactory(MybatisSqlSessionFactoryBean.java:628)
... 111 common frames omitted
Caused by: org.apache.ibatis.builder.BuilderException: Error resolving JdbcType. Cause: java.lang.IllegalArgumentException: No enum constant org.apache.ibatis.type.JdbcType.${blobType}
at org.apache.ibatis.builder.BaseBuilder.resolveJdbcType(BaseBuilder.java:73)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.buildResultMappingFromContext(XMLMapperBuilder.java:382)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:280)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:252)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElements(XMLMapperBuilder.java:244)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:116)
... 113 common frames omitted
Caused by: java.lang.IllegalArgumentException: No enum constant org.apache.ibatis.type.JdbcType.${blobType}
at java.lang.Enum.valueOf(Enum.java:238)
at org.apache.ibatis.type.JdbcType.valueOf(JdbcType.java:25)
at org.apache.ibatis.builder.BaseBuilder.resolveJdbcType(BaseBuilder.java:71)
... 118 common frames omitted

  找到Model.xml,发下如下代码

 

        <result property="tenantId" column="tenant_id" jdbcType="VARCHAR" />

 

  添加如下配置

mybatis-plus.configuration-properties.blobType=BLOB
mybatis-plus.configuration-properties.boolValue=TRUE
mybatis-plus.configuration-properties.prefix=

  如果遇到缺少个别参数,可以在js中通过搜索地址,然后再请求中添加内容    

重启终于好了!!!!!!!!!!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  其实还未好,修改模板会出现不支持请求格式,可以重写WebMvcConfigurationSupport.requestMappingHandlerAdapter方法

  @Override
    public RequestMappingHandlerAdapter requestMappingHandlerAdapter() {
        RequestMappingHandlerAdapter adapter = new RequestMappingHandlerAdapter();

        List<HttpMessageConverter<?>> converters = adapter.getMessageConverters();

        MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
        List<MediaType> supportedMediaTypes = new ArrayList<>();
        MediaType textMedia = new MediaType(MediaType.TEXT_PLAIN, Charset.forName("UTF-8"));
        supportedMediaTypes.add(textMedia);
        MediaType jsonMedia = new MediaType(MediaType.APPLICATION_JSON, Charset.forName("UTF-8"));
        supportedMediaTypes.add(jsonMedia);

        MediaType urlencodeMedia = new MediaType(MediaType.APPLICATION_FORM_URLENCODED, Charset.forName("UTF-8"));
        supportedMediaTypes.add(urlencodeMedia);

        jsonConverter.setSupportedMediaTypes(supportedMediaTypes);

        converters.add(jsonConverter);


        adapter.setMessageConverters(converters);

        return adapter;
    }

 

 

  

 

 

 

posted @ 2020-08-28 18:32  流氓剑客  阅读(14197)  评论(0编辑  收藏  举报