Polishing
This commit is contained in:
parent
bbde68c49e
commit
2573ba4a50
|
@ -19,13 +19,13 @@ package org.springframework.scheduling.support;
|
|||
import java.time.Duration;
|
||||
import java.time.Instant;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.scheduling.Trigger;
|
||||
import org.springframework.scheduling.TriggerContext;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
|
||||
/**
|
||||
* A trigger for periodic task execution. The period may be applied as either
|
||||
|
@ -250,7 +250,7 @@ public class PeriodicTrigger implements Trigger {
|
|||
return (this == other || (other instanceof PeriodicTrigger that &&
|
||||
this.fixedRate == that.fixedRate &&
|
||||
this.period.equals(that.period) &&
|
||||
Objects.equals(this.initialDelay, that.initialDelay)));
|
||||
ObjectUtils.nullSafeEquals(this.initialDelay, that.initialDelay)));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2021 the original author or authors.
|
||||
* Copyright 2002-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -43,7 +43,7 @@ import org.springframework.util.StringUtils;
|
|||
* Abstract class to provide base functionality for easy stored procedure calls
|
||||
* based on configuration options and database meta-data.
|
||||
*
|
||||
* <p>This class provides the base SPI for {@link SimpleJdbcCall}.
|
||||
* <p>This class provides the processing arrangement for {@link SimpleJdbcCall}.
|
||||
*
|
||||
* @author Thomas Risberg
|
||||
* @author Juergen Hoeller
|
||||
|
@ -453,7 +453,7 @@ public abstract class AbstractJdbcCall {
|
|||
/**
|
||||
* Match the provided in parameter values with registered parameters and
|
||||
* parameters defined via meta-data processing.
|
||||
* @param args the parameter values provided in a Map
|
||||
* @param args the parameter values provided as a Map
|
||||
* @return a Map with parameter names and values
|
||||
*/
|
||||
protected Map<String, ?> matchInParameterValuesWithCallParameters(Map<String, ?> args) {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2022 the original author or authors.
|
||||
* Copyright 2002-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -50,10 +50,10 @@ import org.springframework.lang.Nullable;
|
|||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
* Abstract class to provide base functionality for easy inserts
|
||||
* Abstract class to provide base functionality for easy (batch) inserts
|
||||
* based on configuration options and database meta-data.
|
||||
*
|
||||
* <p>This class provides the base SPI for {@link SimpleJdbcInsert}.
|
||||
* <p>This class provides the processing arrangement for {@link SimpleJdbcInsert}.
|
||||
*
|
||||
* @author Thomas Risberg
|
||||
* @author Juergen Hoeller
|
||||
|
@ -409,7 +409,7 @@ public abstract class AbstractJdbcInsert {
|
|||
/**
|
||||
* Delegate method to execute the insert, generating a single key.
|
||||
*/
|
||||
private Number executeInsertAndReturnKeyInternal(final List<?> values) {
|
||||
private Number executeInsertAndReturnKeyInternal(List<?> values) {
|
||||
KeyHolder kh = executeInsertAndReturnKeyHolderInternal(values);
|
||||
if (kh.getKey() != null) {
|
||||
return kh.getKey();
|
||||
|
@ -423,11 +423,11 @@ public abstract class AbstractJdbcInsert {
|
|||
/**
|
||||
* Delegate method to execute the insert, generating any number of keys.
|
||||
*/
|
||||
private KeyHolder executeInsertAndReturnKeyHolderInternal(final List<?> values) {
|
||||
private KeyHolder executeInsertAndReturnKeyHolderInternal(List<?> values) {
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("The following parameters are used for call " + getInsertString() + " with: " + values);
|
||||
}
|
||||
final KeyHolder keyHolder = new GeneratedKeyHolder();
|
||||
KeyHolder keyHolder = new GeneratedKeyHolder();
|
||||
|
||||
if (this.tableMetaDataContext.isGetGeneratedKeysSupported()) {
|
||||
getJdbcTemplate().update(
|
||||
|
@ -455,7 +455,7 @@ public abstract class AbstractJdbcInsert {
|
|||
}
|
||||
|
||||
Assert.state(getTableName() != null, "No table name set");
|
||||
final String keyQuery = this.tableMetaDataContext.getSimpleQueryForGetGeneratedKey(
|
||||
String keyQuery = this.tableMetaDataContext.getSimpleQueryForGetGeneratedKey(
|
||||
getTableName(), getGeneratedKeyNames()[0]);
|
||||
Assert.state(keyQuery != null, "Query for simulating get generated keys must not be null");
|
||||
|
||||
|
@ -535,8 +535,8 @@ public abstract class AbstractJdbcInsert {
|
|||
|
||||
/**
|
||||
* Delegate method that executes a batch insert using the passed-in Maps of parameters.
|
||||
* @param batch array of Maps with parameter names and values to be used in batch insert
|
||||
* @return array of number of rows affected
|
||||
* @param batch maps with parameter names and values to be used in the batch insert
|
||||
* @return an array of number of rows affected
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
protected int[] doExecuteBatch(Map<String, ?>... batch) {
|
||||
|
@ -549,9 +549,10 @@ public abstract class AbstractJdbcInsert {
|
|||
}
|
||||
|
||||
/**
|
||||
* Delegate method that executes a batch insert using the passed-in {@link SqlParameterSource SqlParameterSources}.
|
||||
* @param batch array of SqlParameterSource with parameter names and values to be used in insert
|
||||
* @return array of number of rows affected
|
||||
* Delegate method that executes a batch insert using the passed-in
|
||||
* {@link SqlParameterSource SqlParameterSources}.
|
||||
* @param batch parameter sources with names and values to be used in the batch insert
|
||||
* @return an array of number of rows affected
|
||||
*/
|
||||
protected int[] doExecuteBatch(SqlParameterSource... batch) {
|
||||
checkCompiled();
|
||||
|
@ -606,7 +607,7 @@ public abstract class AbstractJdbcInsert {
|
|||
* Match the provided in parameter values with registered parameters and parameters
|
||||
* defined via meta-data processing.
|
||||
* @param parameterSource the parameter values provided as a {@link SqlParameterSource}
|
||||
* @return a Map with parameter names and values
|
||||
* @return a List of values
|
||||
*/
|
||||
protected List<Object> matchInParameterValuesWithInsertColumns(SqlParameterSource parameterSource) {
|
||||
return this.tableMetaDataContext.matchInParameterValuesWithInsertColumns(parameterSource);
|
||||
|
@ -615,8 +616,8 @@ public abstract class AbstractJdbcInsert {
|
|||
/**
|
||||
* Match the provided in parameter values with registered parameters and parameters
|
||||
* defined via meta-data processing.
|
||||
* @param args the parameter values provided in a Map
|
||||
* @return a Map with parameter names and values
|
||||
* @param args the parameter values provided as a Map
|
||||
* @return a List of values
|
||||
*/
|
||||
protected List<Object> matchInParameterValuesWithInsertColumns(Map<String, ?> args) {
|
||||
return this.tableMetaDataContext.matchInParameterValuesWithInsertColumns(args);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2018 the original author or authors.
|
||||
* Copyright 2002-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -47,7 +47,7 @@ import org.springframework.jdbc.core.namedparam.SqlParameterSource;
|
|||
* any meta-data processing if you want to use parameter names that do not
|
||||
* match what is declared during the stored procedure compilation.
|
||||
*
|
||||
* <p>The actual insert is being handled using Spring's {@link JdbcTemplate}.
|
||||
* <p>The actual call is being handled using Spring's {@link JdbcTemplate}.
|
||||
*
|
||||
* <p>Many of the configuration methods return the current instance of the
|
||||
* SimpleJdbcCall in order to provide the ability to chain multiple ones
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2021 the original author or authors.
|
||||
* Copyright 2002-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -26,17 +26,17 @@ import org.springframework.jdbc.core.namedparam.SqlParameterSource;
|
|||
import org.springframework.jdbc.support.KeyHolder;
|
||||
|
||||
/**
|
||||
* A SimpleJdbcInsert is a multithreaded, reusable object providing easy insert
|
||||
* A SimpleJdbcInsert is a multithreaded, reusable object providing easy (batch) insert
|
||||
* capabilities for a table. It provides meta-data processing to simplify the code
|
||||
* needed to construct a basic insert statement. All you need to provide is the
|
||||
* name of the table and a Map containing the column names and the column values.
|
||||
* needed to construct a basic insert statement. All you need to provide is the name
|
||||
* of the table and a Map containing the column names and the column values.
|
||||
*
|
||||
* <p>The meta-data processing is based on the DatabaseMetaData provided by the
|
||||
* JDBC driver. As long as the JDBC driver can provide the names of the columns
|
||||
* for a specified table then we can rely on this auto-detection feature. If that
|
||||
* is not the case, then the column names must be specified explicitly.
|
||||
*
|
||||
* <p>The actual insert is handled using Spring's {@link JdbcTemplate}.
|
||||
* <p>The actual (batch) insert is handled using Spring's {@link JdbcTemplate}.
|
||||
*
|
||||
* <p>Many of the configuration methods return the current instance of the
|
||||
* SimpleJdbcInsert to provide the ability to chain multiple ones together
|
||||
|
@ -142,8 +142,8 @@ public class SimpleJdbcInsert extends AbstractJdbcInsert implements SimpleJdbcIn
|
|||
return doExecuteAndReturnKeyHolder(parameterSource);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public int[] executeBatch(Map<String, ?>... batch) {
|
||||
return doExecuteBatch(batch);
|
||||
}
|
||||
|
|
|
@ -57,15 +57,17 @@ import org.springframework.util.CollectionUtils;
|
|||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
* Default implementation of {@link DatabaseClient}.
|
||||
* The default implementation of {@link DatabaseClient},
|
||||
* as created by the static factory method.
|
||||
*
|
||||
* @author Mark Paluch
|
||||
* @author Mingyuan Wu
|
||||
* @author Bogdan Ilchyshyn
|
||||
* @author Simon Baslé
|
||||
* @since 5.3
|
||||
* @see DatabaseClient#create(ConnectionFactory)
|
||||
*/
|
||||
class DefaultDatabaseClient implements DatabaseClient {
|
||||
final class DefaultDatabaseClient implements DatabaseClient {
|
||||
|
||||
private final Log logger = LogFactory.getLog(getClass());
|
||||
|
||||
|
@ -251,11 +253,12 @@ class DefaultDatabaseClient implements DatabaseClient {
|
|||
"Value at index %d must not be null. Use bindNull(…) instead.", index));
|
||||
|
||||
Map<Integer, Parameter> byIndex = new LinkedHashMap<>(this.byIndex);
|
||||
if (value instanceof Parameter p) {
|
||||
byIndex.put(index, p);
|
||||
if (value instanceof Parameter param) {
|
||||
byIndex.put(index, param);
|
||||
}
|
||||
else if (value instanceof org.springframework.r2dbc.core.Parameter p) {
|
||||
byIndex.put(index, p.hasValue() ? Parameters.in(p.getValue()) : Parameters.in(p.getType()));
|
||||
else if (value instanceof org.springframework.r2dbc.core.Parameter param) {
|
||||
Object pv = param.getValue();
|
||||
byIndex.put(index, (pv != null ? Parameters.in(pv) : Parameters.in(param.getType())));
|
||||
}
|
||||
else {
|
||||
byIndex.put(index, Parameters.in(value));
|
||||
|
|
|
@ -22,7 +22,6 @@ import java.util.HashSet;
|
|||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.TreeMap;
|
||||
|
||||
|
@ -380,6 +379,7 @@ abstract class NamedParameterUtils {
|
|||
private final int endIndex;
|
||||
|
||||
ParameterHolder(String parameterName, int startIndex, int endIndex) {
|
||||
Assert.notNull(parameterName, "Parameter name must not be null");
|
||||
this.parameterName = parameterName;
|
||||
this.startIndex = startIndex;
|
||||
this.endIndex = endIndex;
|
||||
|
@ -398,20 +398,15 @@ abstract class NamedParameterUtils {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(@Nullable Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
if (!(o instanceof ParameterHolder that)) {
|
||||
return false;
|
||||
}
|
||||
return this.startIndex == that.startIndex && this.endIndex == that.endIndex
|
||||
&& Objects.equals(this.parameterName, that.parameterName);
|
||||
public boolean equals(@Nullable Object other) {
|
||||
return (this == other || (other instanceof ParameterHolder that &&
|
||||
this.startIndex == that.startIndex && this.endIndex == that.endIndex &&
|
||||
this.parameterName.equals(that.parameterName)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(this.parameterName, this.startIndex, this.endIndex);
|
||||
return this.parameterName.hashCode();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -16,8 +16,6 @@
|
|||
|
||||
package org.springframework.r2dbc.core;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.ClassUtils;
|
||||
|
@ -111,20 +109,15 @@ public final class Parameter {
|
|||
|
||||
|
||||
@Override
|
||||
public boolean equals(@Nullable Object obj) {
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
if (!(obj instanceof Parameter other)) {
|
||||
return false;
|
||||
}
|
||||
return (ObjectUtils.nullSafeEquals(this.value, other.value) &&
|
||||
ObjectUtils.nullSafeEquals(this.type, other.type));
|
||||
public boolean equals(@Nullable Object other) {
|
||||
return (this == other || (other instanceof Parameter that &&
|
||||
ObjectUtils.nullSafeEquals(this.value, that.value) &&
|
||||
ObjectUtils.nullSafeEquals(this.type, that.type)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(this.value, this.type);
|
||||
return ObjectUtils.nullSafeHashCode(this.value) + ObjectUtils.nullSafeHashCode(this.type);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -62,14 +62,17 @@ import org.springframework.web.util.UriBuilder;
|
|||
import org.springframework.web.util.UriBuilderFactory;
|
||||
|
||||
/**
|
||||
* Default implementation of {@link WebClient}.
|
||||
* The default implementation of {@link WebClient},
|
||||
* as created by the static factory methods.
|
||||
*
|
||||
* @author Rossen Stoyanchev
|
||||
* @author Brian Clozel
|
||||
* @author Sebastien Deleuze
|
||||
* @since 5.0
|
||||
* @see WebClient#create()
|
||||
* @see WebClient#create(String)
|
||||
*/
|
||||
class DefaultWebClient implements WebClient {
|
||||
final class DefaultWebClient implements WebClient {
|
||||
|
||||
private static final String URI_TEMPLATE_ATTRIBUTE = WebClient.class.getName() + ".uriTemplate";
|
||||
|
||||
|
@ -104,9 +107,9 @@ class DefaultWebClient implements WebClient {
|
|||
private final DefaultWebClientBuilder builder;
|
||||
|
||||
|
||||
DefaultWebClient(ExchangeFunction exchangeFunction, @Nullable ExchangeFilterFunction filterFunctions, UriBuilderFactory uriBuilderFactory,
|
||||
@Nullable HttpHeaders defaultHeaders, @Nullable MultiValueMap<String, String> defaultCookies,
|
||||
@Nullable Consumer<RequestHeadersSpec<?>> defaultRequest,
|
||||
DefaultWebClient(ExchangeFunction exchangeFunction, @Nullable ExchangeFilterFunction filterFunctions,
|
||||
UriBuilderFactory uriBuilderFactory, @Nullable HttpHeaders defaultHeaders,
|
||||
@Nullable MultiValueMap<String, String> defaultCookies, @Nullable Consumer<RequestHeadersSpec<?>> defaultRequest,
|
||||
@Nullable Map<Predicate<HttpStatusCode>, Function<ClientResponse, Mono<? extends Throwable>>> statusHandlerMap,
|
||||
ObservationRegistry observationRegistry, @Nullable ClientRequestObservationConvention observationConvention,
|
||||
DefaultWebClientBuilder builder) {
|
||||
|
@ -215,12 +218,10 @@ class DefaultWebClient implements WebClient {
|
|||
@Nullable
|
||||
private Consumer<ClientHttpRequest> httpRequestConsumer;
|
||||
|
||||
|
||||
DefaultRequestBodyUriSpec(HttpMethod httpMethod) {
|
||||
this.httpMethod = httpMethod;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public RequestBodySpec uri(String uriTemplate, Object... uriVariables) {
|
||||
attribute(URI_TEMPLATE_ATTRIBUTE, uriTemplate);
|
||||
|
@ -338,8 +339,8 @@ class DefaultWebClient implements WebClient {
|
|||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public RequestBodySpec context(Function<Context, Context> contextModifier) {
|
||||
this.contextModifier = (this.contextModifier != null ?
|
||||
this.contextModifier.andThen(contextModifier) : contextModifier);
|
||||
|
@ -431,8 +432,8 @@ class DefaultWebClient implements WebClient {
|
|||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public Mono<ClientResponse> exchange() {
|
||||
ClientRequestObservationContext observationContext = new ClientRequestObservationContext();
|
||||
ClientRequest.Builder requestBuilder = initRequestBuilder();
|
||||
|
@ -519,7 +520,6 @@ class DefaultWebClient implements WebClient {
|
|||
private static final StatusHandler DEFAULT_STATUS_HANDLER =
|
||||
new StatusHandler(STATUS_CODE_ERROR, ClientResponse::createException);
|
||||
|
||||
|
||||
private final HttpMethod httpMethod;
|
||||
|
||||
private final URI uri;
|
||||
|
@ -530,9 +530,7 @@ class DefaultWebClient implements WebClient {
|
|||
|
||||
private final int defaultStatusHandlerCount;
|
||||
|
||||
|
||||
DefaultResponseSpec(
|
||||
HttpMethod httpMethod, URI uri, Mono<ClientResponse> responseMono,
|
||||
DefaultResponseSpec(HttpMethod httpMethod, URI uri, Mono<ClientResponse> responseMono,
|
||||
List<StatusHandler> defaultStatusHandlers) {
|
||||
|
||||
this.httpMethod = httpMethod;
|
||||
|
@ -543,7 +541,6 @@ class DefaultWebClient implements WebClient {
|
|||
this.defaultStatusHandlerCount = this.statusHandlers.size();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public ResponseSpec onStatus(Predicate<HttpStatusCode> statusCodePredicate,
|
||||
Function<ClientResponse, Mono<? extends Throwable>> exceptionFunction) {
|
||||
|
@ -734,6 +731,7 @@ class DefaultWebClient implements WebClient {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
private static class ObservationFilterFunction implements ExchangeFilterFunction {
|
||||
|
||||
private final ClientRequestObservationContext observationContext;
|
||||
|
@ -744,8 +742,7 @@ class DefaultWebClient implements WebClient {
|
|||
|
||||
@Override
|
||||
public Mono<ClientResponse> filter(ClientRequest request, ExchangeFunction next) {
|
||||
return next.exchange(request)
|
||||
.doOnNext(this.observationContext::setResponse);
|
||||
return next.exchange(request).doOnNext(this.observationContext::setResponse);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue