欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

flowable6.4使用oracle启动不能自动创建表的坑

程序员文章站 2022-07-04 20:19:00
...

spring-boot整合flowable,oracle数据库启动报错:

org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: java.sql.SQLException: ORA-00942: 表或视图不存在
### The error may exist in org/flowable/db/mapping/entity/Property.xml
### The error may involve org.flowable.engine.impl.persistence.entity.PropertyEntityImpl.selectProperty-Inline
### The error occurred while setting parameters
### SQL: select * from ACT_ID_USER where ID_ = ?
### Cause: java.sql.SQLException: ORA-00942: 表或视图不存在
	at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:150)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:77)
	at org.flowable.engine.common.impl.db.DbSqlSession.selectById(DbSqlSession.java:237)

,最后只生成几个act_id_开头的表:

flowable6.4使用oracle启动不能自动创建表的坑

很明显,初始化flowable自带表遇到错误意外终止。

检查了下配置:

configuration.setDataSource(dataSource);
		configuration.setTransactionManager(transactionManager);
		configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
		configuration.setActivityFontName("宋体");
		configuration.setLabelFontName("宋体");
		configuration.setAnnotationFontName("宋体");
		configuration.setCustomSessionFactories(getCustomSessionFactories());
		configuration.setAsyncExecutorAsyncJobAcquisitionEnabled(false);
		configuration.setHistoryLevel(HistoryLevel.FULL);
		configuration.setIdGenerator(uuidGenerator());
		// 开启内嵌的微型V5引擎,兼容V5的流程定义数据
		configuration.setFlowable5CompatibilityEnabled(true);
		configuration.setFlowable5CompatibilityHandlerFactory(springFlowable5CompatibilityHandlerFactory());

这个应该是我们没有设置区分数据库用户Schema的问题,添加以下配置:

if (!CheckUtil.isNullorEmpty(defaultSchema))
		{
			configuration.setDatabaseSchema(defaultSchema);
		}

这个defaultSchema,是通过配置文件注入进来:

@Value("${spring.jpa.properties.hibernate.default_schema:}")
	private String defaultSchema;

 

这个时候,启动,觉得应该是可以的了,毕竟mysql没有区分用户Schema的问题,初始化都一直是ok的,可惜的是结果是残酷的,还是报了错:

flowable6.4使用oracle启动不能自动创建表的坑

 

这个错一看,应该就是oracle驱动的问题,后来经过排查,发现我们项目用的是ojdbc6,这个版本是没有提供setSchema()方法的,那我就往上找最新的版本试试,于是找到了ojdbc7,发现这个版本是有提供setSchema(),所有就升级到ojdb7,重新启动,成功了,表也自动创建了,问题得到了解决。

为此分享一下这个坑给大伙。

 

相关标签: flowable 工作流