普通Java项目与Spring Boot项目间属性传递问题咨询
问题结论
两种方案都可实现,无需强制将属性定义在p1自身的属性文件中,具体落地方式取决于p1的属性读取逻辑:
场景1:无法修改p1的代码
- 如果p1内部是硬编码读取类路径下固定名称的属性文件(例如代码写死加载
custom-config.properties),直接在p2的src/main/resources目录下创建同名的属性文件,填入需要的键值对即可。Spring Boot项目运行时,类路径下p2 resources目录的文件优先级高于依赖jar包内的同名文件,p1会自动读取到p2中配置的属性。 - 如果p1内部是硬编码读取自身jar包内的固定属性文件(例如用类本身的类加载器读取资源而非线程上下文类加载器),p2无法通过同名文件覆盖,这种场景只能走参数透传的方案:在p1中新增m1的重载方法,把内部读取的属性值新增为第三个入参,p2调用时从自身
application.properties读取对应值传入即可。
场景2:可以修改p1代码适配Spring Boot环境
这种场景可以直接把p1需要的属性配置在p2的application.properties中,实现步骤如下:
- 在p1中为需要接收配置的类添加
@ConfigurationProperties注解,指定专属配置前缀,比如@ConfigurationProperties(prefix = "p1.biz"),给配置字段添加对应的getter、setter - 给p1添加自动配置类,将用到配置的类注册为Spring Bean,同时在
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中注册自动配置类 - p2只需在自身的
application.properties中添加p1.biz.xxx=对应值的配置,启动后会自动注入到p1的Bean中,调用m1时无需额外处理即可读到配置值。
提示:如果不想给p1引入Spring相关依赖,最优方案是直接调整m1的方法签名,将内部依赖的配置属性改为入参,p2调用时直接传入从自身配置文件读取到的值,完全不需要处理两边的配置读取兼容问题。
内容的提问来源于stack exchange,提问作者its_me_shrinidhi
相关产品推荐
相关产品推荐

