189 8069 5689

SpringBoot加载外部依赖过程解析-创新互联

这篇文章主要介绍了SpringBoot加载外部依赖过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

创新互联建站专注于企业营销型网站、网站重做改版、黄山网站定制设计、自适应品牌网站建设、H5技术商城网站定制开发、集团公司官网建设、外贸营销网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为黄山等各大城市提供网站开发制作服务。

背景

公司一个项目的大数据平台进行改造,之前使用Structured Streaming作为实时计算框架,需要替换为替换为Kafka Streams,并使用SpringBoot包装,使其可以纳入微服务体系。

然而由于之前并没有接触过SpringFramework相关技术,并且项目工期较为紧张,因此只好花了2天时间看了看Spring和SpringBoot,并且在改造过程中沿用大部分原有代码,最后套上SpringBoot的壳子(就是基本不使用Spring Data相关的封装和DI、AOP这些特性,只是在启动类上添加@SpringBootApplication注解,并在main()方法里面使用SpringApplication.run()方式启动)。

问题

然后在部署过程中就遇到了一个比较蛋疼的问题:因为遗留代码的关系,部分配置项的名称是自定义的,并使用java.util.ResourceBundle的getString()来读取,而为了让项目可以注册到Eureka以及使用SpringBoot默认的日志配置,在配置文件中配置了eureka.client.serviceUrl.defaultZone以及logging.file等SpringBoot内置的配置项,并使用SpringBoot内置的配置读取方式读取。

也就是在一个应用程序中,混合使用了两种读取配置文件的方式。在使用maven将应用程序“EatMalonPeople”打包后,根据微服务组大佬的友情提示,使用如下命令运行程序:

java -jar EatMalonPeople.jar

然鹅运行倒是没问题,不过application.properties文件在jar包里面,修改配置文件需要用vim直接修改jar包。感觉这种方式略挫,不太能接受。按照以往的经验,使用java -cp命令可以指定classpath,应用程序会优先读取classpath指定的外部配置文件。但是当我在config目录下拷贝了一份application.properties文件,并修改了其中使用ResourceBundle.getString()方式读取的配置项时,再使用:

java -cp .:./config/application.properties EatMalonPeople.jar

启动后,发现生效的配置项仍然是EatMalonPeople.jar这个jar包内的配置项......
感觉不太科学啊。于是去查了查SpringBoot项目加载配置文件的顺序,结果根据Spring官网的提示,SpringBoot加载配置文件application.properties的顺序依次为:

  • 当前目录的cofnig目录
  • 当前目录
  • classpath目录下的/config目录
  • classpath目录

但是根据这种顺序,明明应该加载config目录下的配置文件嘛。于是在pom文件中exclude掉了配置文件:


  
    src/main/resources
      
        ${resource.exclude}
      
  

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章题目:SpringBoot加载外部依赖过程解析-创新互联
网页地址:http://cdxtjz.cn/article/cceoed.html

其他资讯