springboot项目继承nacos后正常启动没问题,jar启动找不到配置文件

        这个我先说一下解决方案,就是在启动命令中增加一段代码:java  -Dfile.encoding=utf-8 -jar xxxx.jar 。这样就解决了,有的说配置文件中不能有中文,这个倒是没影响,只不过bootstrap中有中文敲完命令回车会等半天。

        如果就上面那样我也不至于写一个文章记录,下面记录一下奇葩的事。

        首先我也得弄个jar试试,但是eclipse-run-maven build 就是不过,报: Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources。反正在网上一顿查最后能打包了。

        打包之后就java -jar xxx.jar启动,然后就报找不到配置。然后取网上找呗,然后pom里增加spring-cloud-starter-bootstrap这个的,加完确实找到了,但是启动的时候报了循环依赖的问题。一看不对啊,springboot2.6.x之后才不给解决这个的,我的2.3.12怎么会报这个。马上去jar中看了一下,他喵的,jar中的springboot版本竟然是2.6.8。卧槽,这是为毛。

        我启动的项目pom中parent是我们自定义的一个父项目,父项目中引入的spring-boot-starter-parent。然后去网上找一堆也没解决,最后把本地maven仓库中父项目的版本文件夹都删了,在编译竟然好了,然后把网上找的加的那些东西都去了,果然没问题。 

        总结:问题的直接原因是打包的springboot版本和pom中不一样。

        卧槽,坑了我一天。

给定引用中未提及Spring Boot本地项目启动Nacos覆盖本地配置文件的相关解决办法。不过,一般可以通过以下思路来解决此类问题: ### 调整配置加载顺序 Spring Boot 加载配置文件有一定的顺序,可通过配置来调整Nacos配置和本地配置的加载顺序,让本地配置Nacos配置之后加载,从而覆盖Nacos配置。可在 `application.properties` 或 `application.yml` 中添加如下配置: ```properties spring.cloud.config.override-none=true ``` 或者在 `application.yml` 中: ```yaml spring: cloud: config: override-none: true ``` 此配置能确保本地配置覆盖远程(如Nacos)的配置。 ### 使用配置优先级注解 在Spring Boot中,可使用 `@PropertySource` 注解指定本地配置文件的加载,并且可设置其优先级。示例代码如下: ```java import org.springframework.context.annotation.PropertySource; import org.springframework.context.annotation.Configuration; @Configuration @PropertySource(value = "classpath:local.properties", ignoreResourceNotFound = false, encoding = "UTF-8") public class LocalConfig { // 配置类内容 } ``` 这样可以确保 `local.properties` 文件中的配置被优先加载。 ### 自定义配置加载逻辑 通过实现 `ApplicationContextInitializer` 来自定义配置加载逻辑,手动控制本地配置Nacos配置的加载顺序和覆盖规则。示例代码如下: ```java import org.springframework.context.ApplicationContextInitializer; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.PropertiesPropertySource; import java.io.IOException; import java.util.Properties; public class LocalConfigInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> { @Override public void initialize(ConfigurableApplicationContext applicationContext) { ConfigurableEnvironment environment = applicationContext.getEnvironment(); Properties properties = new Properties(); try { properties.load(getClass().getResourceAsStream("/local.properties")); PropertiesPropertySource propertySource = new PropertiesPropertySource("localProperties", properties); environment.getPropertySources().addFirst(propertySource); } catch (IOException e) { e.printStackTrace(); } } } ``` 然后在 `META - INF/spring.factories` 中配置该初始化器: ```properties org.springframework.context.ApplicationContextInitializer=com.example.LocalConfigInitializer ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值