Spring Boot @ConfigurationProperties无法从外部属性文件或类路径属性文件加载

时间:2018-09-28 22:01:52

标签: spring spring-boot properties

嗨,我正在尝试使用我从2个应用程序中使用spring boot(2.0.5)创建的可重用库,我能够将classpath中的application.properties的属性绑定到bean上,如下所示,在我的第一个spring批处理应用程序中的调试器中通过设置器设置的模式,该应用程序也是通过spring boot(2.0.5)创建的

这是我的库中的属性bean类,其中包含一些服务api-该库只是使用spring boot创建的jar包。

包com.test.lib.config

@ConfigurationProperties("job")

@PropertySources({

@PropertySource(value = "${ext.prop.dir}", ignoreResourceNotFound = true),

@PropertySource(value = "classpath:application.properties", ignoreResourceNotFound = true)

})

public class ServiceProperties {

           /**

           * Schema for the service

           */

           private String schema;


public String getSchema() {

                          return schema;

           }

           public void setSchema(String schema) {

                          this.schema = schema;
           }

}

该库的配置bean如下所示,位于同一包中。

@Configuration

@EnableConfigurationProperties(ServiceProperties.class)

@ComponentScan("com.test.lib")

 public class LibraryModuleConfig {
 }

当从包含该库作为依赖项的sprint引导弹簧批处理应用程序中调用时,此代码工作得非常好,并且在application.properties中添加job.schema=testSchema时可以看到相应的设置器。 / p>

我尝试在现有的spring mvc Web应用程序中使用相同的库,该应用程序是从雄猫服务器启动的,带有外部文件目录作为启动参数(此应用程序不是使用Spring Boot创建的),并添加了适当的context:component-scan以application-context(appn-context.xml)中的库中的bean(Java配置bean)。 job.schema属性既通过application.properties文件传递,也通过C驱动器中的外部文件传递,如@propertySources批注中的$ {ext.prop.dir}“所给。ServiceProperties Bean中的schema属性从不设置,并且甚至连setter也都不会在调试中被调用。为什么这个libray config bean在现有的spring mvc应用程序中不起作用,而在spring batch应用程序中起作用,它们都将库添加为依赖项。时间,除了spring属性绑定以外,其他功能似乎都起作用。

1 个答案:

答案 0 :(得分:0)

@EnaleConfigurationProperties是Spring Boot提供的方便注释。 (Spring MVC默认不提供)

对于旧版Spring MVC应用程序(特定于Spring 3.x),可以对属性使用@Value批注。

@Value注释也可以在Spring Boot中使用,所以我想您可以进行更改,以便它可以与旧版本(Spring 3.x)和较新版本一起使用,而无需进行任何更改。

希望这会有所帮助!快乐编码:)