Spring加载bean,它们基于子模块的application.properties

时间:2015-08-30 18:21:23

标签: java spring

我有两个Spring模块,Parent模块,它有一个子模块依赖项。两个项目都有自己的Spring注释bean,并使用distanceMatrix=sum(abs(bsxfun(@minus,permute(A,[1,3,2]),permute(B,[3,1,2]))),3); 创建bean。 Project子项在其资源中有@Bean,此文件用于在子项目中为Bean设置属性。 Project Parent有自己的child.properties,它也用于在父项目中创建bean。

=>每两个项目的parent.properties类都使用ServiceConfig注释,我使用:

父:

@Configuration

孩子:

@Bean public static PropertyPlaceholderConfigurer configuration(){
        final PropertyPlaceholderConfigurer props=new PropertyPlaceholderConfigurer();
        props.setLocations(new Resource[]{new ClassPathResource("parent.properties")});
        return props;
    }

现在我的问题是:我需要从子项目到父项目自动装配一个bean,当我运行父项目(在@Bean public static PropertyPlaceholderConfigurer configuration(){ final PropertyPlaceholderConfigurer props=new PropertyPlaceholderConfigurer(); props.setLocations(new Resource[]{new ClassPathResource("child.properties")}); return props; } 中有子项目作为依赖项)时,自动连接的子bean无法运行因为pom.xml没有被加载而构建。当我发现时,我看到春天只进入父母的child.properties豆而不是孩子。 当我从父项中删除PropertyPlaceholderConfigurer时,Spring会从子项目中加载PropertyPlaceholderConfigurer Bean。

我可以通过将PropertyPlaceholderConfigurer文件放在父项目中来解决此问题,但我不喜欢这个解决方案,我希望按项目保留每个配置。

2 个答案:

答案 0 :(得分:0)

由于PropertyPlaceholderConfigurer bean都具有相同的bean名称,因此父bean会覆盖子bean(如果您仔细查看日志,那么您会在那里看到它) 尝试给他们不同的名字

答案 1 :(得分:0)

使用@PropertySources注释为相应应用程序的Spring配置添加注释。它允许您指定@PropertySource个文件的数组。

e.g。

@Configuration
@PropertySources({
    @PropertySource("classpath:parent.properties"),
    @PropertySource("classpath:child.properties")})
public class MyApp() // Add annotations on YOUR configuration 
{
    ...
}

Spring会将注释的属性添加到您的应用程序中。有关更多信息,请参阅spring文档中的chapter 23