把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;
    }

 

 

  

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM