SpringBoot读取配置文件的优先级导致的问题

本文讲述了在启动Spring Boot应用时,配置为连接内网Redis服务器,但实际连接时遇到127.0.0.1的问题,通过排查和解决,发现是Spring Boot配置优先级导致的,移除-Dspring.config.location参数后问题得到解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题说明:启动某个应用时 出现了一个加载redis的错误,明明配置文件是172.16.108.71的内网环境ip,但是加载的时候却报错是 127.0.0.1,报错如下:

 

2021-03-30 20:23:48.617 DEBUG 75508 --- [lettuce-epollEventLoop-4-1] io.netty.util.ResourceLeakDetectorFactory$DefaultResourceLeakDetectorFactory.newResourceLeakDetector (ResourceLeakDetect
orFactory.java:202) : Loaded default ResourceLeakDetector: io.netty.util.ResourceLeakDetector@31a1571e
2021-03-30 20:23:48.673 DEBUG 75508 --- [lettuce-epollEventLoop-4-1] io.lettuce.core.protocol.CommandHandler.channelRegistered (CommandHandler.java:145) : [channel=0x695e9b2f, [id: 0x287f0c
5d] (inactive), chid=0x1] channelRegistered()
2021-03-30 20:23:48.681 DEBUG 75508 --- [lettuce-epollEventLoop-4-1] io.lettuce.core.AbstractRedisClient.lambda$initializeChannelAsync$1 (AbstractRedisClient.java:273) : Connecting to Redis
 at localhost:6379: localhost:6379

io.netty.channel.AbstractChannel$AnnotatedConnectException: syscall:getsockopt(..) failed: Connection refused: localhost/127.0.0.1:6379
        at io.netty.channel.unix.Socket.finishConnect(..)(Unknown Source)
Caused by: io.netty.channel.unix.Errors$NativeConnectException: syscall:getsockopt(..) failed: Connection refused
        ... 1 common frames omitted

2021-03-30 20:23:48.682 DEBUG 75508 --- [lettuce-epollEventLoop-4-1] io.lettuce.core.RedisChannelHandler.close (RedisChannelHandler.java:100) : close()
2021-03-30 20:23:48.683 DEBUG 75508 --- [lettuce-epollEventLoop-4-1] io.lettuce.core.protocol.DefaultEndpoint.close (DefaultEndpoint.java:480) : [unknown, epid=0x1] close()
2021-03-30 20:23:48.686  WARN 75508 --- [main] org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext.java:559) : Exception encountered during co
ntext initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'enableRedisKeyspaceNotificationsInitializer' defin
ed in class path resource [org/springframework/boot/autoconfigure/session/RedisSessionConfiguration$SpringBootRedisHttpSessionConfiguration.class]: Invocation of init method failed; nested 
exception is org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to l
ocalhost:6379
2021-03-30 20:23:48.689  INFO 75508 --- [main] org.springframework.jmx.export.MBeanExporter.destroy (MBeanExporter.java:451) : Unregistering JMX-exposed beans on shutdown
2021-03-30 20:23:48.691 DEBUG 75508 --- [lettuce-epollEventLoop-4-1] io.lettuce.core.protocol.CommandHandler.channelUnregistered (CommandHandler.java:161) : [channel=0x695e9b2f, [id: 0x287f
0c5d] (inactive), chid=0x1] channelUnregistered()
2021-03-30 20:23:49.819 DEBUG 75508 --- [lettuce-epollEventLoop-4-1] io.netty.buffer.PoolThreadCache.free (PoolThreadCache.java:249) : Freed 1 thread-local buffer(s) from thread: lettuce-ep
ollEventLoop-4-1
2021-03-30 20:23:49.837  INFO 75508 --- [main] org.apache.juli.logging.DirectJDKLog.log (DirectJDKLog.java:180) : Stopping service [Tomcat]
2021-03-30 20:23:49.867 DEBUG 75508 --- [main] com.ulisesbocchio.jasyptspringboot.configuration.EnableEncryptablePropertiesBeanFactoryPostProcessor.onApplicationEvent (EnableEncryptableProp
ertiesBeanFactoryPostProcessor.java:61) : Application Event Raised: ApplicationFailedEvent
2021-03-30 20:23:49.903  INFO 75508 --- [main] org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener.logMessage (ConditionEvaluationReportLoggingListener.j
ava:142) : 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2021-03-30 20:23:49.904 DEBUG 75508 --- [main] com.ulisesbocchio.jasyptspringboot.configuration.EnableEncryptablePropertiesBeanFactoryPostProcessor.onApplicationEvent (EnableEncryptableProp
ertiesBeanFactoryPostProcessor.java:61) : Application Event Raised: ApplicationFailedEvent
2021-03-30 20:23:49.910 ERROR 75508 --- [main] org.springframework.boot.SpringApplication.reportFailure (SpringApplication.java:837) : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'enableRedisKeyspaceNotificationsInitializer' defined in class path resource [org/springframework/boot
/autoconfigure/session/RedisSessionConfiguration$SpringBootRedisHttpSessionConfiguration.class]: Invocation of init method failed; nested exception is org.springframework.data.redis.RedisCo
nnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1694)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:573)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:762)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:881)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551)
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:386)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1242)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1230)
        at com.ztesoft.CloudResourcesInterConnectionManageApplication.main(CloudResourcesInterConnectionManageApplication.java:31)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
        at org.springframework.boot.loader.PropertiesLauncher.main(PropertiesLauncher.java:593)
Caused by: org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to loc
alhost:6379
        at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getNativeConnection(LettuceConnectionFactory.java:966)
        at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getConnection(LettuceConnectionFactory.java:934)
        at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getSharedConnection(LettuceConnectionFactory.java:786)
        at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getConnection(LettuceConnectionFactory.java:300)
        at org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration$EnableRedisKeyspaceNotificationsInitializer.afterPropertiesSet(RedisHttpSessionCon
figuration.java:302)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1753)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1690)
        ... 24 common frames omitted
Caused by: io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379
        at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:56)
        at io.lettuce.core.AbstractRedisClient.getConnection(AbstractRedisClient.java:233)
        at io.lettuce.core.RedisClient.connectStandalone(RedisClient.java:253)
        at io.lettuce.core.RedisClient.connect(RedisClient.java:202)
        at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.getConnection(StandaloneConnectionProvider.java:56)
        at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getNativeConnection(LettuceConnectionFactory.java:959)
        ... 30 common frames omitted
Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: syscall:getsockopt(..) failed: Connection refused: localhost/127.0.0.1:6379
        at io.netty.channel.unix.Socket.finishConnect(..)(Unknown Source)
Caused by: io.netty.channel.unix.Errors$NativeConnectException: syscall:getsockopt(..) failed: Connection refused
        ... 1 common frames omitted

-XX:CMSInitiatingOccupancyFraction=80 -XX:+DisableExplicitGC -XX:GCLogFileSize=20971520 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./logs/dumpfile.hprof -XX:InitialHeapSize=536870912 
-XX:MaxDirectMemorySize=16106127360 -XX:MaxHeapSize=536870912 -XX:MaxNewSize=268435456 -XX:MaxTenuringThreshold=6 -XX:NewSize=268435456 -XX:NumberOfGCLogFiles=5 -XX:OldPLABSize=16 -XX:-Omit
StackTraceInFastThrow -XX:+PrintCommandLineFlags -XX:+PrintGC -XX:+PrintGCTimeStamps -XX:+PrintTenuringDistribution -XX:-UseBiasedLocking -XX:+UseCompressedClassPointers -XX:+UseCompressedO
ops -XX:+UseConcMarkSweepGC -XX:+UseGCLogFileRotation -XX:-UseLargePages -XX:+UseParNewGC 
20:38:53,633 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
20:38:53,634 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
20:38:53,636 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/data/oss-o4/app/sdn-inf/config/logback.xml]
20:38:53,795 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
20:38:53,806 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@24:75 - no applicable action for [springProperty], current ElementPath  is [[configuration][springProperty]]
20:38:53,806 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@25:78 - no applicable action for [springProperty], current ElementPath  is [[configuration][springProperty]]
20:38:53,806 |-INFO in ch.qos.logback.core.joran.action.ConversionRuleAction - registering conversion word clr with class [org.springframework.boot.logging.logback.ColorConverter]
20:38:53,807 |-INFO in ch.qos.logback.core.joran.action.ConversionRuleAction - registering conversion word wex with class [org.springframework.boot.logging.logback.WhitespaceThrowableProxyC
onverter]
20:38:53,807 |-INFO in ch.qos.logback.core.joran.action.ConversionRuleAction - registering conversion word wEx with class [org.springframework.boot.logging.logback.ExtendedWhitespaceThrowab
leProxyConverter]
20:38:53,816 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
20:38:53,821 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT]
20:38:53,825 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
20:38:53,894 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.springframework] to INFO
20:38:53,894 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.springframework.jdbc.core.JdbcTemplate] to DEBUG
20:38:53,894 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.apache.http] to INFO
20:38:53,894 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.springframework.jdbc.core.StatementCreatorUtils] to TRACE
20:38:53,894 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to DEBUG
20:38:53,894 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[ROOT]
20:38:53,895 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
20:38:53,896 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@1da51a35 - Registering current configuration as safe fallback point

 

 

百度了一下Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: syscall:getsockopt(..) failed: Connection refused: localhost/127.0.0.1:6379类似的错误,看了下别人的博客写的确是关闭redis的保护模式和绑定端口,然后在次启动都不行

引用博客:https://blog.youkuaiyun.com/woshiVIPPP/article/details/82663544

,最后问了公司以前的前辈,发现是spingboot读取配置文件优先级导致了,去掉了-Dspring.config.location=classpath:../即可

参考的博客:https://blog.youkuaiyun.com/weixin_30733003/article/details/101201340

 

 

Spring Boot 的配置文件非常灵活,可以根据需要选择不同的文件进行配置。Spring Boot 的配置文件分为两种:application.properties 和 application.yml。两种配置文件优先级是相同的,都可以用来配置 Spring Boot 的应用程序。 首先,Spring Boot 会从 application.properties 和 application.yml 文件中读取配置信息,如果在 application.properties 和 application.yml 中都有同名的属性,则 application.yml 中的配置会覆盖 application.properties 中的配置。 其次,Spring Boot 会从外部配置文件读取配置信息。外部配置文件可以指定在启动命令中,例如: ``` java -jar myapp.jar --spring.config.name=myapp --spring.config.location=file:/opt/myapp/config/ ``` 这条命令告诉 Spring Boot 使用 myapp.properties 或 myapp.yml 作为配置文件,并且从 /opt/myapp/config/ 目录中读取配置信息。同样,如果一个属性在外部配置文件中被定义,则会覆盖 application.properties 和 application.yml 中的配置。 最后,Spring Boot 会从命令行参数中读取配置信息。例如,生成的 jar 包可以使用以下命令运行: ``` java -jar myapp.jar --server.port=8081 --debug=true ``` 这条命令告诉 Spring Boot 使用 8081 端口启动应用程序,并且启用调试模式。同样,命令行参数中的属性会覆盖所有其他配置信息。 总的来说,Spring Boot 的配置文件优先级为:命令行参数 > 外部配置文件 > application.yml > application.properties。在实际开发中,我们可以根据需要灵活选择不同的配置方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zbqice007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值