Upgrades and doc fixes
* Upgrade to Gradle 5.2.1, SonarQube 2.7, asciidoctor 1.5.10, Apache Sshd 2.2.0, AsertJ 3.12.0, Curator Framework 4.1.0, room Tool 1.12.0, Checkstyle 8.17 * remove Eclipse Link support in JPA tests since it is not compatible with Java 11 * Move 5.1 changes to the `changes-5.0-5.1.adoc`; start new "What's New"
This commit is contained in:
24
build.gradle
24
build.gradle
@@ -11,8 +11,8 @@ buildscript {
|
||||
}
|
||||
|
||||
plugins {
|
||||
id 'org.sonarqube' version '2.6.2'
|
||||
id 'org.asciidoctor.convert' version '1.5.9.2'
|
||||
id 'org.sonarqube' version '2.7'
|
||||
id 'org.asciidoctor.convert' version '1.5.10'
|
||||
id 'org.ajoberstar.grgit' version '3.0.0'
|
||||
}
|
||||
|
||||
@@ -88,17 +88,16 @@ subprojects { subproject ->
|
||||
|
||||
ext {
|
||||
activeMqVersion = '5.15.8'
|
||||
apacheSshdVersion = '2.1.0'
|
||||
apacheSshdVersion = '2.2.0'
|
||||
aspectjVersion = '1.9.2'
|
||||
assertjVersion = '3.11.1'
|
||||
assertjVersion = '3.12.0'
|
||||
assertkVersion = '0.13'
|
||||
boonVersion = '0.34'
|
||||
commonsDbcp2Version = '2.5.0'
|
||||
commonsIoVersion = '2.6'
|
||||
commonsNetVersion = '3.6'
|
||||
curatorVersion = '4.0.1'
|
||||
curatorVersion = '4.1.0'
|
||||
derbyVersion = '10.14.2.0'
|
||||
eclipseLinkVersion = '2.7.3'
|
||||
ftpServerVersion = '1.1.1'
|
||||
googleJsr305Version = '3.0.2'
|
||||
groovyVersion = '2.5.6'
|
||||
@@ -131,7 +130,7 @@ subprojects { subproject ->
|
||||
postgresVersion = '42.2.5'
|
||||
reactorNettyVersion = '0.8.5.RELEASE'
|
||||
reactorVersion = '3.2.6.RELEASE'
|
||||
romeToolsVersion = '1.9.0'
|
||||
romeToolsVersion = '1.12.0'
|
||||
servletApiVersion = '4.0.1'
|
||||
smackVersion = '4.3.1'
|
||||
springAmqpVersion = project.hasProperty('springAmqpVersion') ? project.springAmqpVersion : '2.2.0.BUILD-SNAPSHOT'
|
||||
@@ -295,7 +294,7 @@ subprojects { subproject ->
|
||||
|
||||
checkstyle {
|
||||
configFile = file("$rootDir/src/checkstyle/checkstyle.xml")
|
||||
toolVersion = "8.9"
|
||||
toolVersion = "8.17"
|
||||
}
|
||||
|
||||
artifacts {
|
||||
@@ -535,16 +534,7 @@ project('spring-integration-jpa') {
|
||||
testCompile "org.hibernate:hibernate-entitymanager:$hibernateVersion"
|
||||
|
||||
testRuntime "org.hibernate.javax.persistence:hibernate-jpa-2.1-api:$jpa21ApiVersion"
|
||||
testRuntime "org.eclipse.persistence:org.eclipse.persistence.jpa:$eclipseLinkVersion"
|
||||
testRuntime "org.springframework:spring-instrument:$springVersion"
|
||||
}
|
||||
|
||||
tasks.withType(Test).matching {it.name ==~ /(test)|(testAll)/}.all {
|
||||
jvmArgs classpath.files.findAll {
|
||||
it.name ==~ /(spring-instrument.+)/}.collect{"-javaagent:$it"
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
project('spring-integration-mail') {
|
||||
|
||||
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,5 +1,5 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-5.2.1-bin.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
||||
2
gradlew
vendored
2
gradlew
vendored
@@ -28,7 +28,7 @@ APP_NAME="Gradle"
|
||||
APP_BASE_NAME=`basename "$0"`
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS=""
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m"'
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD="maximum"
|
||||
|
||||
168
gradlew.bat
vendored
168
gradlew.bat
vendored
@@ -1,84 +1,84 @@
|
||||
@if "%DEBUG%" == "" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%" == "" set DIRNAME=.
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS=
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if "%ERRORLEVEL%" == "0" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:init
|
||||
@rem Get command-line arguments, handling Windows variants
|
||||
|
||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||
|
||||
:win9xME_args
|
||||
@rem Slurp the command line arguments.
|
||||
set CMD_LINE_ARGS=
|
||||
set _SKIP=2
|
||||
|
||||
:win9xME_args_slurp
|
||||
if "x%~1" == "x" goto execute
|
||||
|
||||
set CMD_LINE_ARGS=%*
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||
exit /b 1
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
||||
@if "%DEBUG%" == "" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%" == "" set DIRNAME=.
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS="-Xmx64m"
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if "%ERRORLEVEL%" == "0" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:init
|
||||
@rem Get command-line arguments, handling Windows variants
|
||||
|
||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||
|
||||
:win9xME_args
|
||||
@rem Slurp the command line arguments.
|
||||
set CMD_LINE_ARGS=
|
||||
set _SKIP=2
|
||||
|
||||
:win9xME_args_slurp
|
||||
if "x%~1" == "x" goto execute
|
||||
|
||||
set CMD_LINE_ARGS=%*
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||
exit /b 1
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
|
||||
|
||||
<import resource="classpath:/commonJpa-context.xml" />
|
||||
|
||||
<bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.EclipseLinkJpaDialect"/>
|
||||
|
||||
<bean id="vendorAdaptor" class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter"
|
||||
parent="abstractVendorAdaptor">
|
||||
<property name="database" value="H2" />
|
||||
</bean>
|
||||
|
||||
</beans>
|
||||
@@ -1,182 +0,0 @@
|
||||
/*
|
||||
* Copyright 2002-2018 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.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.integration.jpa.core;
|
||||
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
import java.text.ParseException;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
/**
|
||||
* Tests the functionality of {@link JpaOperations} and {@link DefaultJpaOperations}
|
||||
* using the EclipseLink persistence provider.
|
||||
*
|
||||
* If you want to run these tests from your IDE, please ensure that you execute
|
||||
* the tests using a <i>javaagent</i>:
|
||||
*
|
||||
* <pre>
|
||||
* {@code
|
||||
* -javaagent:/home/<user>/.m2/repository/org/springframework/spring-instrument/3.1.1.RELEASE/spring-instrument-3.1.1
|
||||
* .RELEASE.jar
|
||||
* }
|
||||
* </pre>
|
||||
*
|
||||
* @author Gunnar Hillert
|
||||
* @author Artem Bilan
|
||||
*
|
||||
* @since 2.2
|
||||
*
|
||||
*/
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@ContextConfiguration
|
||||
public class EclipseLinkJpaOperationsTests extends AbstractJpaOperationsTests {
|
||||
|
||||
@Test
|
||||
@Override
|
||||
public void testExecuteUpdateWithNativeQuery() {
|
||||
try {
|
||||
super.testExecuteUpdateWithNativeQuery();
|
||||
}
|
||||
catch (Exception e) {
|
||||
return;
|
||||
}
|
||||
|
||||
fail("Was expecting an Exception as OpenJPA does not support Native SQL Queries with Named Parameters.");
|
||||
}
|
||||
|
||||
@Test
|
||||
@Override
|
||||
public void testExecuteUpdateWithNativeNamedQuery() {
|
||||
try {
|
||||
super.testExecuteUpdateWithNativeNamedQuery();
|
||||
}
|
||||
catch (Exception e) {
|
||||
return;
|
||||
}
|
||||
|
||||
fail("Was expecting an Exception as OpenJPA does not support Native SQL Queries with Named Parameters.");
|
||||
}
|
||||
|
||||
@Test
|
||||
@Override
|
||||
public void testExecuteUpdate() {
|
||||
super.testExecuteUpdate();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Override
|
||||
public void testExecuteUpdateWithNamedQuery() {
|
||||
super.testExecuteUpdateWithNamedQuery();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Override
|
||||
public void testExecuteSelectWithNativeQueryReturningEntityClass()
|
||||
throws ParseException {
|
||||
super.testExecuteSelectWithNativeQueryReturningEntityClass();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Override
|
||||
public void testExecuteSelectWithNativeQuery() throws ParseException {
|
||||
super.testExecuteSelectWithNativeQuery();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Override
|
||||
public void testMerge() {
|
||||
super.testMerge();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Override
|
||||
public void testMergeCollection() {
|
||||
super.testMergeCollection();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Override
|
||||
public void testMergeNullCollection() {
|
||||
super.testMergeNullCollection();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Override
|
||||
public void testMergeCollectionWithNullElement() {
|
||||
super.testMergeCollectionWithNullElement();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Override
|
||||
public void testPersist() {
|
||||
super.testPersist();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Override
|
||||
public void testPersistCollection() {
|
||||
super.testPersistCollection();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Override
|
||||
public void testPersistNullCollection() {
|
||||
super.testPersistNullCollection();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Override
|
||||
public void testPersistCollectionWithNullElement() {
|
||||
super.testPersistCollectionWithNullElement();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Override
|
||||
public void testGetAllStudents() {
|
||||
super.testGetAllStudents();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Override
|
||||
public void testGetAllStudentsWithMaxResults() {
|
||||
super.testGetAllStudentsWithMaxResults();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Override
|
||||
public void testDeleteInBatch() {
|
||||
super.testDeleteInBatch();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Override
|
||||
public void testDelete() {
|
||||
super.testDelete();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Override
|
||||
public void testDeleteInBatchWithEmptyCollection() {
|
||||
super.testDeleteInBatchWithEmptyCollection();
|
||||
}
|
||||
|
||||
}
|
||||
240
src/reference/asciidoc/changes-5.0-5.1.adoc
Normal file
240
src/reference/asciidoc/changes-5.0-5.1.adoc
Normal file
@@ -0,0 +1,240 @@
|
||||
[[migration-5.0-5.1]]
|
||||
=== Changes between 5.1 and 5.1
|
||||
|
||||
[[x5.1-new-components]]
|
||||
=== New Components
|
||||
|
||||
The following components are new in 5.1:
|
||||
|
||||
* <<x5.1-AmqpDedicatedChannelAdvice>>
|
||||
|
||||
[[x5.1-AmqpDedicatedChannelAdvice]]
|
||||
==== `AmqpDedicatedChannelAdvice`
|
||||
|
||||
See <<amqp-strict-ordering>>.
|
||||
|
||||
[[x5.1-Functions]]
|
||||
==== Improved Function Support
|
||||
|
||||
The `java.util.function` interfaces now have improved integration support in the Framework components.
|
||||
Also Kotlin lambdas now can be used for handler and source methods.
|
||||
|
||||
See <<functions-support>>.
|
||||
|
||||
[[x5.1-LongRunningTest]]
|
||||
==== `@LongRunningTest`
|
||||
|
||||
A JUnit 5 `@LongRunningTest` conditional annotation is provided to check the environment or system properties for the `RUN_LONG_INTEGRATION_TESTS` entry with the value of `true` to determine if test should be run or skipped.
|
||||
|
||||
See <<test-junit-rules>>.
|
||||
|
||||
[[x5.1-general]]
|
||||
=== General Changes
|
||||
|
||||
The following changes have been made in version 5.1:
|
||||
|
||||
* <<x5.1-java-dsl>>
|
||||
* <<x5.1-dispatcher-exceptions>>
|
||||
* <<x5.1-global-channel-interceptors>>
|
||||
* <<x5.1-object-to-json-transformer>>
|
||||
* <<x5.1-integration-flows-generated-bean-names>>
|
||||
* <<x5.1-aggregator>>
|
||||
* <<x5.1-publisher>>
|
||||
* <<x51.-integration-graph>>
|
||||
* <<x51.-global-properties>>
|
||||
* <<x51.-poller-annotation>>
|
||||
|
||||
[[x5.1-java-dsl]]
|
||||
==== Java DSL
|
||||
|
||||
The `IntegrationFlowContext` is now an interface and `IntegrationFlowRegistration` is an inner interface of `IntegrationFlowContext`.
|
||||
|
||||
A new `logAndReply()` operator has been introduced for convenience when you wish to log at the end of a flow for request-reply configurations.
|
||||
This avoid confusion with `log()` which is treated as a one-way end flow component.
|
||||
|
||||
A generated bean name for any `NamedComponent` within an integration flow is now based on the component type for better readability from visual tools, logs analyzers and metrics collectors.
|
||||
|
||||
The `GenericHandler.handle()` now excepts a `MessageHeaders` type for the second argument.
|
||||
|
||||
[[x5.1-dispatcher-exceptions]]
|
||||
==== Dispatcher Exceptions
|
||||
|
||||
Exceptions caught and re-thrown by `AbstractDispatcher` are now more consistent:
|
||||
|
||||
* A `MessagingException` of any kind that has a `failedMessage` property is re-thrown unchanged.
|
||||
* All other exceptions are wrapped in a `MessageDeliveryException` with the `failedMessage` property set.
|
||||
|
||||
Previously:
|
||||
|
||||
* A `MessagingException` of any kind that has a `failedMessage` property was re-thrown unchanged
|
||||
* A `MessagingException` that had no `failedMessage` property was wrapped in a `MessagingException` with the `failedMessage` property set.
|
||||
* Other `RuntimeException` instances were re-thrown unchanged.
|
||||
* Checked exceptions were wrapped in a `MessageDeliveryException` with the `failedMessage` property set.
|
||||
|
||||
[[x5.1-global-channel-interceptors]]
|
||||
==== Global Channel Interceptors
|
||||
|
||||
Global channel interceptors now apply to dynamically registered channels, such as through the `IntegrationFlowContext` when using the Java DSL or beans that are initialized using `beanFactory.initializeBean()`.
|
||||
Previously, when beans were created after the application context was refreshed, interceptors were not applied.
|
||||
|
||||
[[x5.1-channel-interceptors]]
|
||||
==== Channel Interceptors
|
||||
|
||||
`ChannelInterceptor.postReceive()` is no longer called when no message is received; it is no longer necessary to check for a `null` `Message<?>`.
|
||||
Previously, the method was called.
|
||||
If you have an interceptor that relies on the previous behavior, implement `afterReceiveCompleted()` instead, since that method is invoked, regardless of whether a message is received or not.
|
||||
Furthermore, the `PolledAmqpChannel` and `PolledJmsChannel` previously did not invoke `afterReceiveCompleted()` with `null`; they now do.
|
||||
|
||||
[[x5.1-object-to-json-transformer]]
|
||||
==== `ObjectToJsonTransformer`
|
||||
|
||||
A new `ResultType.BYTES` mode is introduced for the `ObjectToJsonTransformer`.
|
||||
|
||||
See <<json-transformers>> for more information.
|
||||
|
||||
[[x5.1-integration-flows-generated-bean-names]]
|
||||
==== Integration Flows: Generated Bean Names
|
||||
|
||||
Starting with version 5.0.5, generated bean names for the components in an `IntegrationFlow` include the flow bean name, followed by a dot, as a prefix.
|
||||
For example, if a flow bean were named `flowBean`, a generated bean might be named `flowBean.generatedBean`.
|
||||
|
||||
See <<java-dsl-flows>> for more information.
|
||||
|
||||
[[x5.1-aggregator]]
|
||||
==== Aggregator Changes
|
||||
|
||||
If the `groupTimeout` is evaluated to a negative value, an aggregator now expires the group immediately.
|
||||
Only `null` is considered as a signal to do nothing for the current message.
|
||||
|
||||
A new `popSequence` property has been introduced to allow (by default) to call a `MessageBuilder.popSequenceDetails()` for the output message.
|
||||
Also an `AbstractAggregatingMessageGroupProcessor` returns now an `AbstractIntegrationMessageBuilder` instead of the whole `Message` for optimization.
|
||||
|
||||
See <<aggregator>> for more information.
|
||||
|
||||
[[x5.1-publisher]]
|
||||
==== @Publisher annotation changes
|
||||
|
||||
Starting with version 5.1, you must explicitly turn on the `@Publisher` AOP functionality by using `@EnablePublisher` or by using the `<int:enable-publisher>` child element on `<int:annotation-config>`.
|
||||
Also the `proxy-target-class` and `order` attributes have been added for tuning the `ProxyFactory` configuration.
|
||||
|
||||
See <<publisher-annotation>> for more information.
|
||||
|
||||
[[x5.1-files]]
|
||||
=== Files Changes
|
||||
|
||||
If you are using `FileExistsMode.APPEND` or `FileExistsMode.APPEND_NO_FLUSH` you can provide a `newFileCallback` that will be called when creating a new file.
|
||||
This callback receives the newly created file and the message that triggered the callback.
|
||||
This could be used to write a CSV header, for an example.
|
||||
|
||||
The `FileReadingMessageSource` now doesn't check and create a directory until its `start()` is called.
|
||||
So, if an Inbound Channel Adapter for the `FileReadingMessageSource` has `autoStartup = false`, there are no failures against the file system during application start up.
|
||||
|
||||
See <<files>> for more information.
|
||||
|
||||
[[x5.1-amqp]]
|
||||
=== AMQP Changes
|
||||
|
||||
We have made `ID` and `Timestamp` header mapping changes in the `DefaultAmqpHeaderMapper`.
|
||||
See the note near the bottom of <<amqp-message-headers>> for more information.
|
||||
|
||||
The `contentType` header is now correctly mapped as an entry in the general headers map.
|
||||
See <<amqp-content-type>> for more information.
|
||||
|
||||
Starting with version 5.1.3, if a message conversion exception occurs when using manual acknowledgments, and an error channel is defined, the payload is a `ManualAckListenerExecutionFailedException` with additional `channel` and `deliveryTag` properties.
|
||||
This enables the error flow to ack/nack the original message.
|
||||
See <<amqp-conversion-inbound>> for more information.
|
||||
|
||||
[[x5.1-jdbc]]
|
||||
=== JDBC Changes
|
||||
|
||||
A confusing `max-rows-per-poll` property on the JDBC Inbound Channel Adapter and JDBC Outbound Gateway has been deprecated in favor of the newly introduced `max-rows` property.
|
||||
|
||||
The `JdbcMessageHandler` supports now a `batchUpdate` functionality when the payload of the request message is an instance of an `Iterable` type.
|
||||
|
||||
The indexes for the `INT_CHANNEL_MESSAGE` table (for the `JdbcChannelMessageStore`) have been optimized.
|
||||
If you have large message groups in such a store, you may wish to alter the indexes.
|
||||
|
||||
See <<jdbc>> for more information.
|
||||
|
||||
[[x5.1-ftp-sftp]]
|
||||
=== FTP and SFTP Changes
|
||||
|
||||
A `RotatingServerAdvice` is now available to poll multiple servers and directories with the inbound channel adapters.
|
||||
See <<ftp-rotating-server-advice>> and <<sftp-rotating-server-advice>> for more information.
|
||||
|
||||
Also, inbound adapter `localFilenameExpression` instances can contain the `#remoteDirectory` variable, which contains the remote directory being polled.
|
||||
The generic type of the comparators (used to sort the fetched file list for the streaming adapters) has changed from `Comparator<AbstractFileInfo<F>>` to `Comparator<F>`.
|
||||
See <<ftp-streaming>> and <<sftp-streaming>> for more information.
|
||||
|
||||
In addition, the synchronizers for inbound channel adapters can now be provided with a `Comparator`.
|
||||
This is useful when using `maxFetchSize` to limit the files retrieved.
|
||||
|
||||
The `CachingSessionFactory` has a new property `testSession` which, when true, causes the factory to perform a `test()` operation on the `Session` when checking out an existing session from the cache.
|
||||
|
||||
See <<sftp-session-caching>> and <<ftp-session-caching>> for more information.
|
||||
|
||||
The outbound gateway MPUT command now supports a message payload with a collection of files or strings.
|
||||
See <<sftp-outbound-gateway>> and <<ftp-outbound-gateway>> for more information.
|
||||
|
||||
[[x51.-tcp]]
|
||||
=== TCP Support
|
||||
|
||||
When using SSL, host verification is now enabled, by default, to prevent man-in-the-middle attacks with a trusted certificate.
|
||||
See <<tcp-ssl-host-verification>> for more information.
|
||||
|
||||
In addition the key and trust store types can now be configured on the `DefaultTcpSSLContextSupport`.
|
||||
|
||||
[[x5.1-twitter]]
|
||||
=== Twitter Support
|
||||
|
||||
Since the Spring Social project has moved to https://spring.io/blog/2018/07/03/spring-social-end-of-life-announcement[end of life status], Twitter support in Spring Integration has been moved to the Extensions project.
|
||||
See https://github.com/spring-projects/spring-integration-extensions/tree/master/spring-integration-social-twitter[Spring Integration Social Twitter] for more information.
|
||||
|
||||
[[x51.-jms]]
|
||||
=== JMS Support
|
||||
|
||||
The `JmsSendingMessageHandler` now provides `deliveryModeExpression` and `timeToLiveExpression` options to determine respective QoS options for JMS message to send at runtime.
|
||||
The `DefaultJmsHeaderMapper` now allows to map inbound `JMSDeliveryMode` and `JMSExpiration` properties via setting to `true` respective `setMapInboundDeliveryMode()` and `setMapInboundExpiration()` options.
|
||||
When a `JmsMessageDrivenEndpoint` or `JmsInboundGateway` is stopped, the associated listener container is now shut down; this closes its shared connection and any consumers.
|
||||
You can configure the endpoints to revert to the previous behavior.
|
||||
|
||||
See <<jms>> for more information.
|
||||
|
||||
[[x51.-http]]
|
||||
=== HTTP/WebFlux Support
|
||||
|
||||
The `statusCodeExpression` (and `Function`) is now supplied with the `RequestEntity<?>` as a root object for evaluation context, so request headers, method, URI and body are available for target status code calculation.
|
||||
|
||||
See <<http>> and <<webflux>> for more information.
|
||||
|
||||
[[x51.-jmx]]
|
||||
=== JMX Changes
|
||||
|
||||
Object name key values are now quoted if they contain any characters other than those allowed in a Java identifier (or period `.`).
|
||||
For example `org.springframework.integration:type=MessageChannel,` `name="input:foo.myGroup.errors"`.
|
||||
This has the side effect that previously "allowed" names, with such characters, will now be quoted.
|
||||
For example `org.springframework.integration:type=MessageChannel,` `name="input#foo.myGroup.errors"`.
|
||||
|
||||
[[x51.-micrometer]]
|
||||
=== Micrometer Support Changes
|
||||
|
||||
It is now simpler to customize the standard Micrometer meters created by the framework.
|
||||
See <<micrometer-integration>> for more information.
|
||||
|
||||
[[x51.-integration-graph]]
|
||||
=== Integration Graph Customization
|
||||
|
||||
It is now possible to add additional properties to the `IntegrationNode` s via `Function<NamedComponent, Map<String, Object>> additionalPropertiesCallback` on the `IntegrationGraphServer`.
|
||||
See <<integration-graph>> for more information.
|
||||
|
||||
[[x51.-global-properties]]
|
||||
=== Integration Global Properties
|
||||
|
||||
The Integration global properties (including defaults) can now be printed in the logs, when a `DEBUG` logic level is turned on for the `org.springframework.integration` category.
|
||||
See <<global-properties>> for more information.
|
||||
|
||||
[[x51.-poller-annotation]]
|
||||
=== The `receiveTimeout` for `@Poller`
|
||||
|
||||
The `@Poller` annotation now provides a `receiveTimeout` option for convenience.
|
||||
See <<configuration-using-poller-annotation>> for more information.
|
||||
5
src/reference/asciidoc/docinfo.html
Normal file
5
src/reference/asciidoc/docinfo.html
Normal file
@@ -0,0 +1,5 @@
|
||||
<style>
|
||||
#header #revnumber {
|
||||
display: none
|
||||
}
|
||||
</style>
|
||||
@@ -2,6 +2,8 @@
|
||||
== Change History
|
||||
|
||||
// BE SURE TO PRECEDE ALL include:: with a blank line - see https://github.com/asciidoctor/asciidoctor/issues/1297
|
||||
include::./changes-5.0-5.1.adoc[]
|
||||
|
||||
include::./changes-4.3-5.0.adoc[]
|
||||
|
||||
include::./changes-4.2-4.3.adoc[]
|
||||
|
||||
@@ -7,7 +7,9 @@
|
||||
:hide-uri-scheme:
|
||||
Mark Fisher; Marius Bogoevici; Iwein Fuld; Jonas Partner; Oleg Zhurakousky; Gary Russell; Dave Syer; Josh Long; David Turanski; Gunnar Hillert; Artem Bilan; Amol Nayak; Jay Bryant
|
||||
|
||||
ifdef::backend-html5[]
|
||||
*{project-version}*
|
||||
endif::[]
|
||||
|
||||
(C) 2009 - 2019 Pivotal Software, Inc.
|
||||
All rights reserved.
|
||||
@@ -20,7 +22,7 @@ include::./preface.adoc[]
|
||||
= What's New?
|
||||
|
||||
[[spring-integration-intro-new]]
|
||||
For those who are already familiar with Spring Integration, this chapter provides a brief overview of the new features of version 5.1.
|
||||
For those who are already familiar with Spring Integration, this chapter provides a brief overview of the new features of version 5.2.
|
||||
|
||||
If you are interested in the changes and features that were introduced in earlier versions, see the <<history>>.
|
||||
|
||||
|
||||
@@ -432,7 +432,7 @@ The `@IntegrationConverter` annotation marks `Converter`, `GenericConverter`, or
|
||||
This annotation is an analogue of the `<int:converter>` XML element (see <<payload-type-conversion>>).
|
||||
You can place `@IntegrationConverter` annotations at the class level (with a `@Component` stereotype annotation) or on `@Bean` methods within `@Configuration` classes.
|
||||
|
||||
See <<annotations>> for more information about messaging mnnotations.
|
||||
See <<annotations>> for more information about messaging annotations.
|
||||
|
||||
[[programming-considerations]]
|
||||
=== Programming Considerations
|
||||
|
||||
@@ -15,13 +15,13 @@ This section details the compatible http://www.oracle.com/technetwork/java/javas
|
||||
[[supported-java-versions]]
|
||||
=== Compatible Java Versions
|
||||
|
||||
For Spring Integration 5.1.x, the minimum compatible Java version is Java SE 8.
|
||||
For Spring Integration 5.2.x, the minimum compatible Java version is Java SE 8.
|
||||
Older versions of Java are not supported.
|
||||
|
||||
[[supported-spring-versions]]
|
||||
=== Compatible Versions of the Spring Framework
|
||||
|
||||
Spring Integration 5.1.x requires Spring Framework 5.1 or later.
|
||||
Spring Integration 5.2.x requires Spring Framework 5.2 or later.
|
||||
|
||||
[[code-conventions]]
|
||||
== Code Conventions
|
||||
|
||||
@@ -1,245 +1,13 @@
|
||||
[[whats-new]]
|
||||
|
||||
== What's New in Spring Integration 5.1?
|
||||
== What's New in Spring Integration 5.2?
|
||||
|
||||
This chapter provides an overview of the new features and improvements that have been introduced with Spring
|
||||
Integration `5.1`.
|
||||
If you are interested in more details, see the Issue Tracker tickets that were resolved as part of the 5.1 development process.
|
||||
If you are interested in more details, see the Issue Tracker tickets that were resolved as part of the 5.2 development process.
|
||||
|
||||
[[x5.1-new-components]]
|
||||
[[x5.2-new-components]]
|
||||
=== New Components
|
||||
|
||||
The following components are new in 5.1:
|
||||
|
||||
* <<x5.1-AmqpDedicatedChannelAdvice>>
|
||||
|
||||
[[x5.1-AmqpDedicatedChannelAdvice]]
|
||||
==== `AmqpDedicatedChannelAdvice`
|
||||
|
||||
See <<amqp-strict-ordering>>.
|
||||
|
||||
[[x5.1-Functions]]
|
||||
==== Improved Function Support
|
||||
|
||||
The `java.util.function` interfaces now have improved integration support in the Framework components.
|
||||
Also Kotlin lambdas now can be used for handler and source methods.
|
||||
|
||||
See <<functions-support>>.
|
||||
|
||||
[[x5.1-LongRunningTest]]
|
||||
==== `@LongRunningTest`
|
||||
|
||||
A JUnit 5 `@LongRunningTest` conditional annotation is provided to check the environment or system properties for the `RUN_LONG_INTEGRATION_TESTS` entry with the value of `true` to determine if test should be run or skipped.
|
||||
|
||||
See <<test-junit-rules>>.
|
||||
|
||||
[[x5.1-general]]
|
||||
[[x5.2-general]]
|
||||
=== General Changes
|
||||
|
||||
The following changes have been made in version 5.1:
|
||||
|
||||
* <<x5.1-java-dsl>>
|
||||
* <<x5.1-dispatcher-exceptions>>
|
||||
* <<x5.1-global-channel-interceptors>>
|
||||
* <<x5.1-object-to-json-transformer>>
|
||||
* <<x5.1-integration-flows-generated-bean-names>>
|
||||
* <<x5.1-aggregator>>
|
||||
* <<x5.1-publisher>>
|
||||
* <<x51.-integration-graph>>
|
||||
* <<x51.-global-properties>>
|
||||
* <<x51.-poller-annotation>>
|
||||
|
||||
[[x5.1-java-dsl]]
|
||||
==== Java DSL
|
||||
|
||||
The `IntegrationFlowContext` is now an interface and `IntegrationFlowRegistration` is an inner interface of `IntegrationFlowContext`.
|
||||
|
||||
A new `logAndReply()` operator has been introduced for convenience when you wish to log at the end of a flow for request-reply configurations.
|
||||
This avoid confusion with `log()` which is treated as a one-way end flow component.
|
||||
|
||||
A generated bean name for any `NamedComponent` within an integration flow is now based on the component type for better readability from visual tools, logs analyzers and metrics collectors.
|
||||
|
||||
The `GenericHandler.handle()` now excepts a `MessageHeaders` type for the second argument.
|
||||
|
||||
[[x5.1-dispatcher-exceptions]]
|
||||
==== Dispatcher Exceptions
|
||||
|
||||
Exceptions caught and re-thrown by `AbstractDispatcher` are now more consistent:
|
||||
|
||||
* A `MessagingException` of any kind that has a `failedMessage` property is re-thrown unchanged.
|
||||
* All other exceptions are wrapped in a `MessageDeliveryException` with the `failedMessage` property set.
|
||||
|
||||
Previously:
|
||||
|
||||
* A `MessagingException` of any kind that has a `failedMessage` property was re-thrown unchanged
|
||||
* A `MessagingException` that had no `failedMessage` property was wrapped in a `MessagingException` with the `failedMessage` property set.
|
||||
* Other `RuntimeException` instances were re-thrown unchanged.
|
||||
* Checked exceptions were wrapped in a `MessageDeliveryException` with the `failedMessage` property set.
|
||||
|
||||
[[x5.1-global-channel-interceptors]]
|
||||
==== Global Channel Interceptors
|
||||
|
||||
Global channel interceptors now apply to dynamically registered channels, such as through the `IntegrationFlowContext` when using the Java DSL or beans that are initialized using `beanFactory.initializeBean()`.
|
||||
Previously, when beans were created after the application context was refreshed, interceptors were not applied.
|
||||
|
||||
[[x5.1-channel-interceptors]]
|
||||
==== Channel Interceptors
|
||||
|
||||
`ChannelInterceptor.postReceive()` is no longer called when no message is received; it is no longer necessary to check for a `null` `Message<?>`.
|
||||
Previously, the method was called.
|
||||
If you have an interceptor that relies on the previous behavior, implement `afterReceiveCompleted()` instead, since that method is invoked, regardless of whether a message is received or not.
|
||||
Furthermore, the `PolledAmqpChannel` and `PolledJmsChannel` previously did not invoke `afterReceiveCompleted()` with `null`; they now do.
|
||||
|
||||
[[x5.1-object-to-json-transformer]]
|
||||
==== `ObjectToJsonTransformer`
|
||||
|
||||
A new `ResultType.BYTES` mode is introduced for the `ObjectToJsonTransformer`.
|
||||
|
||||
See <<json-transformers>> for more information.
|
||||
|
||||
[[x5.1-integration-flows-generated-bean-names]]
|
||||
==== Integration Flows: Generated Bean Names
|
||||
|
||||
Starting with version 5.0.5, generated bean names for the components in an `IntegrationFlow` include the flow bean name, followed by a dot, as a prefix.
|
||||
For example, if a flow bean were named `flowBean`, a generated bean might be named `flowBean.generatedBean`.
|
||||
|
||||
See <<java-dsl-flows>> for more information.
|
||||
|
||||
[[x5.1-aggregator]]
|
||||
==== Aggregator Changes
|
||||
|
||||
If the `groupTimeout` is evaluated to a negative value, an aggregator now expires the group immediately.
|
||||
Only `null` is considered as a signal to do nothing for the current message.
|
||||
|
||||
A new `popSequence` property has been introduced to allow (by default) to call a `MessageBuilder.popSequenceDetails()` for the output message.
|
||||
Also an `AbstractAggregatingMessageGroupProcessor` returns now an `AbstractIntegrationMessageBuilder` instead of the whole `Message` for optimization.
|
||||
|
||||
See <<aggregator>> for more information.
|
||||
|
||||
[[x5.1-publisher]]
|
||||
==== @Publisher annotation changes
|
||||
|
||||
Starting with version 5.1, you must explicitly turn on the `@Publisher` AOP functionality by using `@EnablePublisher` or by using the `<int:enable-publisher>` child element on `<int:annotation-config>`.
|
||||
Also the `proxy-target-class` and `order` attributes have been added for tuning the `ProxyFactory` configuration.
|
||||
|
||||
See <<publisher-annotation>> for more information.
|
||||
|
||||
[[x5.1-files]]
|
||||
=== Files Changes
|
||||
|
||||
If you are using `FileExistsMode.APPEND` or `FileExistsMode.APPEND_NO_FLUSH` you can provide a `newFileCallback` that will be called when creating a new file.
|
||||
This callback receives the newly created file and the message that triggered the callback.
|
||||
This could be used to write a CSV header, for an example.
|
||||
|
||||
The `FileReadingMessageSource` now doesn't check and create a directory until its `start()` is called.
|
||||
So, if an Inbound Channel Adapter for the `FileReadingMessageSource` has `autoStartup = false`, there are no failures against the file system during application start up.
|
||||
|
||||
See <<files>> for more information.
|
||||
|
||||
[[x5.1-amqp]]
|
||||
=== AMQP Changes
|
||||
|
||||
We have made `ID` and `Timestamp` header mapping changes in the `DefaultAmqpHeaderMapper`.
|
||||
See the note near the bottom of <<amqp-message-headers>> for more information.
|
||||
|
||||
The `contentType` header is now correctly mapped as an entry in the general headers map.
|
||||
See <<amqp-content-type>> for more information.
|
||||
|
||||
Starting with version 5.1.3, if a message conversion exception occurs when using manual acknowledgments, and an error channel is defined, the payload is a `ManualAckListenerExecutionFailedException` with additional `channel` and `deliveryTag` properties.
|
||||
This enables the error flow to ack/nack the original message.
|
||||
See <<amqp-conversion-inbound>> for more information.
|
||||
|
||||
[[x5.1-jdbc]]
|
||||
=== JDBC Changes
|
||||
|
||||
A confusing `max-rows-per-poll` property on the JDBC Inbound Channel Adapter and JDBC Outbound Gateway has been deprecated in favor of the newly introduced `max-rows` property.
|
||||
|
||||
The `JdbcMessageHandler` supports now a `batchUpdate` functionality when the payload of the request message is an instance of an `Iterable` type.
|
||||
|
||||
The indexes for the `INT_CHANNEL_MESSAGE` table (for the `JdbcChannelMessageStore`) have been optimized.
|
||||
If you have large message groups in such a store, you may wish to alter the indexes.
|
||||
|
||||
See <<jdbc>> for more information.
|
||||
|
||||
[[x5.1-ftp-sftp]]
|
||||
=== FTP and SFTP Changes
|
||||
|
||||
A `RotatingServerAdvice` is now available to poll multiple servers and directories with the inbound channel adapters.
|
||||
See <<ftp-rotating-server-advice>> and <<sftp-rotating-server-advice>> for more information.
|
||||
|
||||
Also, inbound adapter `localFilenameExpression` instances can contain the `#remoteDirectory` variable, which contains the remote directory being polled.
|
||||
The generic type of the comparators (used to sort the fetched file list for the streaming adapters) has changed from `Comparator<AbstractFileInfo<F>>` to `Comparator<F>`.
|
||||
See <<ftp-streaming>> and <<sftp-streaming>> for more information.
|
||||
|
||||
In addition, the synchronizers for inbound channel adapters can now be provided with a `Comparator`.
|
||||
This is useful when using `maxFetchSize` to limit the files retrieved.
|
||||
|
||||
The `CachingSessionFactory` has a new property `testSession` which, when true, causes the factory to perform a `test()` operation on the `Session` when checking out an existing session from the cache.
|
||||
|
||||
See <<sftp-session-caching>> and <<ftp-session-caching>> for more information.
|
||||
|
||||
The outbound gateway MPUT command now supports a message payload with a collection of files or strings.
|
||||
See <<sftp-outbound-gateway>> and <<ftp-outbound-gateway>> for more information.
|
||||
|
||||
[[x51.-tcp]]
|
||||
=== TCP Support
|
||||
|
||||
When using SSL, host verification is now enabled, by default, to prevent man-in-the-middle attacks with a trusted certificate.
|
||||
See <<tcp-ssl-host-verification>> for more information.
|
||||
|
||||
In addition the key and trust store types can now be configured on the `DefaultTcpSSLContextSupport`.
|
||||
|
||||
[[x5.1-twitter]]
|
||||
=== Twitter Support
|
||||
|
||||
Since the Spring Social project has moved to https://spring.io/blog/2018/07/03/spring-social-end-of-life-announcement[end of life status], Twitter support in Spring Integration has been moved to the Extensions project.
|
||||
See https://github.com/spring-projects/spring-integration-extensions/tree/master/spring-integration-social-twitter[Spring Integration Social Twitter] for more information.
|
||||
|
||||
[[x51.-jms]]
|
||||
=== JMS Support
|
||||
|
||||
The `JmsSendingMessageHandler` now provides `deliveryModeExpression` and `timeToLiveExpression` options to determine respective QoS options for JMS message to send at runtime.
|
||||
The `DefaultJmsHeaderMapper` now allows to map inbound `JMSDeliveryMode` and `JMSExpiration` properties via setting to `true` respective `setMapInboundDeliveryMode()` and `setMapInboundExpiration()` options.
|
||||
When a `JmsMessageDrivenEndpoint` or `JmsInboundGateway` is stopped, the associated listener container is now shut down; this closes its shared connection and any consumers.
|
||||
You can configure the endpoints to revert to the previous behavior.
|
||||
|
||||
See <<jms>> for more information.
|
||||
|
||||
[[x51.-http]]
|
||||
=== HTTP/WebFlux Support
|
||||
|
||||
The `statusCodeExpression` (and `Function`) is now supplied with the `RequestEntity<?>` as a root object for evaluation context, so request headers, method, URI and body are available for target status code calculation.
|
||||
|
||||
See <<http>> and <<webflux>> for more information.
|
||||
|
||||
[[x51.-jmx]]
|
||||
=== JMX Changes
|
||||
|
||||
Object name key values are now quoted if they contain any characters other than those allowed in a Java identifier (or period `.`).
|
||||
For example `org.springframework.integration:type=MessageChannel,` `name="input:foo.myGroup.errors"`.
|
||||
This has the side effect that previously "allowed" names, with such characters, will now be quoted.
|
||||
For example `org.springframework.integration:type=MessageChannel,` `name="input#foo.myGroup.errors"`.
|
||||
|
||||
[[x51.-micrometer]]
|
||||
=== Micrometer Support Changes
|
||||
|
||||
It is now simpler to customize the standard Micrometer meters created by the framework.
|
||||
See <<micrometer-integration>> for more information.
|
||||
|
||||
[[x51.-integration-graph]]
|
||||
=== Integration Graph Customization
|
||||
|
||||
It is now possible to add additional properties to the `IntegrationNode` s via `Function<NamedComponent, Map<String, Object>> additionalPropertiesCallback` on the `IntegrationGraphServer`.
|
||||
See <<integration-graph>> for more information.
|
||||
|
||||
[[x51.-global-properties]]
|
||||
=== Integration Global Properties
|
||||
|
||||
The Integration global properties (including defaults) can now be printed in the logs, when a `DEBUG` logic level is turned on for the `org.springframework.integration` category.
|
||||
See <<global-properties>> for more information.
|
||||
|
||||
[[x51.-poller-annotation]]
|
||||
=== The `receiveTimeout` for `@Poller`
|
||||
|
||||
The `@Poller` annotation now provides a `receiveTimeout` option for convenience.
|
||||
See <<configuration-using-poller-annotation>> for more information.
|
||||
|
||||
Reference in New Issue
Block a user