优化事务

This commit is contained in:
zhouhao
2018-07-04 11:11:59 +08:00
parent ce73442004
commit 1cf9f39f89
4 changed files with 74 additions and 6 deletions

View File

@@ -9,6 +9,8 @@ import java.util.List;
public interface DictDefineRepository {
DictDefine getDefine(String id);
List<DictDefine> getAllDefine();
@Deprecated
List<ClassDictDefine> getDefine(Class type);

View File

@@ -54,6 +54,11 @@ public class DefaultDictDefineRepository implements DictDefineRepository {
return parsedDict.get(id);
}
@Override
public List<DictDefine> getAllDefine() {
return new ArrayList<>(parsedDict.values());
}
@Override
public List<ClassDictDefine> getDefine(Class type) {
return Collections.emptyList();

View File

@@ -35,6 +35,7 @@ import org.hswebframework.web.service.form.OptionalConvertBuilder;
import org.hswebframework.web.service.form.initialize.ColumnInitializeContext;
import org.hswebframework.web.service.form.initialize.DynamicFormInitializeCustomer;
import org.hswebframework.web.service.form.initialize.TableInitializeContext;
import org.hswebframework.web.service.form.simple.convert.SmartValueConverter;
import org.hswebframework.web.service.form.simple.dict.EnumDictValueConverter;
import org.hswebframework.web.validator.group.CreateGroup;
import org.hswebframework.web.validator.group.UpdateGroup;
@@ -44,6 +45,8 @@ import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
@@ -102,6 +105,7 @@ public class SimpleDynamicFormService extends GenericEntityService<DynamicFormEn
@CacheEvict(value = "dyn-form-deploy", allEntries = true),
@CacheEvict(value = "dyn-form", allEntries = true),
})
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void deployAllFromLog() {
List<DynamicFormEntity> entities = createQuery()
.select(DynamicFormEntity.id)
@@ -143,6 +147,8 @@ public class SimpleDynamicFormService extends GenericEntityService<DynamicFormEn
return entity;
}
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void deployFromLog(DynamicFormDeployLogEntity logEntity) {
DynamicFormColumnBindEntity entity = JSON.parseObject(logEntity.getMetaData(), DynamicFormColumnBindEntity.class);
DynamicFormEntity form = entity.getForm();
@@ -218,7 +224,13 @@ public class SimpleDynamicFormService extends GenericEntityService<DynamicFormEn
}
@Override
@CacheEvict(key = "'form-columns:'+#columnEntity.formId")
@Caching(
evict = {
@CacheEvict(key = "'form-columns:'+#columnEntity.formId"),
@CacheEvict(key = "'form_id:'+#columnEntity.formId"),
}
)
public String saveOrUpdateColumn(DynamicFormColumnEntity columnEntity) {
String id = saveOrUpdate0(columnEntity);
getDao().incrementVersion(columnEntity.getFormId());
@@ -241,7 +253,13 @@ public class SimpleDynamicFormService extends GenericEntityService<DynamicFormEn
}
@Override
@CacheEvict(key = "'form-columns:'+#result")
@Caching(
evict = {
@CacheEvict(key = "'form-columns:'+#result"),
@CacheEvict(key = "'form_id:'+#result"),
}
)
public String saveOrUpdate(DynamicFormColumnBindEntity bindEntity) {
DynamicFormEntity formEntity = bindEntity.getForm();
@@ -258,7 +276,13 @@ public class SimpleDynamicFormService extends GenericEntityService<DynamicFormEn
}
@Override
@CacheEvict(key = "'form-columns:'+#formId")
@Caching(
evict = {
@CacheEvict(key = "'form-columns:'+#formId"),
@CacheEvict(key = "'form_id:'+#formId"),
}
)
public DynamicFormColumnEntity deleteColumn(String formId) {
DynamicFormColumnEntity oldColumn = DefaultDSLQueryService
.createQuery(formColumnDao)
@@ -337,11 +361,11 @@ public class SimpleDynamicFormService extends GenericEntityService<DynamicFormEn
}
@Override
@Caching(evict = {
@CacheEvict(value = "dyn-form-deploy", key = "'form-deploy:'+#formId+':latest'"),
@CacheEvict(value = "dyn-form", allEntries = true)
})
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void deploy(String formId) {
DynamicFormEntity formEntity = selectByPk(formId);
assertNotNull(formEntity);
@@ -365,7 +389,6 @@ public class SimpleDynamicFormService extends GenericEntityService<DynamicFormEn
: databaseRepository.getDatabase(form.getDataSourceId());
RDBTableMetaData metaData = buildTable(database, form, columns);
metaData.setValidator(validatorFactory.createValidator(metaData));
try {
if (!database.getMeta().getParser().tableExists(metaData.getName())) {
database.createTable(metaData);
@@ -465,15 +488,18 @@ public class SimpleDynamicFormService extends GenericEntityService<DynamicFormEn
} else {
columnMeta.setDataType(column.getDataType());
}
columnMeta.setValueConverter(initColumnValueConvert(columnMeta.getJdbcType(), columnMeta.getJavaType()));
List<ValueConverter> converters = new ArrayList<>();
converters.add(initColumnValueConvert(columnMeta.getJdbcType(), columnMeta.getJavaType()));
if (optionalConvertBuilder != null && null != column.getDictConfig()) {
try {
DictConfig config = JSON.parseObject(column.getDictConfig(), DictConfig.class);
columnMeta.setOptionConverter(optionalConvertBuilder.build(config));
converters.add(optionalConvertBuilder.buildValueConverter(config));
} catch (Exception e) {
logger.warn("创建字典转换器失败", e);
}
}
columnMeta.setValueConverter(new SmartValueConverter(converters));
customColumnSetting(database, form, metaData, column, columnMeta);
metaData.addColumn(columnMeta);
});
@@ -502,6 +528,7 @@ public class SimpleDynamicFormService extends GenericEntityService<DynamicFormEn
id.setComment("主键");
id.setPrimaryKey(true);
id.setNotNull(true);
id.setProperty("read-only", true);
return id;
}

View File

@@ -0,0 +1,34 @@
package org.hswebframework.web.service.form.simple.convert;
import org.hswebframework.ezorm.core.ValueConverter;
import java.util.List;
/**
* @author zhouhao
* @since 3.0.0-RC
*/
public class SmartValueConverter implements ValueConverter {
List<ValueConverter> converters;
public SmartValueConverter(List<ValueConverter> converters) {
this.converters = converters;
}
@Override
public Object getData(Object value) {
for (ValueConverter converter : converters) {
value = converter.getData(value);
}
return value;
}
@Override
public Object getValue(Object data) {
for (ValueConverter converter : converters) {
data = converter.getData(data);
}
return data;
}
}