flowable6.4.1+springboot使用dmn

resources/dmn/strings_1.dmn

<?xml version="1.0" encoding="UTF-8"?>

<definitions xmlns="http://www.omg.org/spec/DMN/20151101/dmn.xsd"

id="simple" name="Simple" namespace="http://activiti.org/dmn">

<decision id="decision" name="Simple decision">

<decisionTable id="decisionTable">

<input>

<inputExpression id="inputExpression1" typeRef="string">

<text>input1</text>

</inputExpression>

</input>

<output id="output1" label="Output 1" name="output1" typeRef="string" />

<rule>

<inputEntry id="inputEntry1">

<text><![CDATA[.startsWith('test')]]></text>

</inputEntry>

<outputEntry id="outputEntry1">

<text>'shareniu1'</text>

</outputEntry>

</rule>

<rule>

<inputEntry id="inputEntry2">

<text><![CDATA[.endsWith('test')]]></text>

</inputEntry>

<outputEntry id="outputEntry2">

<text>'shareniu2'</text>

</outputEntry>

</rule>

</decisionTable>

</decision>

</definitions>

Service.java

import org.flowable.dmn.api.DmnRepositoryService;

import org.flowable.dmn.api.DmnRuleService;

import org.flowable.engine.delegate.DelegateExecution;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

@Service

public class TimerRedPacketService {

@Autowired

private DmnRuleService dmnRuleService;

@Autowired

private DmnRepositoryService dmnRepositoryService;

public void redPacket(DelegateExecution execution) {

dmnRepositoryService.createDeployment().name("secondDeployment").disableSchemaValidation()

.addClasspathResource("dmn/strings_1.dmn").tenantId("testTenant")

.deploy(www.dasheng178.com);

Map<String, Object> processVariablesInput = new HashMap<>();

processVariablesInput.put(www.gaozhuoyiqi.com"input1", "Stringtest");

List<Map<String, Object>> result = dmnRuleService.executeDecisionByKey("decision", processVariablesInput);

System.out.println(result.get(0).get("output1"));

}

}

resources/flowable.dmn.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean id="dmnEngineConfiguration" class="org.flowable.dmn.engine.impl.cfg.StandaloneDmnEngineConfiguration">

<property name="jdbcUrl" value="jdbc:mysql://130.51.23.249:3306/flowable" />

<property name="jdbcDriver" value="com.mysql.jdbc.Driver" />

<property name="jdbcUsername" value="flowable" />

<property name="jdbcPassword" value="flowable" />

</bean>

</beans>

pom.xml

<dependency>

<groupId>org.flowable</groupId>

<artifactId>flowable-spring-boot-starter-dmn</artifactId>

<version>${flowable.version}</version>

</dependency>

其他乱码

其他乱码主要是指使用一些第三方框架导致的乱码,例如使用 Alibaba 的 fastjson,开发者就需要在配置 HttpMessageConverter 时指定编码格式,否则就有可能出现乱码,这种第三方框架的乱码松哥没法穷举,大伙在使用时需要注意看官方文档,fastjson 的 HttpMessageConverter 配置如下:

@Bean

FastJsonHttpMessageConverter fastJsonHttpMessageConverter() {

FastJsonHttpMessageConverter converter www.yongshi123.cn= new FastJsonHttpMessageConverter();

FastJsonConfig config www.chenpanzhen-nice.com= new FastJsonConfig();

config.setCharset(www.yunshengyule178.com Charset.forName("UTF-8"));

converter.setFastJsonConfig(www.yongshiyule178.com  config);

converter.setDefaultCharset(Charset.forName("UTF-8"));

return converter;

}

一个隐蔽的乱码

除了前面介绍的这几种乱码之外,还有一个比较隐蔽的乱码,容易被很多初学者忽略的地方,就是数据在从 Java 应用传递到 MySQL 的过程中,发生了乱码,这种问题一般在 Windows 上不易发生,如果数据库装在 Linux 上,则这个问题就很容易发生,数据在代码中命名没有乱码,存到 MySQL 上就乱码了,但是如果直接使用 Navicat 等工具往 MySQL 上存储数据,又不会乱码,或者 MySQL 中数据没有乱码,但是用 Java 查询出来就乱码了,这种都是数据在 应用 和 数据库 之间传递时发生了乱码,解决方式很简单,在数据库连接地址上指定编码即可,如下:

db.url=jdbc:mysql:///www.yinmaoyule178.com/  yuetong?useUnicode=true&characterEncoding=UTF-8

大致就这些,还有一些非常偶尔的情况可能会用到 @RequestMapping 注解中的 produces 属性,在这里指定数据类型即可。

好了,差不多就这些,下次有人问你为啥我的又乱码了,直接把这篇文章甩给他。大伙有什么解决乱码的独门密器也可以一起来讨论。

经常有读者在公众号上问 JavaWeb 乱码的问题,昨天又有一个小伙伴问及此事,其实这个问题很简单,但是想要说清楚却并不容易,因为每个人乱码的原因都不一样,给每位小伙伴都把乱码的原因讲一遍也挺费时间的,因此,松哥今天决定写一篇文章,和大伙好好捋捋 JavaWeb 中的乱码问题。
对于一些老司机而言,其实并不太容易遇到乱码问题,但是对于一些新手来说,乱码几乎是家常便饭,而且每当乱码时,网上搜了一大堆解决方案,发现自己的问题还是没能解决,其实这就是平时研究代码不求甚解导致的,乱码问题,也要去分析,然后才能对症下药,才能药到病除。
整体思路首先出现乱码之后,要先去确认乱码的地方,当一个网页上出现乱码,有可能是浏览器显示问题,也有可能是 Java 编码问题,也有可能数据库中的数据本身就是乱码的,所以我们要做的第一件事就是确认乱码发生的位置,缩小 bug 范围,通过打印日志或者 debug 首先去确认乱码发生的位置,然后再去进一步解决,一般来说,乱码的原因大致上可以分为两类:
请求乱码响应乱码请求乱码,可能是因为参数放在 URL 地址中乱码,也有可能是参数放在请求体中乱码,不同传参方案也对应了不同的乱码解决方案。如果是响应乱码,那么原因就会比较多了,一般来说,有如下几种可能的原因:
数据库本身乱码数据在 Java 代码中乱码数据在浏览器显示的时候乱码数据在从 Java 应用传到数据库的过程中乱码对于不同的乱码原因,会有不同的解决方案,对症下药,才能药到病除,所以当出现乱码时,大家要做的第一件事就是分析乱码发生的原因,找到原因了,才能找到解决方案。
基本原则发生乱码是因为各自编码不同导致的,所以,大家首先要有一个良好的开发习惯,项目编码,文件编码都要统一起来,松哥有个同事就因为 Freemarker 乱码,找了半天没找到原因,后来在松哥建议下修改了项目编码,乱码问题才解决了,一般来说,公司制度稍微成熟一些,都会对项目编码,文件编码有硬性规定的。在Eclipse 中,设置项目编码方式如下(工程的编码要提前设置,如果项目已经开发一半再去设置,已有的中文就会乱码):
Window->Preferences->General

然后对于 JSP 文件也需要提前设置好编码方式,如下:

这是在 Eclipse 中设置文件编码,如果是在 IntelliJ IDEA中,则不需要设置JSP文件编码,因为默认就是 UTF-8,只需要提前设置下工程编码即可:

除了开发工具的编码,数据库的编码也要统一,一般来说,主要是设置一下数据库的编码和数据表的编码,如下:
设置数据库编码:
CREATE DATABASE `vhr` DEFAULT CHARACTER SET utf8;设置数据表编码:
DROP TABLE IF EXISTS `adjustsalary`;CREATE TABLE `adjustsalary` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `eid` int(11) DEFAULT NULL,  PRIMARY KEY (`id`),) ENGINE=InnoDB DEFAULT CHARSET=utf8;这些是准备工作,这些工作做好了,还是有可能会遇到乱码问题,接下来我们就具体问题具体分析。
请求乱码请求乱码,就是说数据在浏览器中显示是正常的,但是传到 Java 后端之后,就乱码了,这种乱码一般来说,分为两种:
参数放在 URL 地址中导致的乱码参数放在请求体中导致的乱码两种乱码原因,对应了两种不同的解决方案。分别来看。
URL 地址中的参数乱码这种乱码主要发生在 GET 请求中,因为在 GET 请求中我们一般通过 URL 来传递参数,这个问题可以在代码中解决,但是太过于麻烦,因此一般我们直接在Tomcat配置中解决,修改 Tomcat的conf/server.xml 文件,修改 URL 编码格式,如下:

这样就可以搞定 URL 地址中的参数乱码。
请求体中的参数乱码请求体中的参数乱码,我们可以在解析参数之前通过设置 HttpServletRequest 的编码来解决,如下:
request.setCharacterEncoding("UTF-8");但是一样也太过于麻烦,所以如果是普通的 Servlet/JSP 项目,我们就可以直接定义一个过滤器来处理,如下:
public class EncodingFilter implements Filter {    @Override    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {        request.setCharacterEncoding("UTF-8");        chain.doFilter(request, response);    }}过滤器配置:
    <filter>        <filter-name>encodingFilter</filter-name>        <filter-class>org.sang.filter.EncodingFilter</filter-class>    </filter>    <filter-mapping>        <filter-name>encodingFilter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>在工程编码和JSP/HTML编码都没问题的情况下,请求乱码基本上就是这两种情况。
响应乱码如果在浏览器上加载页面看到了乱码,大家首先要确认在从服务端往浏览器写数据的前一刻,这个数据还没有乱码(即数据库中查询出来的数据是OK的,没有发生乱码的问题),那么对于这种乱码,我们只需要设置响应数据的 ContentType 就可以了,如下:
response.setContentType("text/html;charset=UTF-8");如果从数据库中查询出来的数据就是乱码的,那么就需要去确认数据库中的编码是否 OK 。
框架处理前面提到的方案,都是在 Servlet/JSP 项目中我们可以采用的方案,在 SSM 框架中当然也可以使用,但是,SpringMVC 框架本身也提供了一个过滤器,我们可以借用这个过滤器更加高效的解决响应乱码问题,如下:
<filter>    <filter-name>encoding</filter-name>    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>    <init-param>        <param-name>encoding</param-name>        <param-value>UTF-8</param-value>    </init-param>    <init-param>        <param-name>forceRequestEncoding</param-name>        <param-value>true</param-value>    </init-param>    <init-param>        <param-name>forceResponseEncoding<www.gaozhuoyiqi.com /param-name>        <param-value>true</param-value>    </init-param></filter><filter-mapping>    <filter-name>encoding</filter-name>    <url-pattern>/*</url-pattern></filter-mapping>当然,上面这段配置并不能代替 Tomcat 中 conf/server.xml 中的编码配置,如果是在 Spring Boot 中,配置可以更加简单,只需要在 application.properties 中添加如下配置即可:
server.tomcat.uri-encoding=UTF-8spring.http.encoding.force-request=truespring.http.encoding.force-response=true其他乱码其他乱码主要是指使用一些第三方框架导致的乱码,例如使用 Alibaba 的 fastjson,开发者就需要在配置 HttpMessageConverter 时指定编码格式,否则就有可能出现乱码,这种第三方框架的乱码松哥没法穷举,大伙在使用时需要注意看官方文档,fastjson 的 HttpMessageConverter 配置如下:
@BeanFastJsonHttpMessageConverter fastJsonHttpMessageConverter() {    FastJsonHttpMessageConverter converter www.yongshi123.cn= new FastJsonHttpMessageConverter();    FastJsonConfig config www.chenpanzhen-nice.com= new FastJsonConfig();    config.setCharset(www.yunshengyule178.com Charset.forName("UTF-8"));    converter.setFastJsonConfig(www.yongshiyule178.com  config);    converter.setDefaultCharset(Charset.forName("UTF-8"));    return converter;}一个隐蔽的乱码除了前面介绍的这几种乱码之外,还有一个比较隐蔽的乱码,容易被很多初学者忽略的地方,就是数据在从 Java 应用传递到 MySQL 的过程中,发生了乱码,这种问题一般在 Windows 上不易发生,如果数据库装在 Linux 上,则这个问题就很容易发生,数据在代码中命名没有乱码,存到 MySQL 上就乱码了,但是如果直接使用 Navicat 等工具往 MySQL 上存储数据,又不会乱码,或者 MySQL 中数据没有乱码,但是用 Java 查询出来就乱码了,这种都是数据在 应用 和 数据库 之间传递时发生了乱码,解决方式很简单,在数据库连接地址上指定编码即可,如下:
db.url=jdbc:mysql:///www.yinmaoyule178.com/  yuetong?useUnicode=true&characterEncoding=UTF-8大致就这些,还有一些非常偶尔的情况可能会用到 @RequestMapping 注解中的 produces 属性,在这里指定数据类型即可。
好了,差不多就这些,下次有人问你为啥我的又乱码了,直接把这篇文章甩给他。大伙有什么解决乱码的独门密器也可以一起来讨论。

上一篇:佛祖保佑,永无bug


下一篇:(转)用eclipse创建一个j2ee的web工程后,左面projects窗口中的项目如何没有显示webRoot文件夹,除了src的文件夹,其他都不显示