问题描述:使用activiti-spring-boot-starter-basic依赖后发现activiti会自动将resources/processes/xx.bpmn进行发布,然后在页面查看时,发现流程图是乱码的
原因分析:
经过一顿查找资料后网上说要设置activiti的字体
processEngineConfiguration.setActivityFontName("宋体");
processEngineConfiguration.setAnnotationFontName("宋体");
processEngineConfiguration.setLabelFontName("宋体");
但是尴尬的是,由于是引入activiti-spring-boot-starter-basic,它里面是全自动的,没有找到可以配置的地方,最后找到该bean在DataSourceProcessEngineAutoConfiguration中创建,就是以下代码:
@Bean
@ConditionalOnMissingBean
public SpringProcessEngineConfiguration springProcessEngineConfiguration(
DataSource dataSource,
PlatformTransactionManager transactionManager,
SpringAsyncExecutor springAsyncExecutor) throws IOException {
return this.baseSpringProcessEngineConfiguration(dataSource, transactionManager, springAsyncExecutor);
}
注:springProcessEngineConfiguration继承于ProcessEngineConfiguration,是activiti配置类的子类
解决方案:
最后想到通过aop切面方式解决,以下是aop切面代码:
@Aspect
@Component
public class ActivitiInterceptor {
@Pointcut("execution(* org.activiti.spring.boot.DataSourceProcessEngineAutoConfiguration.DataSourceProcessEngineConfiguration.springProcessEngineConfiguration(..))")
public void point() {}
// 设置字体
@Around("point()")
Object around(ProceedingJoinPoint pj) throws Throwable {
SpringProcessEngineConfiguration springProcessEngineConfiguration = (SpringProcessEngineConfiguration) pj.proceed(pj.getArgs());
springProcessEngineConfiguration.setActivityFontName("宋体");
springProcessEngineConfiguration.setAnnotationFontName("宋体");
springProcessEngineConfiguration.setLabelFontName("宋体");
return springProcessEngineConfiguration;
}
}
总算解决