|
@@ -7,18 +7,12 @@ import com.qmth.boot.data.upgrade.service.DataUpgradeService;
|
|
|
import com.qmth.boot.data.upgrade.utils.ClassHelper;
|
|
|
import com.qmth.boot.data.upgrade.utils.VersionComparator;
|
|
|
import com.zaxxer.hikari.HikariDataSource;
|
|
|
-import org.apache.ibatis.session.TransactionIsolationLevel;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.boot.context.event.ApplicationPreparedEvent;
|
|
|
import org.springframework.context.ApplicationListener;
|
|
|
import org.springframework.jdbc.core.BeanPropertyRowMapper;
|
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
-import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
|
|
-import org.springframework.transaction.TransactionDefinition;
|
|
|
-import org.springframework.transaction.TransactionStatus;
|
|
|
-import org.springframework.transaction.support.TransactionCallbackWithoutResult;
|
|
|
-import org.springframework.transaction.support.TransactionTemplate;
|
|
|
import org.springframework.util.ClassUtils;
|
|
|
|
|
|
import java.lang.reflect.Constructor;
|
|
@@ -98,7 +92,6 @@ public class DataUpgradeListener implements ApplicationListener<ApplicationPrepa
|
|
|
public void handlerDataUpgrade() {
|
|
|
try (HikariDataSource dataSource = this.initDataSource()) {
|
|
|
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
|
|
|
- TransactionTemplate transactionTemplate = new TransactionTemplate(new DataSourceTransactionManager(dataSource));
|
|
|
|
|
|
if (!this.existBootAppInfo(jdbcTemplate)) {
|
|
|
if (!properties.getBaseline()) {
|
|
@@ -133,35 +126,24 @@ public class DataUpgradeListener implements ApplicationListener<ApplicationPrepa
|
|
|
List<String> versionKeys = new ArrayList<>(serviceMaps.keySet());
|
|
|
versionKeys.sort(new VersionComparator());
|
|
|
|
|
|
- // 调整事务隔离级别:串行化(最严格模式加锁读,避免脏读,幻读,不可重复读等)
|
|
|
- transactionTemplate.setIsolationLevel(TransactionIsolationLevel.SERIALIZABLE.getLevel());
|
|
|
- transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
|
|
|
- transactionTemplate.execute(new TransactionCallbackWithoutResult() {
|
|
|
- @Override
|
|
|
- protected void doInTransactionWithoutResult(TransactionStatus status) {
|
|
|
- try {
|
|
|
- // 升级锁定
|
|
|
- if (!tryLock(jdbcTemplate, appInfo.getAppCode())) {
|
|
|
- throw new RuntimeException("升级锁定中,请稍后再试!");
|
|
|
- }
|
|
|
- log.info("upgrade locking...");
|
|
|
-
|
|
|
- for (String version : versionKeys) {
|
|
|
- log.warn("*************** data upgrade version:{} start ***************", version);
|
|
|
- serviceMaps.get(version).process(jdbcTemplate);
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- // DML-SQL语句支持事务,执行失败时触发自动回滚。
|
|
|
- status.setRollbackOnly();
|
|
|
- // DDL-SQL语句不支持事务,执行失败时请采用其它补偿机制回滚!!!
|
|
|
- throw new RuntimeException("SQL语句执行异常!", e);
|
|
|
- } finally {
|
|
|
- // 升级解锁
|
|
|
- unLock(jdbcTemplate, appInfo.getAppCode());
|
|
|
- log.info("upgrade unlock...");
|
|
|
- }
|
|
|
+ // 升级锁定
|
|
|
+ if (!tryLock(jdbcTemplate, appInfo.getAppCode())) {
|
|
|
+ throw new RuntimeException("升级锁定中,请稍后再试!");
|
|
|
+ }
|
|
|
+ log.info("upgrade locking...");
|
|
|
+
|
|
|
+ try {
|
|
|
+ for (String version : versionKeys) {
|
|
|
+ log.warn("*************** data upgrade version:{} start ***************", version);
|
|
|
+ serviceMaps.get(version).process(jdbcTemplate);
|
|
|
}
|
|
|
- });
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new RuntimeException("SQL语句执行异常!", e);
|
|
|
+ } finally {
|
|
|
+ // 升级解锁
|
|
|
+ unLock(jdbcTemplate, appInfo.getAppCode());
|
|
|
+ log.info("upgrade unlock...");
|
|
|
+ }
|
|
|
|
|
|
// 数据升级完成后,更新应用信息表
|
|
|
this.updateBootAppInfo(jdbcTemplate, properties.getAppCode(), properties.getAppVersion());
|