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.