My spring boot application using redisson run normally on JVM. I use graalVM compile the code success,but it can not startup.

The error log is:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'lettuceClientResources': Instantiation of supplied bean failed
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1220) ~[nbs-starter.exe:6.0.7]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1158) ~[nbs-starter.exe:6.0.7]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560) ~[nbs-starter.exe:6.0.7]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) ~[nbs-starter.exe:6.0.7]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[nbs-starter.exe:6.0.7]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[nbs-starter.exe:6.0.7]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[nbs-starter.exe:6.0.7]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[nbs-starter.exe:6.0.7]
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) ~[nbs-starter.exe:6.0.7]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1417) ~[nbs-starter.exe:6.0.7]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1337) ~[nbs-starter.exe:6.0.7]
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArgument(BeanInstanceSupplier.java:327) ~[na:na]
        ... 88 common frames omitted
Caused by: java.lang.ExceptionInInitializerError: null
        at io.netty.resolver.dns.DnsServerAddressStreamProviders$DefaultProviderHolder$1.provider(DnsServerAddressStreamProviders.java:150) ~[na:na]
        at io.netty.resolver.dns.DnsServerAddressStreamProviders$DefaultProviderHolder$1.<init>(DnsServerAddressStreamProviders.java:130) ~[na:na]
        at io.netty.resolver.dns.DnsServerAddressStreamProviders$DefaultProviderHolder.<clinit>(DnsServerAddressStreamProviders.java:128) ~[na:na]
        at io.netty.resolver.dns.DnsServerAddressStreamProviders.unixDefault(DnsServerAddressStreamProviders.java:117) ~[na:na]
        at io.netty.resolver.dns.DnsServerAddressStreamProviders.platformDefault(DnsServerAddressStreamProviders.java:113) ~[na:na]
        at io.netty.resolver.dns.DnsNameResolverBuilder.<init>(DnsNameResolverBuilder.java:61) ~[na:na]
        at io.lettuce.core.resource.AddressResolverGroupProvider$DefaultDnsAddressResolverGroupWrapper.<clinit>(AddressResolverGroupProvider.java:56) ~[na:na]
        at io.lettuce.core.resource.AddressResolverGroupProvider.<clinit>(AddressResolverGroupProvider.java:35) ~[na:na]
        at io.lettuce.core.resource.DefaultClientResources.<clinit>(DefaultClientResources.java:112) ~[nbs-starter.exe:6.2.3.RELEASE]
        at org.springframework.boot.autoconfigure.data.redis.LettuceConnectionConfiguration.lettuceClientResources(LettuceConnectionConfiguration.java:71) ~[nbs-starter.exe:3.0.5]
        at org.springframework.boot.autoconfigure.data.redis.LettuceConnectionConfiguration__BeanDefinitions.lambda$getLettuceClientResourcesInstanceSupplier$1(LettuceConnectionConfiguration__BeanDefinitions.java:41) ~[na:na]
        at org.springframework.util.function.ThrowingBiFunction.apply(ThrowingBiFunction.java:68) ~[nbs-starter.exe:6.0.7]
        at org.springframework.util.function.ThrowingBiFunction.apply(ThrowingBiFunction.java:54) ~[nbs-starter.exe:6.0.7]
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.lambda$get$2(BeanInstanceSupplier.java:204) ~[na:na]
        at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58) ~[nbs-starter.exe:6.0.7]
        at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46) ~[nbs-starter.exe:6.0.7]
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.invokeBeanSupplier(BeanInstanceSupplier.java:216) ~[na:na]
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.get(BeanInstanceSupplier.java:204) ~[na:na]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.obtainInstanceFromSupplier(DefaultListableBeanFactory.java:947) ~[nbs-starter.exe:6.0.7]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1214) ~[nbs-starter.exe:6.0.7]
        ... 99 common frames omitted
Caused by: java.lang.NullPointerException: null
        at java.base@17.0.6/sun.net.dns.ResolverConfigurationImpl.stringToList(ResolverConfigurationImpl.java:69) ~[na:na]
        at java.base@17.0.6/sun.net.dns.ResolverConfigurationImpl.loadConfig(ResolverConfigurationImpl.java:136) ~[na:na]
        at java.base@17.0.6/sun.net.dns.ResolverConfigurationImpl.nameservers(ResolverConfigurationImpl.java:159) ~[na:na]
        at jdk.naming.dns@17.0.6/com.sun.jndi.dns.DnsContextFactory.serversForUrls(DnsContextFactory.java:149) ~[nbs-starter.exe:na]
        at jdk.naming.dns@17.0.6/com.sun.jndi.dns.DnsContextFactory.getContext(DnsContextFactory.java:81) ~[nbs-starter.exe:na]
        at jdk.naming.dns@17.0.6/com.sun.jndi.dns.DnsContextFactory.urlToContext(DnsContextFactory.java:120) ~[nbs-starter.exe:na]
        at jdk.naming.dns@17.0.6/com.sun.jndi.dns.DnsContextFactory.getInitialContext(DnsContextFactory.java:64) ~[nbs-starter.exe:na]
        at java.naming@17.0.6/javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:732) ~[nbs-starter.exe:na]
        at java.naming@17.0.6/javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:305) ~[nbs-starter.exe:na]
        at java.naming@17.0.6/javax.naming.InitialContext.init(InitialContext.java:236) ~[nbs-starter.exe:na]
        at java.naming@17.0.6/javax.naming.InitialContext.<init>(InitialContext.java:208) ~[nbs-starter.exe:na]
        at java.naming@17.0.6/javax.naming.directory.InitialDirContext.<init>(InitialDirContext.java:130) ~[nbs-starter.exe:na]
        at io.netty.resolver.dns.DirContextUtils.addNameServers(DirContextUtils.java:49) ~[na:na]
        at io.netty.resolver.dns.DefaultDnsServerAddressStreamProvider.<clinit>(DefaultDnsServerAddressStreamProvider.java:55) ~[na:na]
        ... 119 common frames omitted

Maybe it's related about Initialization Order of static fied of class ?

My pom.xml is

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- 必须要要3.0.2以上的Spring boot版本 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.0.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencies>
        <!-- ..... other dependencies-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson</artifactId>
            <version>3.21.3</version>
        </dependency>

    </dependencies>

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.11.0</version>
                <configuration>
                    <source>17</source>
                    <target>17</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.graalvm.buildtools</groupId>
                <artifactId>native-maven-plugin</artifactId>
                <version>${native.maven.plugin.version}</version>

                <configuration>
                    <!-- imageName is used to set the name of the generated binary file -->
                    <imageName>${project.artifactId}</imageName>
                    <!-- mainClass is used to specify the path to the main method class -->
                    <mainClass>${exec.mainClass}</mainClass>
                    <buildArgs>
                        --no-fallback
                    </buildArgs>
                </configuration>
                <executions>
                    <execution>
                        <id>build-native</id>
                        <goals>
                            <goal>compile-no-fork</goal>
                        </goals>
                        <phase>package</phase>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

And RedissonConfig is:


import lombok.extern.slf4j.Slf4j;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;

import java.io.IOException;

@ConditionalOnMissingBean(RedissonClient.class)
@Configuration
@Slf4j
public class RedissonConfig {
    @Value("${tums.redis.ip}")
    public String redisHost;
    @Value("${tums.redis.port}")
    public String redisPort;
    @Value("${tums.redis.nodes:}")
    public String redisNodes;
    @Value("${tums.redis.password}")
    public String redisPassword;

    @Bean
    @ConditionalOnMissingBean
    public RedissonClient getRedisson() throws IOException {
        Config config = new Config();

        config.useSingleServer()
                .setAddress("redis://" + redisHost + ":" + redisPort)
                .setPassword(redisPassword)
                .setKeepAlive(true)
                .setPingConnectionInterval(3000)
                .setConnectionMinimumIdleSize(3)
                .setConnectionPoolSize(6);
        log.info("redisson config is :[{}]", config);

        log.info("Redisson config content: {}", config.toJSON());
        return Redisson.create(config);
    }
}

@RestController
public class TestUserController {
    @Autowired
    RedissonClient redissonClient;
  // ..............
}

Comment From: wilkinsona

Duplicates https://github.com/oracle/graal/issues/4304.