优化动态表单

This commit is contained in:
zhouhao
2017-07-04 16:57:48 +08:00
parent 98ebcad47d
commit 53117bc4cc
20 changed files with 538 additions and 274 deletions

View File

@@ -2,27 +2,31 @@ package org.hswebframework.web.datasource;
import org.hswebframework.web.datasource.exception.DataSourceNotFoundException;
import org.hswebframework.web.datasource.switcher.DataSourceSwitcher;
import org.hswebframework.web.datasource.switcher.DefaultDataSourceSwitcher;
/**
* 用于操作动态数据源,如获取当前使用的数据源,使用switcher切换数据源等
*
* @author zhouhao
* @since 3.0
* @since 3.0
*/
public final class DataSourceHolder {
private static final DataSourceSwitcher defaultSwitcher = new DefaultDataSourceSwitcher();
/**
* 动态数据源切换器
*/
static DataSourceSwitcher dataSourceSwitcher;
static DataSourceSwitcher dataSourceSwitcher = defaultSwitcher;
/**
* 动态数据源服务
*/
static DynamicDataSourceService dynamicDataSourceService;
public static void checkDynamicDataSourceReady() {
if (dynamicDataSourceService == null) throw new UnsupportedOperationException("dynamicDataSourceService not ready");
if (dynamicDataSourceService == null) {
throw new UnsupportedOperationException("dataSourceService not ready");
}
}
/**
@@ -36,19 +40,22 @@ public final class DataSourceHolder {
* @return 默认数据源
*/
public static DynamicDataSource defaultDataSource() {
checkDynamicDataSourceReady();
return dynamicDataSourceService.getDefaultDataSource();
}
/**
* 根据指定的数据源id获取动态数据源
*
* @param dataSourceId 数据源id
* @return 动态数据源
* @throws DataSourceNotFoundException 如果数据源不存在将抛出此异常
*/
public static DynamicDataSource dataSource(String dataSourceId){
public static DynamicDataSource dataSource(String dataSourceId) {
checkDynamicDataSourceReady();
return dynamicDataSourceService.getDataSource(dataSourceId);
}
/**
* @return 当前使用的数据源
*/

View File

@@ -16,23 +16,17 @@ import java.util.Objects;
*/
@Transactional(rollbackFor = Throwable.class)
public class DefaultJdbcExecutor extends AbstractJdbcSqlExecutor {
private DataSource dataSource;
public DefaultJdbcExecutor(DataSource dataSource) {
Objects.requireNonNull(dataSource);
this.dataSource = dataSource;
}
@Override
public Connection getConnection() {
return DataSourceUtils.getConnection(dataSource);
return DataSourceUtils.getConnection(DataSourceHolder.currentDataSource());
}
@Override
public void releaseConnection(Connection connection) throws SQLException {
DataSourceUtils.releaseConnection(connection, dataSource);
DataSourceUtils.releaseConnection(connection, DataSourceHolder.currentDataSource());
}
@Override
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void exec(SQL sql) throws SQLException {

View File

@@ -3,11 +3,9 @@ package org.hswebframework.web.datasource;
import org.hsweb.ezorm.rdb.executor.SqlExecutor;
import org.hswebframework.web.datasource.starter.AopDataSourceSwitcherAutoConfiguration;
import org.hswebframework.web.datasource.switcher.DataSourceSwitcher;
import org.hswebframework.web.datasource.switcher.DefaultDataSourceSwitcher;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -23,22 +21,16 @@ import javax.sql.DataSource;
@ImportAutoConfiguration(AopDataSourceSwitcherAutoConfiguration.class)
public class DynamicDataSourceAutoConfiguration implements BeanPostProcessor {
@Bean
@ConditionalOnMissingBean(DataSourceSwitcher.class)
public DataSourceSwitcher dataSourceSwitcher() {
return new DefaultDataSourceSwitcher();
}
@Bean
@ConditionalOnMissingBean(SqlExecutor.class)
public SqlExecutor sqlExecutor(DataSource dataSource) {
return new DefaultJdbcExecutor(dataSource);
public SqlExecutor sqlExecutor() {
return new DefaultJdbcExecutor();
}
@Bean
@ConditionalOnMissingBean(DynamicDataSourceService.class)
public DynamicDataSourceService justSupportDefaultDataSourceService(DataSource dataSource){
DynamicDataSourceProxy dataSourceProxy=new DynamicDataSourceProxy(null,dataSource);
public DynamicDataSourceService justSupportDefaultDataSourceService(DataSource dataSource) {
DynamicDataSourceProxy dataSourceProxy = new DynamicDataSourceProxy(null, dataSource);
return new DynamicDataSourceService() {
@Override
public DynamicDataSource getDataSource(String dataSourceId) {
@@ -52,6 +44,7 @@ public class DynamicDataSourceAutoConfiguration implements BeanPostProcessor {
};
}
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;