use DsStrUtils
This commit is contained in:
parent
7994897b25
commit
d54f06fa98
@ -22,6 +22,10 @@ package com.baomidou.dynamic.datasource.toolkit;
|
||||
*/
|
||||
public abstract class DsStrUtils {
|
||||
|
||||
public static boolean isEmpty(String str) {
|
||||
return str == null || str.isEmpty();
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断字符串是否为空
|
||||
*
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
<properties>
|
||||
<java.version>17</java.version>
|
||||
<spring-boot-dependencies.version>3.1.3</spring-boot-dependencies.version>
|
||||
<spring-boot-dependencies.version>3.1.5</spring-boot-dependencies.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
@ -66,6 +66,7 @@
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<version>${spring-boot-dependencies.version}</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.graalvm.buildtools</groupId>
|
||||
|
@ -24,6 +24,7 @@ import com.baomidou.dynamic.datasource.exception.CannotFindDataSourceException;
|
||||
import com.baomidou.dynamic.datasource.provider.DynamicDataSourceProvider;
|
||||
import com.baomidou.dynamic.datasource.strategy.DynamicDataSourceStrategy;
|
||||
import com.baomidou.dynamic.datasource.strategy.LoadBalanceDynamicDataSourceStrategy;
|
||||
import com.baomidou.dynamic.datasource.toolkit.DsStrUtils;
|
||||
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
|
||||
import com.p6spy.engine.spy.P6DataSource;
|
||||
import io.seata.rm.datasource.DataSourceProxy;
|
||||
@ -32,7 +33,6 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.DisposableBean;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.lang.reflect.Field;
|
||||
@ -128,7 +128,7 @@ public class DynamicRoutingDataSource extends AbstractRoutingDataSource implemen
|
||||
* @return 数据源
|
||||
*/
|
||||
public DataSource getDataSource(String ds) {
|
||||
if (StringUtils.isEmpty(ds)) {
|
||||
if (DsStrUtils.isEmpty(ds)) {
|
||||
return determinePrimaryDataSource();
|
||||
} else if (!groupDataSources.isEmpty() && groupDataSources.containsKey(ds)) {
|
||||
log.debug("dynamic-datasource switch to the datasource named [{}]", ds);
|
||||
@ -188,7 +188,7 @@ public class DynamicRoutingDataSource extends AbstractRoutingDataSource implemen
|
||||
* @param ds 数据源名称
|
||||
*/
|
||||
public synchronized void removeDataSource(String ds) {
|
||||
if (!StringUtils.hasText(ds)) {
|
||||
if (!DsStrUtils.hasText(ds)) {
|
||||
throw new RuntimeException("remove parameter could not be empty");
|
||||
}
|
||||
if (primary.equals(ds)) {
|
||||
|
@ -20,12 +20,12 @@ import com.baomidou.dynamic.datasource.enums.SeataMode;
|
||||
import com.baomidou.dynamic.datasource.event.DataSourceInitEvent;
|
||||
import com.baomidou.dynamic.datasource.support.ScriptRunner;
|
||||
import com.baomidou.dynamic.datasource.toolkit.CryptoUtils;
|
||||
import com.baomidou.dynamic.datasource.toolkit.DsStrUtils;
|
||||
import com.p6spy.engine.spy.P6DataSource;
|
||||
import io.seata.rm.datasource.DataSourceProxy;
|
||||
import io.seata.rm.datasource.xa.DataSourceProxyXA;
|
||||
import lombok.Setter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.util.List;
|
||||
@ -84,7 +84,7 @@ public class DefaultDataSourceCreator {
|
||||
throw new IllegalStateException("creator must not be null,please check the DataSourceCreator");
|
||||
}
|
||||
String propertyPublicKey = dataSourceProperty.getPublicKey();
|
||||
if (StringUtils.isEmpty(propertyPublicKey)) {
|
||||
if (DsStrUtils.isEmpty(propertyPublicKey)) {
|
||||
dataSourceProperty.setPublicKey(publicKey);
|
||||
}
|
||||
Boolean propertyLazy = dataSourceProperty.getLazy();
|
||||
@ -112,12 +112,12 @@ public class DefaultDataSourceCreator {
|
||||
DatasourceInitProperties initProperty = dataSourceProperty.getInit();
|
||||
String schema = initProperty.getSchema();
|
||||
String data = initProperty.getData();
|
||||
if (StringUtils.hasText(schema) || StringUtils.hasText(data)) {
|
||||
if (DsStrUtils.hasText(schema) || DsStrUtils.hasText(data)) {
|
||||
ScriptRunner scriptRunner = new ScriptRunner(initProperty.isContinueOnError(), initProperty.getSeparator());
|
||||
if (StringUtils.hasText(schema)) {
|
||||
if (DsStrUtils.hasText(schema)) {
|
||||
scriptRunner.runScript(dataSource, schema);
|
||||
}
|
||||
if (StringUtils.hasText(data)) {
|
||||
if (DsStrUtils.hasText(data)) {
|
||||
scriptRunner.runScript(dataSource, data);
|
||||
}
|
||||
}
|
||||
|
@ -15,11 +15,11 @@
|
||||
*/
|
||||
package com.baomidou.dynamic.datasource.ds;
|
||||
|
||||
import com.baomidou.dynamic.datasource.toolkit.DsStrUtils;
|
||||
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
|
||||
import com.baomidou.dynamic.datasource.tx.ConnectionFactory;
|
||||
import com.baomidou.dynamic.datasource.tx.ConnectionProxy;
|
||||
import com.baomidou.dynamic.datasource.tx.TransactionContext;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.sql.Connection;
|
||||
@ -50,11 +50,11 @@ public abstract class AbstractRoutingDataSource extends AbstractDataSource {
|
||||
@Override
|
||||
public Connection getConnection() throws SQLException {
|
||||
String xid = TransactionContext.getXID();
|
||||
if (StringUtils.isEmpty(xid)) {
|
||||
if (DsStrUtils.isEmpty(xid)) {
|
||||
return determineDataSource().getConnection();
|
||||
} else {
|
||||
String ds = DynamicDataSourceContextHolder.peek();
|
||||
ds = StringUtils.isEmpty(ds) ? getPrimary() : ds;
|
||||
ds = DsStrUtils.isEmpty(ds) ? getPrimary() : ds;
|
||||
ConnectionProxy connection = ConnectionFactory.getConnection(xid, ds);
|
||||
return connection == null ? getConnectionProxy(xid, ds, determineDataSource().getConnection()) : connection;
|
||||
}
|
||||
@ -63,11 +63,11 @@ public abstract class AbstractRoutingDataSource extends AbstractDataSource {
|
||||
@Override
|
||||
public Connection getConnection(String username, String password) throws SQLException {
|
||||
String xid = TransactionContext.getXID();
|
||||
if (StringUtils.isEmpty(xid)) {
|
||||
if (DsStrUtils.isEmpty(xid)) {
|
||||
return determineDataSource().getConnection(username, password);
|
||||
} else {
|
||||
String ds = DynamicDataSourceContextHolder.peek();
|
||||
ds = StringUtils.isEmpty(ds) ? getPrimary() : ds;
|
||||
ds = DsStrUtils.isEmpty(ds) ? getPrimary() : ds;
|
||||
ConnectionProxy connection = ConnectionFactory.getConnection(xid, ds);
|
||||
return connection == null ? getConnectionProxy(xid, ds, determineDataSource().getConnection(username, password))
|
||||
: connection;
|
||||
|
@ -17,8 +17,8 @@ package com.baomidou.dynamic.datasource.event;
|
||||
|
||||
import com.baomidou.dynamic.datasource.creator.DataSourceProperty;
|
||||
import com.baomidou.dynamic.datasource.toolkit.CryptoUtils;
|
||||
import com.baomidou.dynamic.datasource.toolkit.DsStrUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.util.regex.Matcher;
|
||||
@ -40,7 +40,7 @@ public class EncDataSourceInitEvent implements DataSourceInitEvent {
|
||||
@Override
|
||||
public void beforeCreate(DataSourceProperty dataSourceProperty) {
|
||||
String publicKey = dataSourceProperty.getPublicKey();
|
||||
if (StringUtils.hasText(publicKey)) {
|
||||
if (DsStrUtils.hasText(publicKey)) {
|
||||
dataSourceProperty.setUrl(decrypt(publicKey, dataSourceProperty.getUrl()));
|
||||
dataSourceProperty.setUsername(decrypt(publicKey, dataSourceProperty.getUsername()));
|
||||
dataSourceProperty.setPassword(decrypt(publicKey, dataSourceProperty.getPassword()));
|
||||
@ -56,7 +56,7 @@ public class EncDataSourceInitEvent implements DataSourceInitEvent {
|
||||
* 字符串解密
|
||||
*/
|
||||
private String decrypt(String publicKey, String cipherText) {
|
||||
if (StringUtils.hasText(cipherText)) {
|
||||
if (DsStrUtils.hasText(cipherText)) {
|
||||
Matcher matcher = ENC_PATTERN.matcher(cipherText);
|
||||
if (matcher.find()) {
|
||||
try {
|
||||
|
@ -17,8 +17,8 @@ package com.baomidou.dynamic.datasource.provider;
|
||||
|
||||
import com.baomidou.dynamic.datasource.creator.DataSourceProperty;
|
||||
import com.baomidou.dynamic.datasource.creator.DefaultDataSourceCreator;
|
||||
import com.baomidou.dynamic.datasource.toolkit.DsStrUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.sql.Connection;
|
||||
@ -106,7 +106,7 @@ public abstract class AbstractJdbcDataSourceProvider extends AbstractDataSourceP
|
||||
try {
|
||||
// 由于 SPI 的支持,现在已无需显示加载驱动了
|
||||
// 但在用户显示配置的情况下,进行主动加载
|
||||
if (!StringUtils.isEmpty(driverClassName)) {
|
||||
if (!DsStrUtils.isEmpty(driverClassName)) {
|
||||
Class.forName(driverClassName);
|
||||
log.info("成功加载数据库驱动程序");
|
||||
}
|
||||
@ -116,7 +116,7 @@ public abstract class AbstractJdbcDataSourceProvider extends AbstractDataSourceP
|
||||
Map<String, DataSourceProperty> dataSourcePropertiesMap = executeStmt(stmt);
|
||||
return createDataSourceMap(dataSourcePropertiesMap);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
log.error("loadDataSources error", e);
|
||||
} finally {
|
||||
closeResource(conn);
|
||||
closeResource(stmt);
|
||||
|
@ -274,7 +274,7 @@ public class DataSourceClassResolver {
|
||||
//AnnotatedElementUtils.findMergedAnnotation()会委托给findMergedAnnotationAttributes()
|
||||
DS ds = AnnotatedElementUtils.findMergedAnnotation(ae, DS.class);
|
||||
if (ds != null) {
|
||||
return (BasicAttribute<T>) new BasicAttribute<>(ds.value());
|
||||
return new BasicAttribute(ds.value());
|
||||
}
|
||||
} else if (annotation.isAssignableFrom(DSTransactional.class)) {
|
||||
DSTransactional dsTransactional = AnnotatedElementUtils.findMergedAnnotation(ae, DSTransactional.class);
|
||||
@ -283,7 +283,7 @@ public class DataSourceClassResolver {
|
||||
transactionalInfo.setPropagation(dsTransactional.propagation());
|
||||
transactionalInfo.setRollbackFor(dsTransactional.rollbackFor());
|
||||
transactionalInfo.setNoRollbackFor(dsTransactional.noRollbackFor());
|
||||
return (BasicAttribute<T>) new BasicAttribute(transactionalInfo);
|
||||
return new BasicAttribute(transactionalInfo);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.baomidou.dynamic.datasource.support;
|
||||
|
||||
import com.baomidou.dynamic.datasource.toolkit.DsStrUtils;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
|
||||
@ -22,7 +23,6 @@ import org.springframework.core.io.support.ResourcePatternResolver;
|
||||
import org.springframework.dao.DataAccessException;
|
||||
import org.springframework.jdbc.datasource.init.DatabasePopulatorUtils;
|
||||
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
@ -50,7 +50,7 @@ public class ScriptRunner {
|
||||
* @param location 脚本位置
|
||||
*/
|
||||
public void runScript(DataSource dataSource, String location) {
|
||||
if (StringUtils.hasText(location)) {
|
||||
if (DsStrUtils.hasText(location)) {
|
||||
ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
|
||||
populator.setContinueOnError(continueOnError);
|
||||
populator.setSeparator(separator);
|
||||
|
@ -16,7 +16,6 @@
|
||||
package com.baomidou.dynamic.datasource.toolkit;
|
||||
|
||||
import org.springframework.core.NamedThreadLocal;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.Deque;
|
||||
@ -66,7 +65,7 @@ public final class DynamicDataSourceContextHolder {
|
||||
* @return 数据源名称
|
||||
*/
|
||||
public static String push(String ds) {
|
||||
String dataSourceStr = StringUtils.isEmpty(ds) ? "" : ds;
|
||||
String dataSourceStr = DsStrUtils.isEmpty(ds) ? "" : ds;
|
||||
LOOKUP_KEY_HOLDER.get().push(dataSourceStr);
|
||||
return dataSourceStr;
|
||||
}
|
||||
|
@ -15,8 +15,8 @@
|
||||
*/
|
||||
package com.baomidou.dynamic.datasource.tx;
|
||||
|
||||
import com.baomidou.dynamic.datasource.toolkit.DsStrUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.security.SecureRandom;
|
||||
import java.util.UUID;
|
||||
@ -33,12 +33,7 @@ public final class LocalTxUtil {
|
||||
/**
|
||||
* SecureRandom instance used to generate UUIDs.
|
||||
*/
|
||||
private static final ThreadLocal<SecureRandom> SECURE_RANDOM_HOLDER = new ThreadLocal<SecureRandom>() {
|
||||
@Override
|
||||
protected SecureRandom initialValue() {
|
||||
return new SecureRandom();
|
||||
}
|
||||
};
|
||||
private static final ThreadLocal<SecureRandom> SECURE_RANDOM_HOLDER = ThreadLocal.withInitial(SecureRandom::new);
|
||||
|
||||
/**
|
||||
* 随机生成UUID
|
||||
@ -75,7 +70,7 @@ public final class LocalTxUtil {
|
||||
*/
|
||||
public static String startTransaction() {
|
||||
String xid = TransactionContext.getXID();
|
||||
if (!StringUtils.isEmpty(xid)) {
|
||||
if (!DsStrUtils.isEmpty(xid)) {
|
||||
log.debug("dynamic-datasource exist local tx [{}]", xid);
|
||||
} else {
|
||||
xid = randomUUID().toString();
|
||||
|
@ -15,9 +15,9 @@
|
||||
*/
|
||||
package com.baomidou.dynamic.datasource.tx;
|
||||
|
||||
import com.baomidou.dynamic.datasource.toolkit.DsStrUtils;
|
||||
import org.springframework.core.annotation.AnnotationAwareOrderComparator;
|
||||
import org.springframework.transaction.support.TransactionSynchronization;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@ -28,7 +28,7 @@ public class TransactionContext {
|
||||
|
||||
private static final ThreadLocal<String> CONTEXT_HOLDER = new ThreadLocal<>();
|
||||
private static final ThreadLocal<Set<TransactionSynchronization>> SYNCHRONIZATION_HOLDER =
|
||||
ThreadLocal.withInitial(() -> new LinkedHashSet<>());
|
||||
ThreadLocal.withInitial(LinkedHashSet::new);
|
||||
|
||||
/**
|
||||
* Gets xid.
|
||||
@ -37,7 +37,7 @@ public class TransactionContext {
|
||||
*/
|
||||
public static String getXID() {
|
||||
String xid = CONTEXT_HOLDER.get();
|
||||
if (!StringUtils.isEmpty(xid)) {
|
||||
if (DsStrUtils.hasText(xid)) {
|
||||
return xid;
|
||||
}
|
||||
return null;
|
||||
|
@ -16,9 +16,9 @@
|
||||
package com.baomidou.dynamic.datasource.tx;
|
||||
|
||||
import com.baomidou.dynamic.datasource.exception.TransactionException;
|
||||
import com.baomidou.dynamic.datasource.toolkit.DsStrUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.transaction.support.TransactionSynchronization;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
@ -107,7 +107,7 @@ public class TransactionalTemplate {
|
||||
private Object doExecute(TransactionalExecutor transactionalExecutor) throws Throwable {
|
||||
TransactionalInfo transactionInfo = transactionalExecutor.getTransactionInfo();
|
||||
DsPropagation propagation = transactionInfo.propagation;
|
||||
if (!StringUtils.isEmpty(TransactionContext.getXID()) && !propagation.equals(DsPropagation.NESTED)) {
|
||||
if (!DsStrUtils.isEmpty(TransactionContext.getXID()) && !propagation.equals(DsPropagation.NESTED)) {
|
||||
return transactionalExecutor.execute();
|
||||
}
|
||||
boolean state = true;
|
||||
@ -215,7 +215,7 @@ public class TransactionalTemplate {
|
||||
* @return 是否存在事务
|
||||
*/
|
||||
public boolean existingTransaction() {
|
||||
return !StringUtils.isEmpty(TransactionContext.getXID());
|
||||
return !DsStrUtils.isEmpty(TransactionContext.getXID());
|
||||
}
|
||||
|
||||
/**
|
||||
|
14
pom.xml
14
pom.xml
@ -54,13 +54,13 @@
|
||||
<spring-boot-dependencies.version>2.7.15</spring-boot-dependencies.version>
|
||||
<mybatis.plus.version>3.5.3.2</mybatis.plus.version>
|
||||
<hikaricp.version>2.4.13</hikaricp.version>
|
||||
<druid.version>1.2.19</druid.version>
|
||||
<beeCp.version>3.4.1</beeCp.version>
|
||||
<commons-dbcp2.version>2.9.0</commons-dbcp2.version>
|
||||
<druid.version>1.2.20</druid.version>
|
||||
<beeCp.version>3.4.2</beeCp.version>
|
||||
<commons-dbcp2.version>2.10.0</commons-dbcp2.version>
|
||||
<p6spy.version>3.9.1</p6spy.version>
|
||||
<seata.version>1.4.2</seata.version>
|
||||
<lombok.version>1.18.30</lombok.version>
|
||||
<h2.version>2.2.222</h2.version>
|
||||
<h2.version>2.2.224</h2.version>
|
||||
<atomikos.version>4.0.6</atomikos.version>
|
||||
<junit-jupiter.version>5.10.0</junit-jupiter.version>
|
||||
|
||||
@ -69,13 +69,13 @@
|
||||
<maven-resources-plugin.version>3.3.1</maven-resources-plugin.version>
|
||||
<maven-surefire-plugin.version>3.1.2</maven-surefire-plugin.version>
|
||||
<maven-compiler-plugin.version>3.11.0</maven-compiler-plugin.version>
|
||||
<maven-javadoc-plugin.version>3.5.0</maven-javadoc-plugin.version>
|
||||
<maven-javadoc-plugin.version>3.6.0</maven-javadoc-plugin.version>
|
||||
<maven-source-plugin.version>3.3.0</maven-source-plugin.version>
|
||||
|
||||
<license-maven-plugin.version>4.2</license-maven-plugin.version>
|
||||
<license-maven-plugin.version>4.3</license-maven-plugin.version>
|
||||
<maven-gpg-plugin.version>3.1.0</maven-gpg-plugin.version>
|
||||
<nexus-staging-maven-plugin.version>1.6.13</nexus-staging-maven-plugin.version>
|
||||
<native-maven-plugin.version>0.9.27</native-maven-plugin.version>
|
||||
<native-maven-plugin.version>0.9.28</native-maven-plugin.version>
|
||||
</properties>
|
||||
|
||||
<dependencyManagement>
|
||||
|
Loading…
x
Reference in New Issue
Block a user