Spring Native provides beta support for compiling Spring applications to native executables using GraalVM native-image compiler.

Overview

Build Status 0.9.0 documentation

Spring Native provides beta support for compiling Spring applications to native executables using GraalVM native-image compiler, in order to provide a native deployment option typically designed to be packaged in lightweight containers. In practice, the target is to support your Spring Boot application , almost unmodified, on this new platform.

Watch the video and read the blog post of Spring Native Beta announcement to learn more. Announcing Spring Native Beta!

Quick start

The easiest way to start with Spring Native is probably to go to start.spring.io, add the Spring Native dependency, and read the reference documentation. Make sure to configure properly the Spring AOT Maven and Gradle plugins that are mandatory to get proper native support for your Spring application.

Play with the samples

Note
You need to install the GraalVM native-image compiler, check the documentation for more details.
  • Download and extract sources from the latest release.

  • Go into the samples folder and pick one (e.g. cd samples/commandlinerunner)

  • Run ./build.sh which will run the regular JVM build, then a native image compilation, then test the result.

For more details on the samples see the samples documentation.

Contributing

If you have not previously done so, please sign the Contributor License Agreement. You will be reminded automatically when you submit the pull request.

Contributions are welcome, especially for adding support via pull requests for libraries widely used in the Spring ecosystem not yet support. Please refer to the how to contribute section for more details.

Baseline

The development version on master is currently based on GraalVM 20.1.0 and Spring Boot 2.4.4-SNAPSHOT. Mac, Linux and Windows are supported.

Comments
  • Unable to create native image NullPointerException

    Unable to create native image NullPointerException

    Hello,

    I upgraded app to spring boot 2.3.1 and I am using spring-graalvm-native 0.7.1. The project has so many dependencies and one of them is logback. When I tried to create native image I got this error.

    Error: Classes that should be initialized at run time got initialized during image building:
     org.springframework.boot.logging.logback.ColorConverter was unintentionally initialized at build time. org.slf4j.impl.StaticLoggerBinder caused initialization of this class with the following trace:
            at org.springframework.boot.logging.logback.ColorConverter.<clinit>(ColorConverter.java)
            at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
            at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
            at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
            at java.lang.Class.newInstance(Class.java:442)
            at ch.qos.logback.core.util.OptionHelper.instantiateByClassNameAndParameter(OptionHelper.java:61)
            at ch.qos.logback.core.util.OptionHelper.instantiateByClassName(OptionHelper.java:45)
            at ch.qos.logback.core.util.OptionHelper.instantiateByClassName(OptionHelper.java:34)
            at ch.qos.logback.core.pattern.parser.Compiler.createCompositeConverter(Compiler.java:129)
            at ch.qos.logback.core.pattern.parser.Compiler.compile(Compiler.java:47)
            at ch.qos.logback.core.pattern.parser.Parser.compile(Parser.java:87)
            at ch.qos.logback.core.pattern.PatternLayoutBase.start(PatternLayoutBase.java:84)
            at ch.qos.logback.classic.encoder.PatternLayoutEncoder.start(PatternLayoutEncoder.java:28)
            at ch.qos.logback.core.joran.action.NestedComplexPropertyIA.end(NestedComplexPropertyIA.java:161)
            at ch.qos.logback.core.joran.spi.Interpreter.callEndAction(Interpreter.java:309)
            at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:193)
            at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:179)
            at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:62)
            at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:165)
            at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:152)
            at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:110)
            at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:53)
            at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:75)
            at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:150)
            at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:84)
            at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:55)
    

    The fix for the above issue was I had to renamae the logback.xml to logback-spring.xml. I hope this might be useful for someone in future.

    Now When I try to create native image in windows 10 I got below error. any help would be appreciated

    analysis: 2,106,404.76 ms, 14.22 GB
    Fatal error:java.lang.NullPointerException
            at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
            at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
            at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
            at java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:598)
            at java.util.concurrent.ForkJoinTask.get(ForkJoinTask.java:1005)
            at com.oracle.svm.hosted.NativeImageGenerator.run(NativeImageGenerator.java:463)
            at com.oracle.svm.hosted.NativeImageGeneratorRunner.buildImage(NativeImageGeneratorRunner.java:359)
            at com.oracle.svm.hosted.NativeImageGeneratorRunner.build(NativeImageGeneratorRunner.java:518)
            at com.oracle.svm.hosted.NativeImageGeneratorRunner.main(NativeImageGeneratorRunner.java:117)
    Caused by: java.lang.NullPointerException
            at java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1011)
            at java.util.concurrent.ConcurrentHashMap.put(ConcurrentHashMap.java:1006)
            at com.oracle.svm.hosted.ClassValueFeature.duringAnalysis(ClassValueFeature.java:74)
            at com.oracle.svm.hosted.NativeImageGenerator.lambda$runPointsToAnalysis$8(NativeImageGenerator.java:720)
            at com.oracle.svm.hosted.FeatureHandler.forEachFeature(FeatureHandler.java:70)
            at com.oracle.svm.hosted.NativeImageGenerator.runPointsToAnalysis(NativeImageGenerator.java:720)
            at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:538)
            at com.oracle.svm.hosted.NativeImageGenerator.lambda$run$0(NativeImageGenerator.java:451)
            at java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1386)
            at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
            at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
            at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
            at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
    Error: Image build request failed with exit status 1
    
    type: bug status: invalid 
    opened by sendev1 35
  • `repeated interface: org.springframework.aop.SpringProxy` with spring-security annotations on `@RestController`

    `repeated interface: org.springframework.aop.SpringProxy` with spring-security annotations on `@RestController`

    I get following error as soon as I use both @RequiredArgsConstructor and @PreAuthorize in the same a @RestController :

    [INFO]     [creator]     Error: Error parsing dynamic proxy configuration in file:/workspace/META-INF/native-image/org.springframework.aot/spring-aot/proxy-config.json:
    [INFO]     [creator]     java.lang.IllegalArgumentException: repeated interface: org.springframework.aop.SpringProxy
    [INFO]     [creator]     Verify that the configuration matches the schema described in the -H:PrintFlags=+ output for option DynamicProxyConfigurationResources.
    [INFO]     [creator]     com.oracle.svm.core.util.UserError$UserException: Error parsing dynamic proxy configuration in file:/workspace/META-INF/native-image/org.springframework.aot/spring-aot/proxy-config.json:
    [INFO]     [creator]     java.lang.IllegalArgumentException: repeated interface: org.springframework.aop.SpringProxy
    [INFO]     [creator]     Verify that the configuration matches the schema described in the -H:PrintFlags=+ output for option DynamicProxyConfigurationResources.
    [INFO]     [creator]            at com.oracle.svm.core.util.UserError.abort(UserError.java:68)
    [INFO]     [creator]            at com.oracle.svm.hosted.config.ConfigurationParserUtils.doParseAndRegister(ConfigurationParserUtils.java:139)
    [INFO]     [creator]            at com.oracle.svm.hosted.config.ConfigurationParserUtils.lambda$parseAndRegisterConfigurations$3(ConfigurationParserUtils.java:120)
    [INFO]     [creator]            at java.base/java.util.stream.ReferencePipeline$4$1.accept(ReferencePipeline.java:212)
    [INFO]     [creator]            at com.oracle.svm.hosted.config.ConfigurationParserUtils$1.tryAdvance(ConfigurationParserUtils.java:109)
    [INFO]     [creator]            at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:326)
    [INFO]     [creator]            at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658)
    [INFO]     [creator]            at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:274)
    [INFO]     [creator]            at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
    [INFO]     [creator]            at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
    [INFO]     [creator]            at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
    [INFO]     [creator]            at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:312)
    [INFO]     [creator]            at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734)
    [INFO]     [creator]            at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
    [INFO]     [creator]            at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
    [INFO]     [creator]            at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
    [INFO]     [creator]            at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    [INFO]     [creator]            at java.base/java.util.stream.IntPipeline.reduce(IntPipeline.java:491)
    [INFO]     [creator]            at java.base/java.util.stream.IntPipeline.sum(IntPipeline.java:449)
    [INFO]     [creator]            at com.oracle.svm.hosted.config.ConfigurationParserUtils.parseAndRegisterConfigurations(ConfigurationParserUtils.java:126)
    [INFO]     [creator]            at com.oracle.svm.reflect.proxy.hosted.DynamicProxyFeature.duringSetup(DynamicProxyFeature.java:80)
    [INFO]     [creator]            at com.oracle.svm.hosted.NativeImageGenerator.lambda$setupNativeImage$18(NativeImageGenerator.java:915)
    [INFO]     [creator]            at com.oracle.svm.hosted.FeatureHandler.forEachFeature(FeatureHandler.java:71)
    [INFO]     [creator]            at com.oracle.svm.hosted.NativeImageGenerator.setupNativeImage(NativeImageGenerator.java:915)
    [INFO]     [creator]            at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:580)
    [INFO]     [creator]            at com.oracle.svm.hosted.NativeImageGenerator.lambda$run$2(NativeImageGenerator.java:495)
    [INFO]     [creator]            at java.base/java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1407)
    [INFO]     [creator]            at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
    [INFO]     [creator]            at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
    [INFO]     [creator]            at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
    [INFO]     [creator]            at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
    [INFO]     [creator]            at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)
    [INFO]     [creator]     Error: Image build request failed with exit status 1
    [INFO]     [creator]     unable to invoke layer creator
    [INFO]     [creator]     unable to contribute native-image layer
    [INFO]     [creator]     error running build
    [INFO]     [creator]     exit status 1
    [INFO]     [creator]     ERROR: failed to build: exit status 1
    

    This can be reproduced starting from security-method-webflux sample and running mvn spring-boot:build-image. A PR reproducing the error follows.

    opened by ch4mpy 34
  • Add support for logback.xml configuration file

    Add support for logback.xml configuration file

    $ ./gradlew bootBuildImage
    ...
        [creator]     javax.xml.parsers.FactoryFinder was unintentionally initialized at build time. org.slf4j.impl.StaticLoggerBinder caused initialization of this class with the following trace:
        [creator]           at javax.xml.parsers.FactoryFinder.<clinit>(FactoryFinder.java:46)
        [creator]           at javax.xml.parsers.SAXParserFactory.newInstance(SAXParserFactory.java:147)
        [creator]           at ch.qos.logback.core.joran.event.SaxEventRecorder.buildSaxParser(SaxEventRecorder.java:79)
        [creator]           at ch.qos.logback.core.joran.event.SaxEventRecorder.recordEvents(SaxEventRecorder.java:57)
        [creator]           at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:151)
        [creator]           at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:110)
        [creator]           at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:53)
        [creator]           at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:75)
        [creator]           at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:150)
        [creator]           at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:84)
        [creator]           at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:55)
    
    type: compatibility for: external-project 
    opened by yschimke 28
  • Support AOT-based autowiring for test class instances

    Support AOT-based autowiring for test class instances

    AOT-generated context don't use autowiring at all and it's been working fine for the main context. However, the TCF does rely on it to inject dependencies in the test class itself (See DependencyInjectionTestExecutionListener).

    We need to research a way where we'd either be in control of creating the instance (in which case we can generate the code for it like we do for other classes), or enable AutowiredAnnotationBeanPostProcessor#postProcessProperties only for the tests that match the context at hand.

    The former would be better as it means we don't have a special case for tests.

    type: enhancement 
    opened by snicoll 25
  • Spring profile management

    Spring profile management

    I'm trying to "GraalVM-native"-ify the Spring PetClinic REST. I managed to fix expected configuration issues. However, I'm stuck now on Spring profiles.

    The application offers several profiles: one set for data access and one for database. When I start the native image, I get the following:

    Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.springframework.samples.petclinic.repository.PetRepository' available: expected single matching bean but found 3: jpaPetRepositoryImpl,jdbcPetRepositoryImpl,springDataPetRepository
    	at org.springframework.beans.factory.config.DependencyDescriptor.resolveNotUnique(DependencyDescriptor.java:220)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1358)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300)
    	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)
    	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
    	... 34 more
    

    While the JVM will automatically select the bean that matches the correct profile, the Native Image cannot.

    I tried with the default command line and by passing -Dspring.profiles.active=jdbc. The logs display respectively the default profile and the jdbc one but the problem is the same.

    I didn't find anything related to profile management in the documentation.

    status: duplicate type: enhancement 
    opened by nfrankel 24
  • WebClient fails with handshake timed out after 10000ms after system restart even tho program terminates in 2369ms

    WebClient fails with handshake timed out after 10000ms after system restart even tho program terminates in 2369ms

    I am seeing a strange issue with native image when using webclient. Its consistently happening in my system

    1. If I run the program without native build (i.e on JVM), the program doesnt throw exception
    2. It doesnt fail if I build the native image & run executable i.e immediately after build but before system restart
    3. But if I restart the system & run native executable (thats built before system restart), it fails with this exception, while jar based version doesnt fail
    time /home/x/dev/spring-native-netty-timeout-bug/build/native/nativeCompile/spring-native-netty-timeout-bug 
    2022-08-21 14:55:44.016  INFO 3812 --- [           main] o.s.nativex.NativeListener               : AOT mode enabled
    2022-08-21 14:55:44.017  INFO 3812 --- [           main] com.acme.DemoApplication                 : Starting DemoApplication using Java 17.0.4 on playground with PID 3812 (/home/x/dev/spring-native-netty-timeout-bug/build/native/nativeCompile/spring-native-netty-timeout-bug started by x in /home/x)
    2022-08-21 14:55:44.017 DEBUG 3812 --- [           main] com.acme.DemoApplication                 : Running with Spring Boot v2.7.1, Spring v5.3.21
    2022-08-21 14:55:44.017  INFO 3812 --- [           main] com.acme.DemoApplication                 : No active profile set, falling back to 1 default profile: "default"
    2022-08-21 14:55:44.048  INFO 3812 --- [           main] com.acme.DemoApplication                 : Started DemoApplication in 0.045 seconds (JVM running for 0.047)
    2022-08-21 14:55:44.056 DEBUG 3812 --- [ctor-http-nio-2] com.acme.ApiAccessor                     : [d8c063ba] REGISTERED
    2022-08-21 14:55:44.075 DEBUG 3812 --- [ctor-http-nio-2] com.acme.ApiAccessor                     : [d8c063ba] CONNECT: httpbin.org/52.87.105.151:443
    2022-08-21 14:55:44.329 DEBUG 3812 --- [ctor-http-nio-2] com.acme.ApiAccessor                     : [d8c063ba, L:/192.168.1.7:48060 - R:httpbin.org/52.87.105.151:443] ACTIVE
    2022-08-21 14:55:44.329 DEBUG 3812 --- [ctor-http-nio-2] com.acme.ApiAccessor                     : [d8c063ba, L:/192.168.1.7:48060 - R:httpbin.org/52.87.105.151:443] USER_EVENT: SslHandshakeCompletionEvent(io.netty.handler.ssl.SslHandshakeTimeoutException: handshake timed out after 10000ms)
    2022-08-21 14:55:44.330  WARN 3812 --- [ctor-http-nio-2] r.netty.http.client.HttpClientConnect    : [d8c063ba, L:/192.168.1.7:48060 - R:httpbin.org/52.87.105.151:443] The connection observed an error
    
    io.netty.handler.ssl.SslHandshakeTimeoutException: handshake timed out after 10000ms
    	at io.netty.handler.ssl.SslHandler$7.run(SslHandler.java:2115) ~[na:na]
    	at io.netty.util.concurrent.PromiseTask.runTask(PromiseTask.java:98) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    	at io.netty.util.concurrent.ScheduledFutureTask.run(ScheduledFutureTask.java:153) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    	at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500) ~[na:na]
    	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[na:na]
    	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[na:na]
    	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[na:na]
    	at java.lang.Thread.run(Thread.java:833) ~[spring-native-netty-timeout-bug:na]
    	at com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:705) ~[spring-native-netty-timeout-bug:na]
    	at com.oracle.svm.core.posix.thread.PosixPlatformThreads.pthreadStartRoutine(PosixPlatformThreads.java:202) ~[na:na]
    
    2022-08-21 14:55:44.330 DEBUG 3812 --- [ctor-http-nio-2] com.acme.ApiAccessor                     : [d8c063ba, L:/192.168.1.7:48060 ! R:httpbin.org/52.87.105.151:443] USER_EVENT: SslCloseCompletionEvent(java.nio.channels.ClosedChannelException)
    2022-08-21 14:55:44.330 DEBUG 3812 --- [ctor-http-nio-2] com.acme.ApiAccessor                     : [d8c063ba, L:/192.168.1.7:48060 ! R:httpbin.org/52.87.105.151:443] INACTIVE
    2022-08-21 14:55:44.331 DEBUG 3812 --- [ctor-http-nio-2] com.acme.ApiAccessor                     : [d8c063ba, L:/192.168.1.7:48060 ! R:httpbin.org/52.87.105.151:443] UNREGISTERED
    2022-08-21 14:55:44.331 ERROR 3812 --- [           main] o.s.boot.SpringApplication               : Application run failed
    
    java.lang.IllegalStateException: Failed to execute ApplicationRunner
    	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:765) ~[spring-native-netty-timeout-bug:2.7.1]
    	at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:752) ~[spring-native-netty-timeout-bug:2.7.1]
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-native-netty-timeout-bug:2.7.1]
    	at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:164) ~[na:na]
    	at com.acme.DemoApplication.main(DemoApplication.java:22) ~[spring-native-netty-timeout-bug:na]
    Caused by: org.springframework.web.reactive.function.client.WebClientRequestException: handshake timed out after 10000ms; nested exception is io.netty.handler.ssl.SslHandshakeTimeoutException: handshake timed out after 10000ms
    	at org.springframework.web.reactive.function.client.ExchangeFunctions$DefaultExchangeFunction.lambda$wrapException$9(ExchangeFunctions.java:141) ~[na:na]
    	Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
    Error has been observed at the following site(s):
    	*__checkpoint ⇢ Request to GET https://httpbin.org/get [DefaultWebClient]
    Original Stack Trace:
    		at org.springframework.web.reactive.function.client.ExchangeFunctions$DefaultExchangeFunction.lambda$wrapException$9(ExchangeFunctions.java:141) ~[na:na]
    		at reactor.core.publisher.MonoErrorSupplied.subscribe(MonoErrorSupplied.java:55) ~[na:na]
    		at reactor.core.publisher.Mono.subscribe(Mono.java:4397) ~[spring-native-netty-timeout-bug:3.4.19]
    		at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103) ~[na:na]
    		at reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222) ~[na:na]
    		at reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222) ~[na:na]
    		at reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222) ~[na:na]
    		at reactor.core.publisher.MonoNext$NextSubscriber.onError(MonoNext.java:93) ~[spring-native-netty-timeout-bug:3.4.19]
    		at reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain.onError(MonoFlatMapMany.java:204) ~[spring-native-netty-timeout-bug:3.4.19]
    		at reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124) ~[na:na]
    		at reactor.core.publisher.FluxRetryWhen$RetryWhenMainSubscriber.whenError(FluxRetryWhen.java:225) ~[spring-native-netty-timeout-bug:3.4.19]
    		at reactor.core.publisher.FluxRetryWhen$RetryWhenOtherSubscriber.onError(FluxRetryWhen.java:274) ~[na:na]
    		at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:415) ~[spring-native-netty-timeout-bug:3.4.19]
    		at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onNext(FluxConcatMap.java:251) ~[spring-native-netty-timeout-bug:3.4.19]
    		at reactor.core.publisher.EmitterProcessor.drain(EmitterProcessor.java:537) ~[spring-native-netty-timeout-bug:3.4.19]
    		at reactor.core.publisher.EmitterProcessor.tryEmitNext(EmitterProcessor.java:343) ~[spring-native-netty-timeout-bug:3.4.19]
    		at reactor.core.publisher.SinkManySerialized.tryEmitNext(SinkManySerialized.java:100) ~[na:na]
    		at reactor.core.publisher.InternalManySink.emitNext(InternalManySink.java:27) ~[spring-native-netty-timeout-bug:3.4.19]
    		at reactor.core.publisher.FluxRetryWhen$RetryWhenMainSubscriber.onError(FluxRetryWhen.java:190) ~[spring-native-netty-timeout-bug:3.4.19]
    		at reactor.core.publisher.MonoCreate$DefaultMonoSink.error(MonoCreate.java:201) ~[spring-native-netty-timeout-bug:3.4.19]
    		at reactor.netty.http.client.HttpClientConnect$MonoHttpConnect$ClientTransportSubscriber.onError(HttpClientConnect.java:308) ~[na:na]
    		at reactor.core.publisher.MonoCreate$DefaultMonoSink.error(MonoCreate.java:201) ~[spring-native-netty-timeout-bug:3.4.19]
    		at reactor.netty.resources.DefaultPooledConnectionProvider$DisposableAcquire.onUncaughtException(DefaultPooledConnectionProvider.java:204) ~[na:na]
    		at reactor.netty.resources.DefaultPooledConnectionProvider$PooledConnection.onUncaughtException(DefaultPooledConnectionProvider.java:454) ~[spring-native-netty-timeout-bug:1.0.20]
    		at reactor.netty.channel.ChannelOperationsHandler.exceptionCaught(ChannelOperationsHandler.java:129) ~[na:na]
    		at io.netty.channel.AbstractChannelHandlerContext.invokeExceptionCaught(AbstractChannelHandlerContext.java:302) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    		at io.netty.channel.AbstractChannelHandlerContext.invokeExceptionCaught(AbstractChannelHandlerContext.java:281) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    		at io.netty.channel.AbstractChannelHandlerContext.fireExceptionCaught(AbstractChannelHandlerContext.java:273) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    		at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireExceptionCaught(CombinedChannelDuplexHandler.java:424) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    		at io.netty.channel.ChannelHandlerAdapter.exceptionCaught(ChannelHandlerAdapter.java:92) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    		at io.netty.channel.CombinedChannelDuplexHandler$1.fireExceptionCaught(CombinedChannelDuplexHandler.java:145) ~[na:na]
    		at io.netty.channel.ChannelInboundHandlerAdapter.exceptionCaught(ChannelInboundHandlerAdapter.java:143) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    		at io.netty.channel.CombinedChannelDuplexHandler.exceptionCaught(CombinedChannelDuplexHandler.java:231) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    		at io.netty.channel.AbstractChannelHandlerContext.invokeExceptionCaught(AbstractChannelHandlerContext.java:302) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    		at io.netty.channel.AbstractChannelHandlerContext.invokeExceptionCaught(AbstractChannelHandlerContext.java:281) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    		at io.netty.channel.AbstractChannelHandlerContext.fireExceptionCaught(AbstractChannelHandlerContext.java:273) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    		at reactor.netty.tcp.SslProvider$SslReadHandler.userEventTriggered(SslProvider.java:850) ~[na:na]
    		at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:346) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    		at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:332) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    		at io.netty.channel.AbstractChannelHandlerContext.fireUserEventTriggered(AbstractChannelHandlerContext.java:324) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    		at io.netty.handler.logging.LoggingHandler.userEventTriggered(LoggingHandler.java:222) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    		at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:346) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    		at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:332) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    		at io.netty.channel.AbstractChannelHandlerContext.fireUserEventTriggered(AbstractChannelHandlerContext.java:324) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    		at io.netty.handler.ssl.SslUtils.handleHandshakeFailure(SslUtils.java:443) ~[na:na]
    		at io.netty.handler.ssl.SslHandler$7.run(SslHandler.java:2119) ~[na:na]
    		at io.netty.util.concurrent.PromiseTask.runTask(PromiseTask.java:98) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    		at io.netty.util.concurrent.ScheduledFutureTask.run(ScheduledFutureTask.java:153) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    		at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    		at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    		at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    		at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500) ~[na:na]
    		at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[na:na]
    		at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[na:na]
    		at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[na:na]
    		at java.lang.Thread.run(Thread.java:833) ~[spring-native-netty-timeout-bug:na]
    		at com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:705) ~[spring-native-netty-timeout-bug:na]
    		at com.oracle.svm.core.posix.thread.PosixPlatformThreads.pthreadStartRoutine(PosixPlatformThreads.java:202) ~[na:na]
    	Suppressed: java.lang.Exception: #block terminated with an error
    		at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:99) ~[spring-native-netty-timeout-bug:3.4.19]
    		at reactor.core.publisher.Mono.block(Mono.java:1707) ~[spring-native-netty-timeout-bug:3.4.19]
    		at com.acme.DemoApplication.lambda$onInit$0(DemoApplication.java:27) ~[spring-native-netty-timeout-bug:na]
    		at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:762) ~[spring-native-netty-timeout-bug:2.7.1]
    		at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:752) ~[spring-native-netty-timeout-bug:2.7.1]
    		at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-native-netty-timeout-bug:2.7.1]
    		at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:164) ~[na:na]
    		at com.acme.DemoApplication.main(DemoApplication.java:22) ~[spring-native-netty-timeout-bug:na]
    Caused by: io.netty.handler.ssl.SslHandshakeTimeoutException: handshake timed out after 10000ms
    	at io.netty.handler.ssl.SslHandler$7.run(SslHandler.java:2115) ~[na:na]
    	at io.netty.util.concurrent.PromiseTask.runTask(PromiseTask.java:98) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    	at io.netty.util.concurrent.ScheduledFutureTask.run(ScheduledFutureTask.java:153) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    	at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) ~[spring-native-netty-timeout-bug:4.1.78.Final]
    	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500) ~[na:na]
    	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[na:na]
    	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[na:na]
    	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[na:na]
    	at java.lang.Thread.run(Thread.java:833) ~[spring-native-netty-timeout-bug:na]
    	at com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:705) ~[spring-native-netty-timeout-bug:na]
    	at com.oracle.svm.core.posix.thread.PosixPlatformThreads.pthreadStartRoutine(PosixPlatformThreads.java:202) ~[na:na]
    
       0.04s  user 0.05s system 3% cpu 2.346 total
    

    When I run same program with jar, I get following output

    java -jar /home/x/dev/spring-native-netty-timeout-bug/build/libs/spring-native-netty-timeout-bug-0.0.1-SNAPSHOT.jar
    2022-08-21 15:10:27.820  INFO 5865 --- [           main] o.s.nativex.NativeListener               : AOT mode disabled
    2022-08-21 15:10:27.940  INFO 5865 --- [           main] com.acme.DemoApplication                 : Starting DemoApplication using Java 17.0.4 on playground with PID 5865 (/home/x/dev/spring-native-netty-timeout-bug/build/libs/spring-native-netty-timeout-bug-0.0.1-SNAPSHOT.jar started by x in /home/x/dev/spring-native-netty-timeout-bug)
    2022-08-21 15:10:27.940 DEBUG 5865 --- [           main] com.acme.DemoApplication                 : Running with Spring Boot v2.7.1, Spring v5.3.21
    2022-08-21 15:10:27.942  INFO 5865 --- [           main] com.acme.DemoApplication                 : No active profile set, falling back to 1 default profile: "default"
    2022-08-21 15:10:29.256  INFO 5865 --- [           main] com.acme.DemoApplication                 : Started DemoApplication in 2.044 seconds (JVM running for 2.725)
    2022-08-21 15:10:30.209 DEBUG 5865 --- [or-http-epoll-2] com.acme.ApiAccessor                     : [3266e03b] REGISTERED
    2022-08-21 15:10:30.283 DEBUG 5865 --- [or-http-epoll-2] com.acme.ApiAccessor                     : [3266e03b] CONNECT: httpbin.org/34.227.213.82:443
    2022-08-21 15:10:30.607 DEBUG 5865 --- [or-http-epoll-2] com.acme.ApiAccessor                     : [3266e03b, L:/192.168.1.7:60608 - R:httpbin.org/34.227.213.82:443] ACTIVE
    2022-08-21 15:10:30.859 DEBUG 5865 --- [or-http-epoll-2] com.acme.ApiAccessor                     : [3266e03b, L:/192.168.1.7:60608 - R:httpbin.org/34.227.213.82:443] READ COMPLETE
    2022-08-21 15:10:30.964 DEBUG 5865 --- [or-http-epoll-2] com.acme.ApiAccessor                     : [3266e03b, L:/192.168.1.7:60608 - R:httpbin.org/34.227.213.82:443] READ COMPLETE
    2022-08-21 15:10:31.216 DEBUG 5865 --- [or-http-epoll-2] com.acme.ApiAccessor                     : [3266e03b, L:/192.168.1.7:60608 - R:httpbin.org/34.227.213.82:443] USER_EVENT: SslHandshakeCompletionEvent(SUCCESS)
    2022-08-21 15:10:31.247 DEBUG 5865 --- [or-http-epoll-2] com.acme.ApiAccessor                     : [3266e03b-1, L:/192.168.1.7:60608 - R:httpbin.org/34.227.213.82:443] WRITE: 99B GET /get HTTP/1.1
    user-agent: ReactorNetty/1.0.20
    host: httpbin.org
    Accept: application/json
    
    
    2022-08-21 15:10:31.248 DEBUG 5865 --- [or-http-epoll-2] com.acme.ApiAccessor                     : [3266e03b-1, L:/192.168.1.7:60608 - R:httpbin.org/34.227.213.82:443] FLUSH
    2022-08-21 15:10:31.252 DEBUG 5865 --- [or-http-epoll-2] com.acme.ApiAccessor                     : [3266e03b-1, L:/192.168.1.7:60608 - R:httpbin.org/34.227.213.82:443] WRITE: 0B
    2022-08-21 15:10:31.252 DEBUG 5865 --- [or-http-epoll-2] com.acme.ApiAccessor                     : [3266e03b-1, L:/192.168.1.7:60608 - R:httpbin.org/34.227.213.82:443] FLUSH
    2022-08-21 15:10:31.253 DEBUG 5865 --- [or-http-epoll-2] com.acme.ApiAccessor                     : [3266e03b-1, L:/192.168.1.7:60608 - R:httpbin.org/34.227.213.82:443] READ COMPLETE
    2022-08-21 15:10:31.500 DEBUG 5865 --- [or-http-epoll-2] com.acme.ApiAccessor                     : [3266e03b-1, L:/192.168.1.7:60608 - R:httpbin.org/34.227.213.82:443] READ: 506B HTTP/1.1 200 OK
    Date: Sun, 21 Aug 2022 09:40:31 GMT
    Content-Type: application/json
    Content-Length: 276
    Connection: keep-alive
    Server: gunicorn/19.9.0
    Access-Control-Allow-Origin: *
    Access-Control-Allow-Credentials: true
    
    {
      "args": {}, 
      "headers": {
        "Accept": "application/json", 
        "Host": "httpbin.org", 
        "User-Agent": "ReactorNetty/1.0.20", 
        "X-Amzn-Trace-Id": "Root=1-6301fd8f-0d26170512f1dca7432ea37a"
      }, 
      "origin": "122.171.23.69", 
      "url": "https://httpbin.org/get"
    }
    
    2022-08-21 15:10:31.629 DEBUG 5865 --- [or-http-epoll-2] com.acme.ApiAccessor                     : [3266e03b, L:/192.168.1.7:60608 - R:httpbin.org/34.227.213.82:443] READ COMPLETE
    GetResponse[headers=Headers[accept=application/json]]
    2022-08-21 15:10:31.650 DEBUG 5865 --- [or-http-epoll-2] com.acme.ApiAccessor                     : [3266e03b, L:/192.168.1.7:60608 ! R:httpbin.org/34.227.213.82:443] CLOSE
    2022-08-21 15:10:31.653 DEBUG 5865 --- [or-http-epoll-2] com.acme.ApiAccessor                     : [3266e03b, L:/192.168.1.7:60608 ! R:httpbin.org/34.227.213.82:443] USER_EVENT: SslCloseCompletionEvent(java.nio.channels.ClosedChannelException)
    2022-08-21 15:10:31.653 DEBUG 5865 --- [or-http-epoll-2] com.acme.ApiAccessor                     : [3266e03b, L:/192.168.1.7:60608 ! R:httpbin.org/34.227.213.82:443] INACTIVE
    2022-08-21 15:10:31.653 DEBUG 5865 --- [or-http-epoll-2] com.acme.ApiAccessor                     : [3266e03b, L:/192.168.1.7:60608 ! R:httpbin.org/34.227.213.82:443] UNREGISTERED
    

    I see this consistently happening after I restart the system. The binary doesnt work even after multiple runs. I even tried running it after I ran jar version on JVM (to see if DNS resolution at OS level caused this issue — my uneducated guess work as I am not sure if netty does DNS resolution by itself/delegates to OS :D). But it ran successfully when I created the image initally using ./gradlew nativeCompile before I restarted the system.

    Version info

    1. Java
    openjdk version "17.0.4" 2022-07-19
    OpenJDK Runtime Environment Temurin-17.0.4+8 (build 17.0.4+8)
    OpenJDK 64-Bit Server VM Temurin-17.0.4+8 (build 17.0.4+8, mixed mode, sharing)
    
    1. OS Ubuntu 20.04.4 LTS
    2. Graal VM 22.2.r17-grl
    3. Spring & Gradle versions can be found at this minimum reproducible sample
    type: bug status: feedback-provided for: external-project jvm-reachability-metadata 
    opened by thekalinga 23
  • Add support for Spring Cloud Gateway

    Add support for Spring Cloud Gateway

    I've got a Graal + Spring Cloud Gateway app that I can't quite get over the GraalVM compilation hump. The code is in this repository.

    And there's a compile.sh at the root of the project that illustrates my build. I get an inscrutible error, like this:

    01:47:50.613 [ForkJoinPool-2-worker-15] DEBUG io.netty.util.internal.PlatformDependent - -Dio.netty.maxDirectMemory: 13362528256 bytes
    01:47:50.613 [ForkJoinPool-2-worker-15] DEBUG io.netty.util.internal.PlatformDependent - -Dio.netty.uninitializedArrayAllocationThreshold: -1
    01:47:50.613 [ForkJoinPool-2-worker-15] DEBUG io.netty.util.internal.CleanerJava6 - java.nio.ByteBuffer.cleaner(): available
    01:47:50.613 [ForkJoinPool-2-worker-15] DEBUG io.netty.util.internal.PlatformDependent - -Dio.netty.noPreferDirect: false
    01:47:50.616 [ForkJoinPool-2-worker-15] DEBUG io.netty.util.ResourceLeakDetector - -Dio.netty.leakDetection.level: simple
    01:47:50.616 [ForkJoinPool-2-worker-15] DEBUG io.netty.util.ResourceLeakDetector - -Dio.netty.leakDetection.targetRecords: 4
    01:47:56.091 [ForkJoinPool-4-worker-9] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.maxCapacityPerThread: 4096
    01:47:56.091 [ForkJoinPool-4-worker-9] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.maxSharedCapacityFactor: 2
    01:47:56.091 [ForkJoinPool-4-worker-9] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.linkCapacity: 16
    01:47:56.091 [ForkJoinPool-4-worker-9] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.ratio: 8
    01:47:56.091 [ForkJoinPool-4-worker-9] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.delayedQueue.ratio: 8
    01:48:09.991 [ForkJoinPool-2-worker-15] DEBUG io.netty.buffer.AbstractByteBuf - -Dio.netty.buffer.checkAccessible: true
    01:48:09.991 [ForkJoinPool-2-worker-15] DEBUG io.netty.buffer.AbstractByteBuf - -Dio.netty.buffer.checkBounds: true
    01:48:09.991 [ForkJoinPool-2-worker-15] DEBUG io.netty.util.ResourceLeakDetectorFactory - Loaded default ResourceLeakDetector: io.netty.util.ResourceLeakDetector@57afd16
    01:48:10.027 [ForkJoinPool-2-worker-15] DEBUG io.netty.buffer.AdvancedLeakAwareByteBuf - -Dio.netty.leakDetection.acquireAndReleaseOnly: false
    01:48:15.387 [ForkJoinPool-2-worker-0] DEBUG io.netty.channel.nio.NioEventLoop - -Dio.netty.noKeySetOptimization: false
    01:48:15.388 [ForkJoinPool-2-worker-0] DEBUG io.netty.channel.nio.NioEventLoop - -Dio.netty.selectorAutoRebuildThreshold: 512
    [gateway:70358]     analysis:  26,237.13 ms,  4.59 GB
    Fatal error:java.lang.NullPointerException
    	at com.oracle.graal.pointsto.flow.MethodTypeFlow.getParsingContext(MethodTypeFlow.java:99)
    	at com.oracle.graal.pointsto.util.AnalysisError.parsingContext(AnalysisError.java:122)
    	at com.oracle.graal.pointsto.util.AnalysisError.access$000(AnalysisError.java:37)
    	at com.oracle.graal.pointsto.util.AnalysisError$ParsingError.message(AnalysisError.java:97)
    	at com.oracle.graal.pointsto.util.AnalysisError$ParsingError.<init>(AnalysisError.java:87)
    	at com.oracle.graal.pointsto.util.AnalysisError.parsingError(AnalysisError.java:138)
    	at com.oracle.graal.pointsto.flow.MethodTypeFlow.doParse(MethodTypeFlow.java:336)
    	at com.oracle.graal.pointsto.flow.MethodTypeFlow.ensureParsed(MethodTypeFlow.java:311)
    	at com.oracle.graal.pointsto.flow.MethodTypeFlow.addContext(MethodTypeFlow.java:112)
    	at com.oracle.graal.pointsto.DefaultAnalysisPolicy$DefaultVirtualInvokeTypeFlow.onObservedUpdate(DefaultAnalysisPolicy.java:228)
    	at com.oracle.graal.pointsto.flow.TypeFlow.notifyObservers(TypeFlow.java:470)
    	at com.oracle.graal.pointsto.flow.TypeFlow.update(TypeFlow.java:542)
    	at com.oracle.graal.pointsto.BigBang$2.run(BigBang.java:530)
    	at com.oracle.graal.pointsto.util.CompletionExecutor.lambda$execute$0(CompletionExecutor.java:173)
    	at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1402)
    	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
    	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
    	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
    	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
    Error: Image build request failed with exit status 1
    com.oracle.svm.driver.NativeImage$NativeImageError: Image build request failed with exit status 1
    	at com.oracle.svm.driver.NativeImage.showError(NativeImage.java:1541)
    	at com.oracle.svm.driver.NativeImage.build(NativeImage.java:1299)
    	at com.oracle.svm.driver.NativeImage.performBuild(NativeImage.java:1260)
    	at com.oracle.svm.driver.NativeImage.main(NativeImage.java:1219)
    
    
    
    type: compatibility for: external-project 
    opened by joshlong 23
  • Failed to establish connection to Kafka with SASL authentication.

    Failed to establish connection to Kafka with SASL authentication.

    Connecting to Kafka fails with the following exception (see full stack trace below)

    javax.security.sasl.SaslException: Cannot get userid/password

    I am using the following configuration settings:

    spring.kafka.properties.sasl.mechanism=PLAIN spring.kafka.properties.bootstrap.servers=pkc-123456.eu-central-1.aws.confluent.cloud:9092 spring.kafka.properties.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username='test' password='test'; spring.kafka.properties.security.protocol=SASL_SSL

    Environment:

    • Java 17
    • Spring Boot 2.6.2
    • Spring Native 0.11.1
    • GraalVM CE 21.3.0
    java.io.IOException: Channel could not be created for socket java.nio.channels.SocketChannel[closed]
            at org.apache.kafka.common.network.Selector.buildAndAttachKafkaChannel(Selector.java:348) ~[na:na]
            at org.apache.kafka.common.network.Selector.registerChannel(Selector.java:329) ~[na:na]
            at org.apache.kafka.common.network.Selector.connect(Selector.java:256) ~[na:na]
            at org.apache.kafka.clients.NetworkClient.initiateConnect(NetworkClient.java:977) ~[na:na]
            at org.apache.kafka.clients.NetworkClient.ready(NetworkClient.java:301) ~[na:na]
            at org.apache.kafka.clients.admin.KafkaAdminClient$AdminClientRunnable.sendEligibleCalls(KafkaAdminClient.java:1117) ~[na:na]
            at org.apache.kafka.clients.admin.KafkaAdminClient$AdminClientRunnable.processRequests(KafkaAdminClient.java:1377) ~[na:na]
            at org.apache.kafka.clients.admin.KafkaAdminClient$AdminClientRunnable.run(KafkaAdminClient.java:1320) ~[na:na]
            at java.lang.Thread.run(Thread.java:833) ~[na:na]
            at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:596) ~[na:na]
            at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:192) ~[na:na]
    Caused by: org.apache.kafka.common.KafkaException: org.apache.kafka.common.errors.SaslAuthenticationException: Failed to configure SaslClientAuthenticator
            at org.apache.kafka.common.network.SaslChannelBuilder.buildChannel(SaslChannelBuilder.java:240) ~[kafka-test:na]
            at org.apache.kafka.common.network.Selector.buildAndAttachKafkaChannel(Selector.java:338) ~[na:na]
            ... 10 common frames omitted
    Caused by: org.apache.kafka.common.errors.SaslAuthenticationException: Failed to configure SaslClientAuthenticator
    Caused by: org.apache.kafka.common.errors.SaslAuthenticationException: Failed to create SaslClient with mechanism PLAIN
    Caused by: javax.security.sasl.SaslException: Cannot get userid/password
            at com.sun.security.sasl.ClientFactoryImpl.getUserInfo(ClientFactoryImpl.java:159) ~[kafka-test:na]
            at com.sun.security.sasl.ClientFactoryImpl.createSaslClient(ClientFactoryImpl.java:96) ~[kafka-test:na]
            at javax.security.sasl.Sasl.createSaslClient(Sasl.java:434) ~[kafka-test:na]
            at org.apache.kafka.common.security.authenticator.SaslClientAuthenticator.lambda$createSaslClient$0(SaslClientAuthenticator.java:219) ~[na:na]
            at java.security.AccessController.doPrivileged(AccessController.java:150) ~[na:na]
            at javax.security.auth.Subject.doAs(Subject.java:439) ~[na:na]
            at org.apache.kafka.common.security.authenticator.SaslClientAuthenticator.createSaslClient(SaslClientAuthenticator.java:215) ~[na:na]
            at org.apache.kafka.common.security.authenticator.SaslClientAuthenticator.<init>(SaslClientAuthenticator.java:206) ~[na:na]
            at org.apache.kafka.common.network.SaslChannelBuilder.buildClientAuthenticator(SaslChannelBuilder.java:286) ~[kafka-test:na]
            at org.apache.kafka.common.network.SaslChannelBuilder.lambda$buildChannel$1(SaslChannelBuilder.java:228) ~[kafka-test:na]
            at org.apache.kafka.common.network.KafkaChannel.<init>(KafkaChannel.java:143) ~[na:na]
            at org.apache.kafka.common.network.SaslChannelBuilder.buildChannel(SaslChannelBuilder.java:236) ~[kafka-test:na]
            at org.apache.kafka.common.network.Selector.buildAndAttachKafkaChannel(Selector.java:338) ~[na:na]
            at org.apache.kafka.common.network.Selector.registerChannel(Selector.java:329) ~[na:na]
            at org.apache.kafka.common.network.Selector.connect(Selector.java:256) ~[na:na]
            at org.apache.kafka.clients.NetworkClient.initiateConnect(NetworkClient.java:977) ~[na:na]
            at org.apache.kafka.clients.NetworkClient.ready(NetworkClient.java:301) ~[na:na]
            at org.apache.kafka.clients.admin.KafkaAdminClient$AdminClientRunnable.sendEligibleCalls(KafkaAdminClient.java:1117) ~[na:na]
            at org.apache.kafka.clients.admin.KafkaAdminClient$AdminClientRunnable.processRequests(KafkaAdminClient.java:1377) ~[na:na]
            at org.apache.kafka.clients.admin.KafkaAdminClient$AdminClientRunnable.run(KafkaAdminClient.java:1320) ~[na:na]
            at java.lang.Thread.run(Thread.java:833) ~[na:na]
            at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:596) ~[na:na]
            at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:192) ~[na:na]
    Caused by: javax.security.auth.callback.UnsupportedCallbackException: Could not login: the client is being asked for a password, but the Kafka client code does not currently support obtaining a password from the user.
            at org.apache.kafka.common.security.authenticator.SaslClientCallbackHandler.handle(SaslClientCallbackHandler.java:73) ~[kafka-test:na]
            at com.sun.security.sasl.ClientFactoryImpl.getUserInfo(ClientFactoryImpl.java:138) ~[kafka-test:na]
            ... 22 common frames omitted
    
    type: compatibility for: external-project 
    opened by robtha 22
  • NoSuchMethodException: org.springframework.kafka.support.serializer.JsonSerializer.<init>()

    NoSuchMethodException: org.springframework.kafka.support.serializer.JsonSerializer.()

    Hi, I've updated this project called springboot-producer-consumer to spring-boot 2.4.4 and spring-native 0.9.1.

    I am able to build the native Docker image and run its container normally. However, when a JSON message is published using springboot-producer-api, I am getting the following exception

    Caused by: java.lang.NoSuchMethodException: org.springframework.kafka.support.serializer.JsonSerializer.<init>()
    

    Full Log

    I set org.springframework.kafka.support.serializer.JsonSerializer using @TypeHint. After building the native image, starting the container and posting a news, I get the following exception

    Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class com.  mycompany.producerapi.domain.News and no properties discovered to create BeanSerializer (to avoid exception,   disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
    

    Full Log

    If I do what the exception suggests "to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS", the payload of the message will be empty.


    How to reproduce

    1. git clone https://github.com/ivangfr/graalvm-quarkus-micronaut-springboot.git
    2. cd graalvm-quarkus-micronaut-springboot
    3. git checkout update-version-of-all-frameworks
    4. cd producer-consumer
    5. docker-compose up -d kafka zookeeper
    6. cd springboot-producer-consumer
    7. cd producer-api && ./docker-build.sh native && cd ..
    8. docker run --rm --name springboot-producer-api-native -p 9105:8080 -e SPRING_PROFILES_ACTIVE=native -e KAFKA_HOST=kafka -e KAFKA_PORT=9092 --network producer-consumer_default docker.mycompany.com/springboot-producer-api-native:1.0.0
    9. curl -i -X POST localhost:9105/api/news -H 'Content-Type: application/json' -d '{ "source":"Spring Boot Blog", "title":"Spring Boot Framework & GraalVM" }'

    json-serializer-exception-log

      .   ____          _            __ _ _
     /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
    ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
     \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
      '  |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
     :: Spring Boot ::                (v2.4.4)
    
    INFO 1 --- [           main] c.m.producerapi.ProducerApiApplication   : Starting ProducerApiApplication using Java 11.0.10 on 9309ce3432c8 with PID 1 (/  workspace/com.mycompany.producerapi.ProducerApiApplication started by cnb in /workspace)
    INFO 1 --- [           main] c.m.producerapi.ProducerApiApplication   : The following profiles are active: native
    
    ...
      
    INFO 1 --- [           main] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port 8080
    INFO 1 --- [           main] c.m.producerapi.ProducerApiApplication   : Started ProducerApiApplication in 0.321 seconds (JVM running for 0.334)
    INFO 1 --- [ctor-http-nio-2] c.m.producerapi.kafka.NewsProducer       : Sending News 'News(id=22d6006f-7c28-4994-b663-03f5c743125e, source=Spring Boot Blog,   title=Spring Boot Framework & GraalVM)' to topic 'springboot.news.native.json'
      
    ...
      
    ERROR 1 --- [ctor-http-nio-2] a.w.r.e.AbstractErrorWebExceptionHandler : [ae6274ce-1]  500 Server Error for HTTP POST "/api/news"
      
    org.apache.kafka.common.KafkaException: Failed to construct kafka producer
    	at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:441) ~[na:na]
    	Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
    Error has been observed at the following site(s):
    	|_ checkpoint ? org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter [DefaultWebFilterChain]
    	|_ checkpoint ? HTTP POST "/api/news" [ExceptionHandlingWebHandler]
    Stack trace:
    		at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:441) ~[na:na]
    		at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:290) ~[na:na]
    		at org.springframework.kafka.core.DefaultKafkaProducerFactory.createRawProducer(DefaultKafkaProducerFactory.java:743) ~[com.mycompany.producerapi.  ProducerApiApplication:2.6.7]
    		at org.springframework.kafka.core.DefaultKafkaProducerFactory.createKafkaProducer(DefaultKafkaProducerFactory.java:584) ~[com.mycompany.producerapi.  ProducerApiApplication:2.6.7]
    		at org.springframework.kafka.core.DefaultKafkaProducerFactory.doCreateProducer(DefaultKafkaProducerFactory.java:544) ~[com.mycompany.producerapi.  ProducerApiApplication:2.6.7]
    		at org.springframework.kafka.core.DefaultKafkaProducerFactory.createProducer(DefaultKafkaProducerFactory.java:519) ~[com.mycompany.producerapi.  ProducerApiApplication:2.6.7]
    		at org.springframework.kafka.core.DefaultKafkaProducerFactory.createProducer(DefaultKafkaProducerFactory.java:513) ~[com.mycompany.producerapi.  ProducerApiApplication:2.6.7]
    		at org.springframework.kafka.core.KafkaTemplate.getTheProducer(KafkaTemplate.java:666) ~[com.mycompany.producerapi.ProducerApiApplication:2.6.7]
    		at org.springframework.kafka.core.KafkaTemplate.doSend(KafkaTemplate.java:552) ~[com.mycompany.producerapi.ProducerApiApplication:2.6.7]
    		at org.springframework.kafka.core.KafkaTemplate.send(KafkaTemplate.java:369) ~[com.mycompany.producerapi.ProducerApiApplication:2.6.7]
    		at com.mycompany.producerapi.kafka.NewsProducer.send(NewsProducer.java:24) ~[com.mycompany.producerapi.ProducerApiApplication:na]
    		at com.mycompany.producerapi.rest.NewsController.publishNews(NewsController.java:29) ~[com.mycompany.producerapi.ProducerApiApplication:na]
    		at java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
    		at org.springframework.web.reactive.result.method.InvocableHandlerMethod.lambda$invoke$0(InvocableHandlerMethod.java:146) ~[na:na]
    		at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:125) ~[com.mycompany.producerapi.ProducerApiApplication:3.4.4]
    		at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1815) ~[com.mycompany.producerapi.ProducerApiApplication:3.4.4]
    		at reactor.core.publisher.MonoZip$ZipCoordinator.signal(MonoZip.java:251) ~[com.mycompany.producerapi.ProducerApiApplication:3.4.4]
    		at reactor.core.publisher.MonoZip$ZipInner.onNext(MonoZip.java:336) ~[com.mycompany.producerapi.ProducerApiApplication:3.4.4]
    		at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onNext(MonoPeekTerminal.java:180) ~[na:na]
    		at reactor.core.publisher.FluxDefaultIfEmpty$DefaultIfEmptySubscriber.onNext(FluxDefaultIfEmpty.java:100) ~[na:na]
    		at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:73) ~[na:na]
    		at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79) ~[na:na]
    		at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1815) ~[com.mycompany.producerapi.ProducerApiApplication:3.4.4]
    		at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:151) ~[com.mycompany.producerapi.ProducerApiApplication:3.4.4]
    		at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onNext(FluxContextWrite.java:107) ~[na:na]
    		at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onNext(FluxMapFuseable.java:295) ~[na:na]
    		at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.onNext(FluxFilterFuseable.java:337) ~[na:na]
    		at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1815) ~[com.mycompany.producerapi.ProducerApiApplication:3.4.4]
    		at reactor.core.publisher.MonoCollect$CollectSubscriber.onComplete(MonoCollect.java:159) ~[na:na]
    		at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:142) ~[na:na]
    		at reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:259) ~[na:na]
    		at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:142) ~[na:na]
    		at reactor.netty.channel.FluxReceive.onInboundComplete(FluxReceive.java:401) ~[com.mycompany.producerapi.ProducerApiApplication:1.0.5]
    		at reactor.netty.channel.ChannelOperations.onInboundComplete(ChannelOperations.java:416) ~[com.mycompany.producerapi.ProducerApiApplication:1.0.5]
    		at reactor.netty.http.server.HttpServerOperations.onInboundNext(HttpServerOperations.java:556) ~[na:na]
    		at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:94) ~[na:na]
    		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[na:na]
    		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[na:na]
    		at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[na:na]
    		at reactor.netty.http.server.HttpTrafficHandler.channelRead(HttpTrafficHandler.java:253) ~[na:na]
    		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[na:na]
    		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[na:na]
    		at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[na:na]
    		at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436) ~[na:na]
    		at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) ~[na:na]
    		at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296) ~[na:na]
    		at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251) ~[na:na]
    		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[na:na]
    		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[na:na]
    		at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[na:na]
    		at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[na:na]
    		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[na:na]
    		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[na:na]
    		at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[na:na]
    		at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) ~[na:na]
    		at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719) ~[na:na]
    		at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655) ~[na:na]
    		at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581) ~[na:na]
    		at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) ~[na:na]
    		at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[na:na]
    		at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[na:na]
    		at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[na:na]
    		at java.lang.Thread.run(Thread.java:834) ~[na:na]
    		at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:519) ~[na:na]
    		at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:192) ~[na:na]
    Caused by: org.apache.kafka.common.KafkaException: Could not find a public no-argument constructor for org.springframework.kafka.support.serializer.JsonSerializer
    	at org.apache.kafka.common.utils.Utils.newInstance(Utils.java:349) ~[na:na]
    	at org.apache.kafka.common.config.AbstractConfig.getConfiguredInstance(AbstractConfig.java:377) ~[na:na]
    	at org.apache.kafka.common.config.AbstractConfig.getConfiguredInstance(AbstractConfig.java:399) ~[na:na]
    	at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:374) ~[na:na]
    	at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:290) ~[na:na]
    	at org.springframework.kafka.core.DefaultKafkaProducerFactory.createRawProducer(DefaultKafkaProducerFactory.java:743) ~[com.mycompany.producerapi.  ProducerApiApplication:2.6.7]
    	at org.springframework.kafka.core.DefaultKafkaProducerFactory.createKafkaProducer(DefaultKafkaProducerFactory.java:584) ~[com.mycompany.producerapi.  ProducerApiApplication:2.6.7]
    	at org.springframework.kafka.core.DefaultKafkaProducerFactory.doCreateProducer(DefaultKafkaProducerFactory.java:544) ~[com.mycompany.producerapi.  ProducerApiApplication:2.6.7]
    	at org.springframework.kafka.core.DefaultKafkaProducerFactory.createProducer(DefaultKafkaProducerFactory.java:519) ~[com.mycompany.producerapi.  ProducerApiApplication:2.6.7]
    	at org.springframework.kafka.core.DefaultKafkaProducerFactory.createProducer(DefaultKafkaProducerFactory.java:513) ~[com.mycompany.producerapi.  ProducerApiApplication:2.6.7]
    	at org.springframework.kafka.core.KafkaTemplate.getTheProducer(KafkaTemplate.java:666) ~[com.mycompany.producerapi.ProducerApiApplication:2.6.7]
    	at org.springframework.kafka.core.KafkaTemplate.doSend(KafkaTemplate.java:552) ~[com.mycompany.producerapi.ProducerApiApplication:2.6.7]
    	at org.springframework.kafka.core.KafkaTemplate.send(KafkaTemplate.java:369) ~[com.mycompany.producerapi.ProducerApiApplication:2.6.7]
    	at com.mycompany.producerapi.kafka.NewsProducer.send(NewsProducer.java:24) ~[com.mycompany.producerapi.ProducerApiApplication:na]
    	at com.mycompany.producerapi.rest.NewsController.publishNews(NewsController.java:29) ~[com.mycompany.producerapi.ProducerApiApplication:na]
    	at java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
    	at org.springframework.web.reactive.result.method.InvocableHandlerMethod.lambda$invoke$0(InvocableHandlerMethod.java:146) ~[na:na]
    	at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:125) ~[com.mycompany.producerapi.ProducerApiApplication:3.4.4]
    	at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1815) ~[com.mycompany.producerapi.ProducerApiApplication:3.4.4]
    	at reactor.core.publisher.MonoZip$ZipCoordinator.signal(MonoZip.java:251) ~[com.mycompany.producerapi.ProducerApiApplication:3.4.4]
    	at reactor.core.publisher.MonoZip$ZipInner.onNext(MonoZip.java:336) ~[com.mycompany.producerapi.ProducerApiApplication:3.4.4]
    	at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onNext(MonoPeekTerminal.java:180) ~[na:na]
    	at reactor.core.publisher.FluxDefaultIfEmpty$DefaultIfEmptySubscriber.onNext(FluxDefaultIfEmpty.java:100) ~[na:na]
    	at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:73) ~[na:na]
    	at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79) ~[na:na]
    	at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1815) ~[com.mycompany.producerapi.ProducerApiApplication:3.4.4]
    	at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:151) ~[com.mycompany.producerapi.ProducerApiApplication:3.4.4]
    	at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onNext(FluxContextWrite.java:107) ~[na:na]
    	at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onNext(FluxMapFuseable.java:295) ~[na:na]
    	at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.onNext(FluxFilterFuseable.java:337) ~[na:na]
    	at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1815) ~[com.mycompany.producerapi.ProducerApiApplication:3.4.4]
    	at reactor.core.publisher.MonoCollect$CollectSubscriber.onComplete(MonoCollect.java:159) ~[na:na]
    	at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:142) ~[na:na]
    	at reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:259) ~[na:na]
    	at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:142) ~[na:na]
    	at reactor.netty.channel.FluxReceive.onInboundComplete(FluxReceive.java:401) ~[com.mycompany.producerapi.ProducerApiApplication:1.0.5]
    	at reactor.netty.channel.ChannelOperations.onInboundComplete(ChannelOperations.java:416) ~[com.mycompany.producerapi.ProducerApiApplication:1.0.5]
    	at reactor.netty.http.server.HttpServerOperations.onInboundNext(HttpServerOperations.java:556) ~[na:na]
    	at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:94) ~[na:na]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[na:na]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[na:na]
    	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[na:na]
    	at reactor.netty.http.server.HttpTrafficHandler.channelRead(HttpTrafficHandler.java:253) ~[na:na]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[na:na]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[na:na]
    	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[na:na]
    	at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436) ~[na:na]
    	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) ~[na:na]
    	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296) ~[na:na]
    	at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251) ~[na:na]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[na:na]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[na:na]
    	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[na:na]
    	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[na:na]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[na:na]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[na:na]
    	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[na:na]
    	at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) ~[na:na]
    	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719) ~[na:na]
    	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655) ~[na:na]
    	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581) ~[na:na]
    	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) ~[na:na]
    	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[na:na]
    	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[na:na]
    	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[na:na]
    	at java.lang.Thread.run(Thread.java:834) ~[na:na]
    	at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:519) ~[na:na]
    	at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:192) ~[na:na]
    Caused by: java.lang.NoSuchMethodException: org.springframework.kafka.support.serializer.JsonSerializer.<init>()
    	at java.lang.Class.getConstructor0(DynamicHub.java:3349) ~[na:na]
    	at java.lang.Class.getDeclaredConstructor(DynamicHub.java:2553) ~[na:na]
    	at org.apache.kafka.common.utils.Utils.newInstance(Utils.java:347) ~[na:na]
    	... 67 common frames omitted
    

    bean-serializer-exception-log

    ERROR 1 --- [ctor-http-nio-2] a.w.r.e.AbstractErrorWebExceptionHandler : [d2eb64eb-1]  500 Server Error for HTTP   POST "/api/news"
    
    org.apache.kafka.common.errors.SerializationException: Can't serialize data [News  (id=bb5f31b1-0450-44a6-a629-8c45887321bd, source=Spring Boot Blog, title=Spring Boot Framework & GraalVM)] for   topic [springboot.news.native.json]
    	Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
    Error has been observed at the following site(s):
    	|_ checkpoint ? org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter   [DefaultWebFilterChain]
    	|_ checkpoint ? HTTP POST "/api/news" [ExceptionHandlingWebHandler]
    Stack trace:
    Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class com.  mycompany.producerapi.domain.News and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
    	at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1277) ~[na:na]
    	at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:400) ~[na:na]
    	at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:71) ~[na:na]
    	at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:33) ~[na:na]
    	at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480) ~  [na:na]
    	at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.  java:319) ~[na:na]
    	at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1516) ~[na:na]
    	at com.fasterxml.jackson.databind.ObjectWriter._writeValueAndClose(ObjectWriter.java:1217) ~[na:na]
    	at com.fasterxml.jackson.databind.ObjectWriter.writeValueAsBytes(ObjectWriter.java:1110) ~[na:na]
    	at org.springframework.kafka.support.serializer.JsonSerializer.serialize(JsonSerializer.java:195) ~[com.  mycompany.producerapi.ProducerApiApplication:2.6.7]
    	at org.springframework.kafka.support.serializer.JsonSerializer.serialize(JsonSerializer.java:185) ~[com.  mycompany.producerapi.ProducerApiApplication:2.6.7]
    	at org.apache.kafka.clients.producer.KafkaProducer.doSend(KafkaProducer.java:910) ~[na:na]
    	at org.apache.kafka.clients.producer.KafkaProducer.send(KafkaProducer.java:870) ~[na:na]
    	at org.springframework.kafka.core.DefaultKafkaProducerFactory$CloseSafeProducer.send(DefaultKafkaProducerFactory.  java:862) ~[na:na]
    	at org.springframework.kafka.core.KafkaTemplate.doSend(KafkaTemplate.java:563) ~[com.mycompany.producerapi.  ProducerApiApplication:2.6.7]
    	at org.springframework.kafka.core.KafkaTemplate.send(KafkaTemplate.java:369) ~[com.mycompany.producerapi.  ProducerApiApplication:2.6.7]
    	at com.mycompany.producerapi.kafka.NewsProducer.send(NewsProducer.java:24) ~[com.mycompany.producerapi.  ProducerApiApplication:na]
    	at com.mycompany.producerapi.rest.NewsController.publishNews(NewsController.java:29) ~[com.mycompany.producerapi.  ProducerApiApplication:na]
    	at java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
    	at org.springframework.web.reactive.result.method.InvocableHandlerMethod.lambda$invoke$0(InvocableHandlerMethod.  java:146) ~[na:na]
    	at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:125) ~[com.mycompany.producerapi.  ProducerApiApplication:3.4.4]
    	at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1815) ~[com.mycompany.producerapi.  ProducerApiApplication:3.4.4]
    	at reactor.core.publisher.MonoZip$ZipCoordinator.signal(MonoZip.java:251) ~[com.mycompany.producerapi.  ProducerApiApplication:3.4.4]
    	at reactor.core.publisher.MonoZip$ZipInner.onNext(MonoZip.java:336) ~[com.mycompany.producerapi.  ProducerApiApplication:3.4.4]
    	at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onNext(MonoPeekTerminal.java:180) ~[na:na]
    	at reactor.core.publisher.FluxDefaultIfEmpty$DefaultIfEmptySubscriber.onNext(FluxDefaultIfEmpty.java:100) ~  [na:na]
    	at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:73) ~[na:na]
    	at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79) ~[na:na]
    	at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1815) ~[com.mycompany.producerapi.  ProducerApiApplication:3.4.4]
    	at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:151) ~[com.mycompany.producerapi.  ProducerApiApplication:3.4.4]
    	at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onNext(FluxContextWrite.java:107) ~[na:na]
    	at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onNext(FluxMapFuseable.java:295) ~  [na:na]
    	at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.onNext(FluxFilterFuseable.  java:337) ~[na:na]
    	at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1815) ~[com.mycompany.producerapi.  ProducerApiApplication:3.4.4]
    	at reactor.core.publisher.MonoCollect$CollectSubscriber.onComplete(MonoCollect.java:159) ~[na:na]
    	at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:142) ~[na:na]
    	at reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:259) ~[na:na]
    	at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:142) ~[na:na]
    	at reactor.netty.channel.FluxReceive.onInboundComplete(FluxReceive.java:401) ~[com.mycompany.producerapi.  ProducerApiApplication:1.0.5]
    	at reactor.netty.channel.ChannelOperations.onInboundComplete(ChannelOperations.java:416) ~[com.mycompany.  producerapi.ProducerApiApplication:1.0.5]
    	at reactor.netty.http.server.HttpServerOperations.onInboundNext(HttpServerOperations.java:556) ~[na:na]
    	at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:94) ~[na:na]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~  [na:na]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~  [na:na]
    	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~  [na:na]
    	at reactor.netty.http.server.HttpTrafficHandler.channelRead(HttpTrafficHandler.java:253) ~[na:na]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~  [na:na]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~  [na:na]
    	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~  [na:na]
    	at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead  (CombinedChannelDuplexHandler.java:436) ~[na:na]
    	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) ~[na:na]
    	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296) ~[na:na]
    	at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251) ~[na:na]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~  [na:na]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~  [na:na]
    	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~  [na:na]
    	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[na:na]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~  [na:na]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~  [na:na]
    	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[na:na]
    	at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) ~[na:na]
    	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719) ~[na:na]
    	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655) ~[na:na]
    	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581) ~[na:na]
    	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) ~[na:na]
    	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[na:na]
    	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[na:na]
    	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[na:na]
    	at java.lang.Thread.run(Thread.java:834) ~[na:na]
    	at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:519) ~[na:na]
    	at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:192) ~[na:na]
    
    type: compatibility 
    opened by ivangfr 22
  • Add spring-cloud-openfeign support

    Add spring-cloud-openfeign support

    spring-boot: 2.4.5 spring-native: 0.9.2 when I ran my app's image after gradle bootBuildImage I got the following errors: ( no errors before spring-native integrated)

    org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [org.springframework.cloud.openfeign.loadbalancer.FeignLoadBalancerAutoConfiguration]; nested exception is java.lang.IllegalArgumentException: Coul d not find class [org.springframework.cloud.openfeign.HttpClient5DisabledConditions] at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:610) ~[na:na] at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:311) ~[na:na] at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:250) ~[na:na] at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:600) ~[na:na] at org.springframework.context.annotation.ConfigurationClassParser.access$800(ConfigurationClassParser.java:111) ~[na:na] at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.lambda$processGroupImports$1(ConfigurationClassParser.java:812) ~[na:na] at java.util.ArrayList.forEach(ArrayList.java:1541) ~[au.com.nab.smartchoice.SmartChoiceApplication:na] at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.processGroupImports(ConfigurationClassParser.java:809) ~[na:na] at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorHandler.process(ConfigurationClassParser.java:780) ~[na:na] at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:193) ~[na:na] at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:331) ~[au.com.nab.smartchoice.SmartChoiceApplication:5.3.6] at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:247) ~[au.com.nab.smartchoice.SmartChoiceApplication:5.3.6] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:311) ~[na:na] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:112) ~[na:na] at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746) ~[na:na] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564) ~[na:na] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) ~[na:na] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:782) ~[au.com.nab.smartchoice.SmartChoiceApplication:2.4.5] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:774) ~[au.com.nab.smartchoice.SmartChoiceApplication:2.4.5] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) ~[au.com.nab.smartchoice.SmartChoiceApplication:2.4.5] at org.springframework.boot.SpringApplication.run(SpringApplication.java:339) ~[au.com.nab.smartchoice.SmartChoiceApplication:2.4.5] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1340) ~[au.com.nab.smartchoice.SmartChoiceApplication:2.4.5] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1329) ~[au.com.nab.smartchoice.SmartChoiceApplication:2.4.5] at au.com.nab.smartchoice.SmartChoiceApplication.main(SmartChoiceApplication.java:12) ~[au.com.nab.smartchoice.SmartChoiceApplication:na] Caused by: java.lang.IllegalArgumentException: Could not find class [org.springframework.cloud.openfeign.HttpClient5DisabledConditions] at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:334) ~[na:na] at org.springframework.context.annotation.ConditionEvaluator.getCondition(ConditionEvaluator.java:124) ~[na:na] at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:96) ~[na:na] at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:226) ~[na:na] at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:600) ~[na:na] ... 23 common frames omitted Caused by: java.lang.ClassNotFoundException: org.springframework.cloud.openfeign.HttpClient5DisabledConditions at com.oracle.svm.core.hub.ClassForNameSupport.forName(ClassForNameSupport.java:60) ~[na:na] at java.lang.Class.forName(DynamicHub.java:1260) ~[na:na] at org.springframework.util.ClassUtils.forName(ClassUtils.java:284) ~[na:na] at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:324) ~[na:na] ... 27 common frames omitted

    Hope it will be fixed soon :)

    type: compatibility status: declined for: external-project 
    opened by nightlonely7 21
  • More actuator optimizations

    More actuator optimizations

    Despite our effort to modularize and optimize actuator hints in our 0.8.0 milestone, adding actuator on a Spring Boot + Spring MVC @Controller + Tomcat + Jackson increase RSS memory by 34M of RSS (97M with, 63M without). This is a lot especially when we think that most users just want their default web endpoints.

    I think there are multiple things to explore here in order to find the best way how to optimize this:

    • @dsyer How much using spring-init functional configuration decrease the footprint? How much remaining hints required after?
    • @bclozel What is the footprint gain with your functional actuator branch? How much remaining hints when used with spring-init?
    • @snicoll @wilkinsona Could it be possible to ship less infra on Spring Boot side by default?
    type: optimization 
    opened by sdeleuze 21
Releases(0.12.2)
  • 0.12.2(Jan 3, 2023)

    :star: Compatibility

    • Add PerConnectionLRUFactory for MySQL JDBC driver #1684

    :lady_beetle: Bug Fixes

    • @Order doesnt work with native build #1694

    :notebook_with_decorative_cover: Documentation

    • Add note to docs that mentions that the project is superseded #1742

    :hammer: Dependency Upgrades

    • Fix Spring Boot 2.7.6+ compatiblity #1740

    :heart: Contributors

    We'd like to thank all the contributors who worked on this release!

    Source code(tar.gz)
    Source code(zip)
  • 0.12.1(Jul 13, 2022)

    :star: New Features

    • Add hint for Sleuth R2dbcTransactionManager instrumentation #1663

    :star: Compatibility

    • Add R2DBC PostgreSQL support #1626
    • Add support for EntityGraph #1619
    • Missing reflection entries for com.zaxxer.hikari.HikariDataSource #1599

    :lady_beetle: Bug Fixes

    • InitializationHint for build time initialization of class not recognized #1660
    • Regression in (Simple)ClientHttpRequestFactory concerning Nativehints #1636
    • Do not set native image system property in NativeListener #1625
    • jdbc-tx tests don't work with GraalVM 22.1 #1584
    • AOP do not support '*' on class field with execution pointcut designator #1580

    :notebook_with_decorative_cover: Documentation

    • Document how to use an alternative native image toolkit #1623

    :hammer: Dependency Upgrades

    • Upgrade to Native Build Tools 0.9.13 #1638
    • Upgrade to Spring Boot 2.7.1 #1637

    :heart: Contributors

    We'd like to thank all the contributors who worked on this release!

    Source code(tar.gz)
    Source code(zip)
  • 0.12.0(May 30, 2022)

    :star: Compatibility

    • Fix session-redis-webflux and session-without-security samples with GraalVM 22.1 #1588
    • Update Batch schemas #1573

    :lady_beetle: Bug Fixes

    • Devtools developmentOnly dependency breaks AOT generation with Gradle #1579
    • The filename or extension is too long #1567

    :notebook_with_decorative_cover: Documentation

    • Fixes the broken link and outdated plugin name #1583

    :hammer: Dependency Upgrades

    • Update GraalVM to 22.1.0 #1621
    • Upgrade to Spring Boot 2.7.0 #1541
    • Upgrade to Spring Cloud 2021.0.3 #1606

    :heart: Contributors

    We'd like to thank all the contributors who worked on this release!

    Source code(tar.gz)
    Source code(zip)
  • 0.11.5(May 10, 2022)

  • 0.11.4(Apr 6, 2022)

    :star: Compatibility

    • Support native hints on application class for native tests #1572
    • Native-tests are broken with GraalVM 22.1 #1561
    • webmvc-kotlin fails with GraalVM 22.1 #1556
    • webflux-kotlin fails with GraalVM 22.1 #1555
    • session-redis-webflux fails with GraalVM 22.1 #1554
    • events fails with GraalVM 22.1 #1551
    • data-r2dbc-kotlin fails with GraalVM 22.1 #1549
    • commandlinerunner-log4j2 fails with GraalVM 22.1 #1547
    • cloud-function-netty fails with GraalVM 22.1 #1546
    • grpc sample fails with GraalVM 22.1 #1543
    • GraalVM for Apple Silicon: management.metrics.distribution error #1538
    • Add Jackson PropertyNamingStrategies hint #1537
    • Spring Native 0.11.3 + Latest Spring Data JPA and Sleuth Zipkin breaks during Bootstrap #1524
    • Spring Security - AuthenticationFailureBadCredentialsEvent has no suitable constructor #1521
    • Spring security method missing hint #1518

    :lady_beetle: Bug Fixes

    • Spring Aot Maven Plugin does not work with Maven Compiler Plugin > 3.8.1 #1559
    • Reloading a Gradle project in IntelliJ causes the generated AOT sources to be deleted #1552
    • Ambiguous check only applied to constructors #1530
    • Excutable with factory method is not detected if argument value has unresolved generics #1527
    • @ConfigurationProperties with @Validated on a record - native build still fails even in 0.11.3 #1522
    • ASM visitors should use SpringAsmInfo.ASM_VERSION rather than hard-coded ASM version #1515
    • Class com.ecwid.consul.v1.kv.model.GetValue is instantiated reflectively but was never registered #1430

    :notebook_with_decorative_cover: Documentation

    • Remove programmatic Logback configuration documentation #1533

    :hammer: Dependency Upgrades

    • Upgrade to Native Build Tools 0.9.11 #1499
    • Upgrade to Spring Boot 2.6.6 #1566

    :heart: Contributors

    We'd like to thank all the contributors who worked on this release!

    Source code(tar.gz)
    Source code(zip)
  • 0.11.3(Mar 1, 2022)

    :star: New Features

    • Refine Spring Data repositories triggers #1504
    • Add suport for ManagedList and ManagedSet #1483
    • Support "args" param in "@SpringBootTest" #1447

    :star: Compatibility

    • Update FunctionHints with additional hints required by s-c-function #1497
    • Add missing hints for HdrHistogram #1484
    • spring-aot-test: Include test with multiple Extend or Nested #1474
    • JPA : antlr error with @ElementCollection @OrderBy #1473
    • Refine support for kotlinx.serialization when reflection is involved #1410
    • ErrorAttributes serialization exception #1084

    :lady_beetle: Bug Fixes

    • Allow using custom text banner #1501
    • Cannot find DefaultPersistenceUnitManager #1500
    • Regression on Spring Data Elasticsearch #1492
    • Refine implicit @ConfigurationProperties handling with records #1491
    • Support @SpringBootConfiguration #1490
    • SimpleMongoRepository - No suitable constructor found #1487
    • Inner bean definition's beanClass may not be resolved and generated with Object rather than the target type #1481
    • Circular depends-on relationship with Flyway and Liquibase #1480
    • gradle generateAot task failed Cannot subclass primitive, array or final types class java.lang.String #969

    :notebook_with_decorative_cover: Documentation

    • Document Spring Boot substitutions #1475

    :hammer: Dependency Upgrades

    • Upgrade to GraalVM 22.0 #1448
    • Upgrade to native build tools 0.9.10 #1495
    • Upgrade to Spring Boot 2.6.4 #1489
    • Upgrade to Spring Cloud 2021.0.1 #1512

    :heart: Contributors

    We'd like to thank all the contributors who worked on this release!

    Source code(tar.gz)
    Source code(zip)
  • 0.10.6(Jan 28, 2022)

    :star: Compatibility

    • Backport #1388 to fix Netty native build failure #1444
    • New sample for Spring Cloud Stream RabbitMQ Binder #1207
    • Native reflection configuration for brave.kafka.clients.TracingProducer is missing #1138

    :lady_beetle: Bug Fixes

    • Fix DatabaseInitializationDependencyConfigurer$DependsOnDatabaseInitializationPostProcessor error #1468
    • Invalid root directory #1209

    :notebook_with_decorative_cover: Documentation

    • Corrected incorrect docker image name that is generated under asciidoc #1225

    :hammer: Dependency Upgrades

    • Upgrade to GraalVM 21.3.0 #1472
    • Upgrade to Spring Boot 2.5.9 #1443

    :heart: Contributors

    We'd like to thank all the contributors who worked on this release!

    Source code(tar.gz)
    Source code(zip)
  • 0.11.2(Jan 25, 2022)

    :star: New Features

    • Skip Maven AOT test sources generation when tests are skipped #1461
    • Sort the factories in "spring.factories" #1424
    • Fix factory name with spaces in "spring.factories" #1421
    • Properly disable devtools in AOT mode #1419
    • Provide meaningful error message when logback.xml is detected #1415
    • Provide a way to execute tests with regular code path (not AOT one) #1356
    • Allow to not invoke the test aot task with Gradle #1338

    :star: Compatibility

    • data-jpa sample native image won't start with @EnableJpaRepositories #1405
    • Throw AnnotationException show that has no persistent id property #1397
    • Add Coroutines reflection inference #769

    :star: Optimizations

    • Review Spring Security hints for servlet #1392

    :lady_beetle: Bug Fixes

    • Prepend AOT jar to classpath for bootJar Gradle task #1466
    • dependsOn attribute lost in AOT generated bean registration #1458
    • StackOverflowError when scanning hints for ConfigurationProperties with cross references #1420
    • RefreshScope beans are created albeit the feature being disabled explicitly #1413
    • ConstructorArgumentValues should only be assigned when indexed argument values are present #1403
    • ResolvableType - java.lang.IllegalArgumentException: Mismatched number of generics specified #1401
    • NPE during AOT generation when @ConfigurationProperties contains generic property #1396
    • Refine TypeModelProcessor class filtering and error handling #1376
    • Regression in ClientHttpRequestFactoryHints #1370
    • Runtime dependencies imported in ContextBootstrapInitializer code cause IDE compilation issues #1093

    :notebook_with_decorative_cover: Documentation

    • Improve AOT and build setup documentation structure #1467
    • Document that running application is broken in IDEA when delegated to Gradle #1465
    • java.lang.IllegalStateException: Multiple privileged packages #1414
    • Document that -parameters javac flag is mandatory with native #1412
    • Document that beans defined in a profile aren't picked at runtime unless the profile is enabled when AOT runs #1411
    • Improve Windows support documentation #1319

    :hammer: Dependency Upgrades

    • Upgrade GRPC to 1.43.2 and protobuf to 3.19.2 #1433
    • Upgrade to Kotlin 1.6.10 #1437
    • Upgrade to Spring Boot 2.6.3 #1441

    :heart: Contributors

    We'd like to thank all the contributors who worked on this release!

    Source code(tar.gz)
    Source code(zip)
  • 0.11.1(Dec 22, 2021)

    :star: New Features

    • "AOT mode enabled" logs printed in Spring-native 0.11.0.jar cannot be masked #1390
    • Provide more context when a bean definition could not be processed #1385

    :star: Compatibility

    • Netty native build failure #1388
    • Please add a @TypeHint for JwtDecoder.class for Spring Security's hints #1377
    • Refine @EnableJpaRepositories support #1368

    :star: Optimizations

    • Remove method reflection config from WebMvcHints #1393
    • Avoid java.lang.Object declared method reflection entries #1391

    :lady_beetle: Bug Fixes

    • @EventListener annotations on @Configuration classes seems to fail compilation #1373
    • FunctionTypeProcessor is not registered properly in META-INF/spring.factories #1363
    • MockitoPostProcessor should be disabled in AOT since not supported yet #1343

    :notebook_with_decorative_cover: Documentation

    • Fix gradle bootRun AOT documentation #1394
    • Gradle nativeBuild does not with Bellsoft Liberica NIK SDK #1381

    :hammer: Dependency Upgrades

    • Upgrade to Spring Boot 2.6.2 #1387

    :heart: Contributors

    We'd like to thank all the contributors who worked on this release!

    Source code(tar.gz)
    Source code(zip)
  • 0.11.0(Dec 9, 2021)

    Upgrading from Spring Native 0.10

    • GraalVM 21.3, Spring Boot 2.6 and Spring Cloud 2021.0 should be used as baselines.
    • Java 8 is not supported anymore on GraalVM side, so it is not supported anymore on Spring Native side as well. But you will likely be able to compile most Java 8 applications with the Java 11 flavor of GraalVM.
    • Please read the updated AOT engine documentation to understand how it behaves.
    • Less hints are now required, for example those with import selector or condition trigger should be updated to use other ones.
    • Hints with a trigger are now taken in account if the specified class is reachable by GraalVM static analysis, not just with a classpath check, except for annotations where the classpath check is still used.
    • Native Build Tools configuration has evolved since the version used in now 0.9.8.
    • Maven plugin now requires <extensions>true</extensions> and a dependency on org.junit.platform:unit-platform-launcher, see this documentation for more details.
    • Gradle plugin is now automatically imported and configured when using the AOT plugin, so by default no need for additional configuration anymore.
    • AccessBits is now deprecated and TypeAccess[] is used instead to specify @TypeHint access.
    • @TypeHint access default is now AUTO_DETECT so field and methods reflection are not configured for classes by default anymore.
    • NativeConfiguration SPI has been reworked to not use anymore the now deprecated TypeSystem.
    • Extension points are now using META-INF/spring.factories instead of service loader to be discovered.
    • ComponentProcessor extension point has been removed and should be replaced by BeanFactoryNativeConfigurationProcessor or BeanNativeConfigurationProcessor.
    • Spring libraries using child application context (like Spring Cloud LoadBalancer) are not supported yet with the new AOT engine.
    • Spring Cloud Bootstrap is no longer supported.
    • FunctionalSpringApplication is no longer supported.
    • While building a project that contains Spring Cloud Config Client, it is necessary to make sure that the configuration data source that it connects to (such as, Spring Cloud Config Server, Consul, Zookeeper, Vault, etc.) is available. For example, if you retrieve configuration data from Spring Cloud Config Server, make sure you have its instance running and available at the port indicated in the Config Client setup. This is necessary because the application context is being optimized at build time and requires the target environment to be resolved.
    • Spring Cloud Function reflection configuration is now inferred so related hints can be removed.
    • Spring AOT is now a forked process, in order to debug it, follow related documentation.

    Changelog

    In addition to the 0.11.0 changelog below, make sure to check 0.11.0-M1, 0.11.0-M2 and 0.11.0-RC1 ones to get a complete overview of the changes since Spring Native 0.10.

    :star: New Features

    • Provide implementation of BeanFactoryNativeConfigurationProcessor for function types #1351
    • Provide an SPI to exclude a bean definition to be written #1349
    • Avoid creating reflection entries for java and primitive types. #1346
    • Do not apply AOT plugin on POM projects #1344
    • Use Flag renamed to TypeAccess instead of AccessBits in @TypeHint #1317
    • Add logging to BeanDefinitionRegistrar #1306
    • Use NativeConfigurationRegistry in NativeConfiguration #1279
    • Add support for non Spring Boot tests #1170
    • Restore Spring Integration support #1134
    • Add support for Spring Data MongoDB (lazy loading) DocumentReference annotation. #875

    :star: Compatibility

    • Register reflection configuration for JPA AttributeConverter implementations #1347
    • Method signature types for methods of javax.persistence.AttributeConverter no longer included in configuration. #1329
    • Regression on OAuth2 client and resource server with WebFlux #1291
    • RestController with Annotations at the Service Interface is not working in native Mode #955
    • Infer @AotProxyHint for @Scope beans #928
    • Add preliminary Spring Batch support #203

    :star: Optimizations

    :lady_beetle: Bug Fixes

    • Wrong test context can be inferred in a native mage leading to a ClassCastException #1353
    • Bean post processors should not be registered at build-time #1345
    • Fix MergedContextConfiguration cache key for runtime contexts #1341
    • Refine HateoasHints to generate a more focused reflection configuration #1340
    • Prevent printing "AOT mode disabled" during test code generation #1332
    • Missing hint for org.hibernate.cfg.beanvalidation.TypeSafeActivator #1331
    • Spring Data Repository with unresolved generics cannot be injected anymore #1324
    • StackOverflow in ProtectedAccessAnalyzer.analyze(...) #1323
    • Populate properly AotOptions in GenerateTestBootstrapCommand #1321
    • Only @Component are considered for method security processing #1314
    • AOT test code gen fails when same name test classes exist in different package #1313
    • Generate Avro types for all @KafkaListener-annotated beans #1310
    • Only @Component are considered for JPA configuration processing #1297
    • Fail to inject to a parameterized type with FactoryBean #1292
    • Adding two methods with the same name lead to duplicated method names in generated code #1266
    • Regex characters are not escaped properly for pattern resources #1193

    :notebook_with_decorative_cover: Documentation

    • Add Javadoc for classes used for adding native configurations #1361
    • Revisit Spring AOT section #1358
    • Update documentation for Bellsoft Liberica NIK usage #1357
    • Refine Logback XML support documentation #1303
    • Update support section of the reference guide #1287

    :hammer: Dependency Upgrades

    • Upgrade to Native Build Tools 0.9.8 #1290
    • Upgrade to Spring Boot 2.6.1 #1301
    • Upgrade to Spring Cloud 2021.0.0 #1342

    :heart: Contributors

    We'd like to thank all the contributors who worked on this release!

    Source code(tar.gz)
    Source code(zip)
  • 0.11.0-RC1(Nov 19, 2021)

    This release, among a lot of bug fixes and improvements, bring back testing with the new AOT engine and leverages Spring Boot 2.6.0, see the reference documentation for more details.

    :star: New Features

    • Infer reflection configuration for TestContextBootstrapper implementations #1270
    • Dynamically replace DITEL with AotDependencyInjectionTestExecutionListener #1264
    • Provide more context when InitDestroyMethodsDiscoverer fails to discover a defined method #1263
    • Extract SpringTestHints from the existing SpringBootTestHints #1249
    • Optimize reflection hints and inference #1246
    • Add infrastructure to contribute native reflection configuration for generated code #1239
    • Limit use of MergedContextConfiguration at runtime #1232
    • Enhance constructor resolution with use of SpEL #1229
    • Introduce native hints for AssertJ #1223
    • Revise scope of SpringBootTestHints #1221
    • Support AOT-based autowiring for test class instances #1169
    • Add support for FactoryBean that specify the target type using FactoryBean.OBJECT_TYPE_ATTRIBUTE #1155
    • AOT engine does not process Actuator child context #1146
    • Refine default access attribute defined on @TypeHint #1123
    • Improve transactional proxy detection to generate needed proxy hints #933
    • Add AOT processing for ApplicationContexts used in tests #911

    :star: Compatibility

    • Fix session-redis-webflux unit tests on native #1283
    • Fix caches actuator endpoint #1200
    • Migrate remaining ComponentProcessor to BeanFactoryNativeConfigurationProcessor #1130

    :lady_beetle: Bug Fixes

    • Running native tests using "mvn -Pnative test" fails with "No processor found" #1282
    • Native reflection configuration for fields are not detected when the bean type is a cglib proxy #1273
    • Gradle plugin adds generated sources JAR to end of the test classpath #1272
    • BeanInstanceExecutableSupplier does not detect factory method when target type is set to the type it produces #1269
    • NativeConfigurationRegistry registers reflection configuration against the cglib proxy rather than user class #1267
    • AotDependencyInjectionTestExecutionListener fails to run with vanilla Boot tests #1258
    • LinkedHashSet.() method not found #1257
    • Calls to beanFactory.getType() can return null and are not properly guarded #1255
    • Skip Maven AOT test generation when there is no test #1253
    • PrimaryDefaultValidatorPostProcessor triggered at different time with AOT leads to incomplete Validator bean definition #1243
    • Filter ContextCustomizerFactory implementations that are only necessary at build time #1242
    • NullPointerException at ConfigurationPropertiesNativeConfigurationProcessor #1240
    • Reflection hints are missing for loading test contexts #1235
    • Refine support for custom application class #1226
    • List of inner bean definition as property values are not supported #1219
    • NPE harvesting property with no write method #1218
    • TestExecutionListeners are not loaded in native image #1217
    • Invoke BeanDefinitionRegistryPostProcessors at build time #1213

    :notebook_with_decorative_cover: Documentation

    • Bring back native testing documentation #1288
    • Document expectations of the AOT engine #1278
    • Document --exclude-config native-image option #1230

    :hammer: Dependency Upgrades

    • Upgrade to Spring Boot 2.6.0 #1197
    • Upgrade to Spring Cloud 2021.0.0-RC1 #1277

    :heart: Contributors

    We'd like to thank all the contributors who worked on this release!

    Source code(tar.gz)
    Source code(zip)
  • 0.11.0-M2(Nov 3, 2021)

    Introduces GraalVM 21.3 and Java 17 support.

    Please note that this second milestone does not support testing yet, and should be used with Spring Boot 2.6.0-RC1 and Spring Cloud 2021.0.0-M3, see the reference documentation for more details.

    :star: New Features

    • Contribute resources from AOT test bootstrap generation #1192
    • Add support for multiple BootstrapWriterContext #1188
    • Support Aware callbacks for bean registration #1187
    • Run JVM tests with AOT generated context #1186
    • Enable HTTP and HTTPS when web client beans are detected #1185
    • Add hints for HealthContributors #1184
    • Transition SpringDataComponentProcessor to BeanFactoryNativeConfigurationProcessor #1164
    • Detect Spring-related test classes and trigger contexts generation #1163
    • Add AOT infrastructure for tests #1162
    • Add support for writing multiple contexts using the generator #1161
    • Distinguish between invoked and queried reflection methods #1156
    • Add support for writing Map parameter type #1153
    • Apply fallback for Classes defined as FQN #1140
    • Add support for lazy bean initialization #1131
    • Leverage conditional configuration #1021

    :star: Compatibility

    • Add a workaround for NoClassDefFoundError: sun.management.Util with Java 17 #1198
    • RabbitMQ : Missing proxy for SimpleMessageListenerContainer #1179
    • Add support for mapping annotations on interfaces #1175
    • Add BeforeConvertCallback for DataJdbcHints. #1166
    • Refine static resources hints #1160
    • @Controller annotated class causes "Class proxy missing at runtime, hint required at build time" #1003
    • Have better out of the box support for logback #895

    :lady_beetle: Bug Fixes

    • Fix data-mongodb sample failure #1191
    • Missing hints for health indicators #1183
    • Nested namespaces for ConfigurationProperties are not available in native image #1181
    • Hint missing for Actuator endpoint filters #1173
    • Handle null parameter value #1149
    • Externally managed private methods are not handled properly as they contain the fqn of the declaring class #1135
    • Revisit generated sources contribution in Gradle plugin #922

    :notebook_with_decorative_cover: Documentation

    • Update documentation/samples to exclude micrometer-core when metrics are not needed #1157

    :hammer: Dependency Upgrades

    • Upgrade to GraalVM 21.3.0 #852
    • Upgrade to native build tools 0.9.5 #1031
    • Upgrade to Native Build Tools 0.9.7.1 #1206
    • Upgrade to Spring Boot 2.6.0-RC1 #1128
    • Upgrade to Spring Cloud 2021.0.0-M3 #1165

    :heart: Contributors

    We'd like to thank all the contributors who worked on this release!

    Source code(tar.gz)
    Source code(zip)
  • 0.10.5(Oct 28, 2021)

    :lady_beetle: Bug Fixes

    • Static resources don't work in native image anymore #1174
    • Detected an instance of Random/SplittableRandom error in spring-websocket sample #1034

    :notebook_with_decorative_cover: Documentation

    • Add dedicated documentation when dependency management is required #1190

    :hammer: Dependency Upgrades

    • Upgrade to Native Build Tools 0.9.4 #1196
    • Upgrade to Spring Boot 2.5.6 #1194
    • Upgrade to Spring Cloud 2020.0.4 #1195
    Source code(tar.gz)
    Source code(zip)
  • 0.11.0-M1(Oct 5, 2021)

    This first milestone is an opportunity for the team to receive feedback on the new Ahead-Of-Time Engine. The AOT engine generates at build time an optimized equivalent of the ApplicationContext, leading to faster build time and lower runtime memory footprint.

    We expect this new approach to provide better compatibility, so please provide feedback if you see regressions on supported libraries.

    Please note that this first milestone does not support testing yet, and should be used with Spring Boot 2.6.0-M3 and Spring Cloud 2021.0.0-M2, see the reference documentation for more details.

    :star: New Features

    • Bring back native-agent mode #1125
    • No need for FunctionalSpringApplication anymore #1120
    • Modifying SpringApplication on the fly #1099
    • Handle init callbacks #1059
    • Generate reflection metadata for Configuration Properties sub-namespace #1052
    • Handle destroy callback #1048
    • Allow to build samples only in JVM AOT mode without native #1043
    • Introduce contract for identifying the need for reflection and resources in native images #1028
    • Generate reflection and resources entries for bean definitions automatically #1023
    • Update AOT remote debug option in maven plugin #1011
    • Replace NativeListener by proper AOT implementation #988
    • Add support for PropertyValue #980
    • Leverage Gradle debug options for codeGenDebugPort #978
    • Add codeGenDebugPort property to debug Spring AOT plugins #972
    • Support for Gradle toolchains in Spring AOT Gradle plugin #958
    • Remove the need for SpringAotApplication #943
    • Configure properly Spring AOT log level defined in the plugin #942
    • Remove reflection config for classes instantiated programmatically in StaticSpringFactories #931

    :star: Compatibility

    • Please add type hints for Reactor's Traces class #1098
    • Update reflection config for the data-rest sample. #1086
    • Fix hints for r2dbc and guard hint processor against ClassNotFoundException. #1044
    • Spring Cloud Square #891
    • Failed to add additional Message Converters from child context #816
    • Runtime exception when setting @EnableMongoAuditing #445

    :star: Optimizations

    • Allow BeanUtils#instantiateClass inlining #834

    :lady_beetle: Bug Fixes

    • InitDestroyBeanPostProcessor should not handle AutoCloseable explicitly #1124
    • Reflection hint declared on bean definition type are not usable on bean implementation #1121
    • Lifecycle methods hints are not defined properly if the method is defined in a parent #1108
    • Append context initializers in aot mode #1100
    • Wrong org.springframework.boot version is being resolved #1095
    • EventListener registration does not work with package private annotated types #1089
    • ImportAware links are being called inconsistently #1079
    • Spring AOT Plugin crashes in project with module-info.java #1066
    • Building a sample with --aot-only does not detect an application startup failure #1054
    • spring.main.web-application-type is not detected consistently #1053
    • Fix native hint trigger for reactive-/auditing configuration. #1039
    • Creator detection does not take collection and array types into account #1036
    • Unable to detect constructor with multiple matches #1035
    • Runtime exception causes HTTP 404 status in native 0.11 #1029
    • Reflection metadata is not considered for inner bean definitions #1026
    • Differentiate main and application classes #1024
    • Redirect logs from AOT processing #1020
    • Avoid ambiguous calls to BeanDefinitionRegistrar#instanceSupplier #1018
    • AOT generates ambiguous calls to constructors #1017
    • Bean definitions with several constructors and constructor arguments cannot be instantiated #1015
    • Lifecycle of bean instantiation is not the same as regular runtime context #1014
    • Retain FactoryMethod metadata link in generated BeanDefinition #1001
    • Fix broken gradle bootBuildImage #1000
    • Add reflection configuration for Actuator endpoints #999
    • Populate correctly the environment in BootstrapCodeGenerator #992
    • Pass the AOT options from the plugin to BootstrapCodeGeneratorRunner #989
    • Add scoped beans support #981
    • Add ByteBuddy to the classpath of maven code generation process #971
    • ConditionsEvaluator should tolerate a null BeanRegistry #953
    • Fix maven plugin test-generate in 0.11.x #951
    • Fix non-static nested classes support #925
    • AOT plugin picks up dependencies from Gradle buildSrc #627

    :notebook_with_decorative_cover: Documentation

    • "Freeze GraalVM Version" section in documentation uses an older, incompatible version of GraalVM #1129
    • Add note on Config Client support. #1107
    • Update Spring Cloud support docs. #1081

    :hammer: Dependency Upgrades

    • Upgrade to ASM 9.2 #1092
    • Upgrade to Spring Boot 2.6.0-M3 #853
    • Upgrade to Spring Cloud 2021.0.0-M2 #1127

    :heart: Contributors

    We'd like to thank all the contributors who worked on this release!

    Source code(tar.gz)
    Source code(zip)
  • 0.10.4(Sep 28, 2021)

    :star: Compatibility

    • Hateoas compatibility issue for DTOs decorated with @Relation #1037
    • Add MariaDB hints #1025
    • Add more support with Spring for Apache Kafka #921
    • Support for @EntityListeners #869

    :lady_beetle: Bug Fixes

    • Fix AOT NPE with hateoas-starter and void controller methods #1038
    • Allow Netty reflection to fix RSS memory usage with Java 11 #739

    :notebook_with_decorative_cover: Documentation

    • Improve the tracing agent documentation #1047

    :hammer: Dependency Upgrades

    • Upgrade to Spring Boot 2.5.5 #1074

    :heart: Contributors

    We'd like to thank all the contributors who worked on this release!

    Source code(tar.gz)
    Source code(zip)
  • 0.10.3(Aug 20, 2021)

    The native build tools configuration with Gradle has changed, check the related documentation to update your project when upgrading.

    :star: Compatibility

    • Refine web hints #974
    • setConnectionTimeout on RestTemplateBuilder is not Working #954

    :lady_beetle: Bug Fixes

    • Project not building any-more with spring-aot-maven-plugin 0.10.2 #967

    :notebook_with_decorative_cover: Documentation

    • Update nativeBuild/nativeTest configuration in samples and docs #948
    • Fix Gradle task name in sample README #946

    :hammer: Dependency Upgrades

    • Upgrade to native build tools 0.9.3 #917
    • Upgrade to Spring Boot 2.5.4 #977

    :heart: Contributors

    We'd like to thank all the contributors who worked on this release!

    Source code(tar.gz)
    Source code(zip)
  • 0.10.2(Jul 30, 2021)

    :star: New Features

    • Add configuration for Spring Data custom converters. #904
    • Allow TypeSystem to scan dependencies. #899
    • Enable exclusion of certain reflection entries during build #897
    • Add support for configurable main class in aot plugins #896
    • Avoid confusing message when using logback.xml #877

    :star: Compatibility

    • Add more Spring Integration native hints #894
    • native test run for petclinic-jdbc does not respect test profile #888
    • Spring Data Audit Not Working Even After 0.10.1 #882
    • Actuator @Endpoint registered @Bean is not available #881
    • @Scheduled method on class registered @Bean never gets called #880
    • Aspect on Repository not called #868
    • Update IntegrationHints.java #865
    • Tomcat logs into stdout #864
    • Proxies for @Validated components not prepared #861
    • Runtime exception when setting @EnableR2dbcAuditing #860
    • Proxy entries for annotations on interface not created #854
    • Add support for Spring Hateoas #333

    :beetle: Bug Fixes

    • Gradle plugin fails with unknown 'bootJar' task in multi-modules projects #940
    • Use target class version for proxy #932
    • Remove remaining suspicious static fields from Spring AOT #879
    • Gradle AOT plugin needs test task to pass to build native image #873
    • Spring Boot 2.5 + (Reactive) Web + Spring Native builds but fails to run on Cloud Foundry #870

    :notebook_with_decorative_cover: Documentation

    • Document how to customize Logback configuration programmatically #889
    • Fix typo #883

    :hammer: Dependency Upgrades

    • Upgrade to GraalVM 21.2.0 #664
    • Upgrade to native build tools 0.9.1 #871
    • Upgrade to Spring Boot 2.5.3 #906
    • Upgrade to Wavefront 2.2.0 #886

    :heart: Contributors

    We'd like to thank all the contributors who worked on this release!

    Source code(tar.gz)
    Source code(zip)
  • 0.10.1(Jun 28, 2021)

    :star: New Features

    • Automatically register class proxy hint for typical platform abstractions (async, transactions etc.) #826

    :star: Compatibility

    • Automatic nested condition handling doesn't work when conditions are at the method level #855
    • Hibernate validator emits warning #849
    • RequestPart hint missing #844
    • Create proper hints for AOP #841
    • Introduce proper hints for AOP #840
    • More advanced spring.factories key processing to address test issues #839
    • Added hint to support spring-integration-jdbc dependency. #831
    • Compatibility issues between aspectj and spring-native #649

    :star: Optimizations

    • HateoasHints should distinguish between interface and class proxies when computing method return types #824
    • Filter duplicate AotProxyDescriptor to create proxies only once. #822

    :beetle: Bug Fixes

    • Missing startup and mappings actuator endpoints #851
    • Ignore AOT code generated in Eclipse with Maven #825
    • Spring Native 0.10.0 bootBuildImage error, MongoDB DefaultDbRefResolver can't be loaded #823
    • Adding type hint with AccessBits.RESOURCE in NativeConfiguration#computeHints does not work #813
    • Problem occurs when adding to gradle plugin #800

    :notebook_with_decorative_cover: Documentation

    • Fixed Buildpack URL link #858
    • Update native image limitation page link #856
    • Adding Micrometer to supported projects #815

    :hammer: Dependency Upgrades

    • Upgrade to Spring Boot 2.5.2 #862

    :heart: Contributors

    We'd like to thank all the contributors who worked on this release!

    Source code(tar.gz)
    Source code(zip)
  • 0.10.0(Jun 14, 2021)

    Upgrade notes:

    • @ProxyHint has been renamed @JdkProxyHint.
    • The new Maven plugin coordinates are org.graalvm.buildtools:native-maven-plugin:0.9.0.

    :star: New Features

    • Add substitution for Spring Data MongoDB LazyLoadingProxies #811
    • Refine TypeProcessor - allow scanning TypeSystem without repeating filters. #797
    • Polish Maven Plugin parameters names #760
    • Handle Spring Boot layertools #708
    • Add some FailureAnalyzer for more hints to let end-users to know what should be done in case of Native errors #684
    • Try to solve the duplicated classpath issue and map Spring AOT to process-classes phase #675
    • build.sh should perform a native compilation on Gradle samples #599
    • Automatically configure via Spring AOT #529
    • Create proxies at build time #356
    • Support running JUnit 5 tests as native image #22

    :star: Compatibility

    • Exception when using spring.profiles.active #798
    • Add support for spring-cloud-sleuth-zipkin #780
    • Add support for AbstractClientHttpRequestFactoryWrapper in Spring Boot RestTemplate handling #779
    • Refine Spring HATEOAS hints. #772
    • Add support for @ConfigurationPropertiesScan #716
    • Support Spring Cloud Stream #693
    • Add initial Spring Session support #576
    • Add devtools support #532
    • Add Spring integration support #469
    • GraalJSEngineFactory was unintentionally initialized at build time error #398

    :beetle: Bug Fixes

    • Dependency injection from library #782
    • Activate verify by default with Maven and skip valid invocations on super method #770
    • Duplicate error when running gradle aotTestClasses #757
    • spring-data-mongo custom repository bean creation failure #744
    • Application not detected as started when spring-aot-maven-plugin is active #740
    • Missing the auto-configuration of CoroutineSortingRepository #643

    :notebook_with_decorative_cover: Documentation

    • Add Gradle build tools plugin documentation #814
    • Document properly Gradle tasks in Spring AOT refdoc #758
    • Document how to explicitly set GraalVM version with Buildpacks #755
    • Document -H:Log=registerResource:3 #746
    • Document how to use pack to create a container image from an executable JAR #738
    • Document how to generate a native image from Spring Boot executable JAR #736

    :hammer: Dependency Upgrades

    • Upgrade to GraalVM 21.1.0 #578
    • Upgrade to Spring Boot 2.5.1 #616
    • Upgrade to Spring Cloud 2020.0.3 #786

    :heart: Contributors

    We'd like to thank all the contributors who worked on this release!

    Source code(tar.gz)
    Source code(zip)
  • 0.9.2(Apr 16, 2021)

    :star: New Features

    • Nested classes in custom Condition implementations are not registered in the image #719
    • AOT plugin doesn't seem to generate reflective metadata to access autowired fields #682
    • Please support serialization-config.json #668
    • Domain types in controller return types missed when nested in generics #655
    • Proxy config not quite right if mixing typeNames and types in proxyhint #629

    :star: Compatibility

    • Fix and improve maintainability of Hibernate Validator support #732
    • Add missing Thymeleaf expression language hints #725
    • Hint for Kafka Consumer Proxies #697
    • Hibernate EnumType needs additional TypeHint #692
    • ClassNotFoundException on Apache Commons Pool at runtime #688
    • Add support for Avro serialization in Kafka #687
    • spring-boot-starter-thymeleaf: Missing Type Hint? #679
    • Add Quartz job scheduling engine support #670
    • Please update the resource pattern config to load all Spring Batch schema SQL DDL instead of just h2. #669
    • Add Hints for the Spring Cloud Task project. #667
    • AutowireCapableBeanFactory is not injecting beans via setters with @Autowired(required =false) #666
    • Web Server Still Starts with CommandLineRunner and spring.main.web-application-type=none #663
    • JPA custom query throws null #660
    • NoSuchMethodException: org.springframework.kafka.support.serializer.JsonSerializer.() #659
    • Vanilla project created from start.spring.io fails to start #657
    • Simple native Kotlin function app fails to start in Docker - Could not resolve matching constructor #652
    • Actuator prometheus endpoint not get registered #423
    • Add support for Spring Data REST #192

    :beetle: Bug Fixes

    • Regression: Unable to find class file for javax/servlet/http/HttpServlet #730
    • TypeSystem is reused across AOT processing runs #729
    • AOT does not filter ConditionalOnBean with multiple candidates #718
    • Add support for @RequestBody in WebComponentProcessor and update web samples accordingly #683
    • Compilation Error: org.springframework.cloud.sleuth.autoconfig._FactoryProvider issue #673
    • AOT plugin does not recognize static inner classes #671
    • Fix Spring Data custom repository fragment lookup. #661
    • failOnMissingSelectorHint missing in Maven plugin #654
    • Custom Spring Data Elasticsearch repository fragment implementation not found when running in native #639
    • Including Discovery Client Causes Failures For Native Application Images (Buildpack) #631

    :notebook_with_decorative_cover: Documentation

    • Improve Spring AOT debugging documentation #714
    • Improve guidelines for spring boot custom starters #710
    • Document RootBeanDefinition functional patterns #685
    • Document how to run/debug a Gradle application in IDEA #676

    :hammer: Dependency Upgrades

    • Upgrade GraalVM to 21.0.0.2 #737
    • Upgrade to Spring Boot 2.4.5 #715

    :heart: Contributors

    We'd like to thank all the contributors who worked on this release!

    Source code(tar.gz)
    Source code(zip)
  • 0.9.1(Mar 23, 2021)

    :star: Compatibility

    • Missing ConnectionFactoryConfigurations$PooledConnectionFactoryCondition #642
    • Add Lombok sample and Apache logging hints #636
    • com.oracle.svm.core.jdk.UnsupportedFeatureError: Proxy class defined by interfaces when adding a JpaRepository #630
    • Jolokia actuator endpoint cannot be processed #628
    • Add missing hints for Spring Cloud Function + Kotlin #615
    • Could not find class [org.springframework.http.HttpStatus] #612
    • PojoComponentTuplizer error with Spring Data JPA #603
    • Add Reactive Websocket support #598
    • More hints for @Bean with a class that has @ConfigurationProperties should be added to reflect-config.json #577
    • Add spring-cloud-starter-sleuth support #135

    :beetle: Bug Fixes

    • Gradle plugin fails in Gradle 7+ #633
    • Ensure that stale AOT generated-sources are deleted #623
    • Incorrect handling of @RequestHeader annotation's value attribute #542

    :notebook_with_decorative_cover: Documentation

    • Refine the reference documentation #646
    • Document logging support #641
    • Mention error 145 in the troubleshooting section #626
    • Add a Maven and Gradle multiple module samples #611
    • TraceClassInitialization in documentation seems to be wrong #608
    • Mention start.spring.io support in the reference documentation #601
    • Improve builder documentation #597
    • Mention error 137 in the troubleshooting section #594
    • Document how to run Spring AOT generation when using mvn spring-boot:run #593
    • Polish sample documentation #590

    :hammer: Dependency Upgrades

    • Upgrade to Spring Boot 2.4.4 #548
    • Upgrade to Spring Cloud 2020.0.2 #613

    :heart: Contributors

    We'd like to thank all the contributors who worked on this release!

    Source code(tar.gz)
    Source code(zip)
  • 0.9.0(Mar 11, 2021)

    :star: New Features

    • Reduce duplication of resources with basic regex cache #546
    • Add the org.springframework.experimental:spring-native dependency automatically when the org.springframework.experimental.aot plugin is applied #545
    • Support AOT options in Gradle plugin #536
    • Remove duplicated entries in StaticSpringFactories #533
    • Add a Spring Boot failure analyzer #515
    • Allow to use directly @TypeHint (and others) without @NativeHint #512
    • Log at info level that the application is running with code generated by Spring AOT #509
    • Rename TypeInfo/TypeInfos to TypeHint/TypeHints (same for others) #506
    • Introduce a Spring Native parent pom #490
    • Guard against application build misconfigurations #483
    • Add generated sources to IDE automatically #474
    • Adapt ActuatorMetricsEliminator and BackgroundPreInitializerDeactivator to build-time transformations #472
    • Configure build time transformation infra for test sources #455
    • Introduce new variant of TypeSystem #454
    • Add Gradle plugin for build time infrastructure #453
    • Support and document user provided hints #412
    • Remove functional mode, spring-fu/spring-init references #347
    • Refine @ConditionalOnProperty build-time processing #340
    • spring.autoconfigure.exclude results into runtime errors. #282
    • Move remaining static JSON configuration files to hints #216

    :star: Compatibility

    • Remove manual config in Cloud config server sample #567
    • Adds support for more database dialects. #540
    • Add support for Spring Security 5 thymeleaf extras #516
    • Remove the need for hibernate.properties and byte-buddy/javassist exclusion with JPA #510
    • Spring Data JPA custom return type error #460
    • Docker native image fails at runtime with missing ProxyCachingConfiguration class #451
    • Support for spring-boot-starter-mail #447
    • @RequestHeader not working #441
    • Apache LogFactory initialize at build-time issue #434
    • Fix IllegalStateException with logback #429
    • Missing Hints for Hibernate Constraint Validators #424
    • Add Kotlin reflection support #419
    • Add support for Kotlin Coroutines #409
    • Fix GeoJsonConfiguration.class error with MongoDB + web support #372
    • Spring Cloud Function not working with Tomcat #368
    • Add Spring Cloud Discovery support #355
    • Add Spring Cloud Config support #354
    • Support @MVC features being added via library #353
    • Add Spring Security support #247
    • Automatically set mandatory flags #225
    • Refine and optimize JPA/Hibernate support #144

    :star: Optimizations

    • Avoid implementation-specific caching configurations by default #481
    • More actuator optimizations #259

    :beetle: Bug Fixes

    • Fix Spring AOT Gradle support with Kotlin samples #558
    • Support for multi module projects #551
    • Make Spring AOT Gradle plugin Java 8 compliant #539
    • Maven AOT plugin fails with runtime dependencies #538
    • Duplicate entries in spring-aot generated resource-config.json #524
    • Image build fails on Windows seemingly because of backslashes in spring-aot\resource-config.json #514
    • sporadic error about boot version for cloud config server #508
    • spring-aot-maven-plugin fails on Windows #507
    • Fix com.mysql.cj.LocalizedErrorMessages errors on Petclinic samples #505
    • Error during a fresh import in Eclipse #500
    • Fix MissingTypeException in petclinic-jdbc tests #496
    • Review Maven plugin logging #491
    • Protect against class loading failures for Spring Factories #482
    • Initialization hints are not taken in account when a trigger is specified #478
    • Bring back Logback XML substitution #448
    • Runtime error when upgrading to Spring Boot 2.4.2 #446
    • Fail to launch cloud-function-aws sample behind Amazon API Gateway #440
    • Add application.yaml support #431
    • Fix @ConstructorBinding on non nested class #382
    • Measure and potentially fix build time regression #380

    :notebook_with_decorative_cover: Documentation

    • Clarify Spring Native AOT Gradle Plugin repository documentation #582
    • Add anchor for doc sections #575
    • Add Gradle Kotlin DSL variant to Spring AOT documentation #549
    • Clarify documentation about default options #522
    • Publish Javadoc and refdoc to https://docs.spring.io/spring-native/docs/ #511
    • Update documentation for 0.9.0 #493
    • Introduce native applications guidelines for Spring contributors #256
    • Document Windows 10 support #233

    :hammer: Dependency Upgrades

    • Upgrade to GraalVM 21.0.0 #433
    • Upgrade to Spring Boot 2.4.3 #432
    • Upgrade to Spring Cloud 2020.0.0 #437

    :heart: Contributors

    We'd like to thank all the contributors who worked on this release!

    Source code(tar.gz)
    Source code(zip)
  • 0.8.4(Dec 14, 2020)

  • 0.8.3(Nov 23, 2020)

  • 0.8.2(Nov 3, 2020)

  • 0.8.1(Sep 25, 2020)

  • 0.8.0(Sep 1, 2020)

  • 0.7.1(Jun 15, 2020)

  • 0.7.0(Jun 10, 2020)

    • Maven test driven configuration generation.
    • Reduced memory footprint.
    • Improved Kotlin support.
    • Spring Data MongoDB support.
    • Upgrade to Spring Boot 2.3.0 and GraalVM 20.1.0.
    • Better logging support.
    • Container support.
    • Regular Petclinic JPA, R2DBC, Spring Security and Batch samples.

    Changelog

    Source code(tar.gz)
    Source code(zip)
Owner
Spring Projects Experimental
Experimental projects in the Spring ecosystem
Spring Projects Experimental
HopLa Burp Suite Extender plugin - Adds autocompletion support and useful payloads in Burp Suite

HopLa ?? All the power of PayloadsAllTheThings, without the overhead. This extension adds autocompletion support and useful payloads in Burp Suite to

Synacktiv 522 Dec 24, 2022
A simple but helpful fight plugin with rank support

RankFight A simple but helpful fight plugin with rank support HighLights PlceholderAPI Support %rankfight_rank% %rankfight_credit% %rankfight_shopCred

贺兰星辰 5 Nov 20, 2021
Ghidra Wasm plugin with disassembly and decompilation support

Module to load WebAssembly files into Ghidra, supporting disassembly and decompilation. This plugin borrows loader functionality from this repo: https

Garrett Gu 54 Nov 22, 2022
This project allows the exchange of files between your local disk and a D64 image (Commodore 64 image disk) . Ce projet permet l'échange de fichiers entre votre disque local et une image D64 (Image de disquette du Commodore 64).

DiskToolC64 Ce projet permet l'échange de fichiers entre votre disque local et une image D64 (Image de disquette du Commodore 64). Introduction Les fi

Eddy BRIERE 3 Oct 12, 2022
A client-side Fabric mod for Minecraft Beta 1.7.3 that allows you to connect to servers running almost any patch from Alpha v1.1.2_01 to Beta 1.7.3.

multiversion-fabric A client-side Fabric mod for Minecraft Beta 1.7.3 that allows you to connect to servers running almost any patch from Alpha v1.1.2

0n1 2 Mar 13, 2022
:package: Gradle/Maven plugin to package Java applications as native Windows, Mac OS X, or GNU/Linux executables and create installers for them.

JavaPackager JavaPackager is a hybrid plugin for Maven and Gradle which provides an easy way to package Java applications in native Windows, Mac OS X

Francisco Vargas Ruiz 665 Jan 8, 2023
Sample serverless application written in Java compiled with GraalVM native-image

Serverless GraalVM Demo This is a simple serverless application built in Java and uses the GraalVM native-image tool. It consists of an Amazon API Gat

AWS Samples 143 Dec 22, 2022
An HTML to PDF library for the JVM. Based on Flying Saucer and Apache PDF-BOX 2. With SVG image support. Now also with accessible PDF support (WCAG, Section 508, PDF/UA)!

OPEN HTML TO PDF OVERVIEW Open HTML to PDF is a pure-Java library for rendering arbitrary well-formed XML/XHTML (and even HTML5) using CSS 2.1 for lay

null 1.6k Dec 29, 2022
Simple Java image-scaling library implementing Chris Campbell's incremental scaling algorithm as well as Java2D's "best-practices" image-scaling techniques.

imgscalr - Java Image-Scaling Library http://www.thebuzzmedia.com/software/imgscalr-java-image-scaling-library/ Changelog --------- 4.2 * Added sup

Riyad Kalla 1.1k Jan 5, 2023
Writeup and exploit for installed app to system privilege escalation on Android 12 Beta through CVE-2021-0928

Writeup and exploit for installed app to system privilege escalation on Android 12 Beta through CVE-2021-0928, a `writeToParcel`/`createFromParcel` serialization mismatch in `OutputConfiguration`

null 52 Dec 30, 2022
A beta mindustry mod, this mod not uploaded on mindustry until a new release has been released

Project EPL A beta mindustry mod, this mod not uploaded on mindustry until a new release has been released. the way you can compile/implement it is in

ExplerHD 2 Feb 4, 2022
Dynamic loading and compiling project based on JVM

camphor 基于jvm的弹性加载及编译中间件(Elastic loading and compiling middleware based on JVM) camphor_0.0.1 项目简介 该项目定位为弹性中间件,能够使系统在不重启的情况下完成增量代码文件的动态编译和加载 模块介绍 camp

palading 1 Jan 22, 2022
Run Java plugins without compiling them

Run Java plugins without compiling them! Usage Under plugins/SkriptJava, you can put your .java files to run when the server is up and loaded. This pl

Rance Andres 5 Sep 5, 2022
A demo of Rongcloud uniapp sdk integration for compiling debug-apk in Android Studio

Rongcloud-uniapp-sdk-demo A demo of Rongcloud uniapp sdk integration for compiling debug-apk in Android Studio 这是一个为了给uniapp在Android平台打出debug-apk的demo

Zongkui Guo 1 Oct 13, 2021
Spring Integration provides an extension of the Spring programming model to support the well-known Enterprise Integration Patterns (EIP)

Spring Integration Code of Conduct Please see our Code of conduct. Reporting Security Vulnerabilities Please see our Security policy. Checking out and

Spring 1.4k Dec 30, 2022
Provides many useful CRUD, Pagination, Sorting operations with Thread-safe Singleton support through the native JDBC API.

BangMapleJDBCRepository Inspired by the JpaRepository of Spring framework which also provides many capabilities for the CRUD, Pagination and Sorting o

Ngô Nguyên Bằng 5 Apr 7, 2022
A RatingBar library for android, you can customize size, spacing, color and image easily, and support right to left.

AndRatingBar A RatingBar library for android, you can customize size, spacing, color and image easily, and support right to left. 安卓RatingBar终极方案,继承自原

dqq 271 Aug 14, 2021