当前位置: 首页 > 知识库问答 >
问题:

Spring中不同bean的不同yml文件

蒋斯伯
2023-03-14

我如何配置Bean,从一个新的yml文件加载和工作所有属性,从另一个新的yml加载和工作另一个Bean?最佳实践是什么?

我发现了使用YAMLPropertiesFactoryBean的示例,并且这个bean可以读取几个资源(yml文件),但是在另一个bean中,当我读取这个YAMLPropertiesFactoryBean时,我无法获得特定的yml,因为这个YAMLPropertiesFactoryBeangetObject()将包含我添加到其中的所有yml资源。

共有1个答案

巫马盛
2023-03-14

我终于拿到了!这就是它的工作原理

我有一个属性配置类,它加载yml文件:

@Configuration
public class PropertiesConfig {

    public static final String PERSONS_FILE_NAME = "persons.yml";
    public static final String FOODS_FILE_NAME = "foods.yml";

    @Bean
    public PropertySourcesPlaceholderConfigurer properties() {
        final PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
        final YamlPropertiesFactoryBean personsYaml = personsPropertiesFromYamlFile();
        final YamlPropertiesFactoryBean foodsYaml = foodsPropertiesFromYamlFile();
        propertySourcesPlaceholderConfigurer.setPropertiesArray(personsYaml.getObject(), foodsYaml.getObject());
        return propertySourcesPlaceholderConfigurer;
    }

    @Bean
    @Qualifier(PersonsManager.QUALIFIER_NAME)
    public YamlPropertiesFactoryBean personsPropertiesFromYamlFile() {
        final YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
        yaml.setResources(new ClassPathResource(PERSONS_FILE_NAME));
        return yaml;
    }

    @Bean
    @Qualifier(FoodsManager.QUALIFIER_NAME)
    public YamlPropertiesFactoryBean foodsPropertiesFromYamlFile() {
        final YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
        yaml.setResources(new ClassPathResource(FOODS_FILE_NAME));
        return yaml;
    }

}

最后,我有两个bean(管理器),它们只保存相应的yml属性:

@Component
public class PersonsManager extends YmlPropertiesManager {

    public static final String QUALIFIER_NAME = "personsYaml";

    @Autowired
    public PersonsManager(@Qualifier(QUALIFIER_NAME) YamlPropertiesFactoryBean yamlObject) {
        super(yamlObject);
    }

    ...

}
@Component
public class FoodsManager extends YmlPropertiesManager {

    public static final String QUALIFIER_NAME = "personsYaml";

    @Autowired
    public FoodsManager(@Qualifier(QUALIFIER_NAME) YamlPropertiesFactoryBean yamlObject) {
        super(yamlObject);
    }

    ...

}
 类似资料:
  • 问题内容: 我发现我有多个环境(例如测试和生产)是很常见的,但是我希望启动的Docker容器在两种环境中都是相同的。唯一的区别是我想使用来指定的应用程序配置。由于我有多个容器以及它们之间的依赖关系,因此我想使用docker- compose 。但是afaik我只能在文件内部指定一个(请参阅docs)。如果是这种情况,那么我需要将我的原始文件克隆到两个不同的文件(一个用于测试,一个用于产品),以指向

  • 我发现有多个环境(例如test和prod),但我希望启动的Docker容器在这两个环境中是相同的。唯一的区别是应用程序配置,我希望使用来指定它。因为我有多个容器和它们之间的依赖关系,所以我想使用docker-compose。但是afaik I只能在文件中指定(请参见文档)。如果是这种情况,那么我需要将原来的克隆到两个不同的文件(一个用于test,一个用于prod),以指向不同的env文件。这意味着

  • 我正在使用Grails 3.3.1和Spring boot。构建工具是gradle。所有与应用程序相关的属性都在application.yml文件中配置。 现在我想访问不同的。用于不同环境[开发、测试等]的yml文件。为此,我创造了不同的。每个环境的yml文件。用于运行服务器的命令是:grails-Dgrails。env=test run app Now当我访问任何属性时,它会提供来自应用程序测试

  • 在Java9上使用Spring5。。。。 甚至不确定这是可能的。有一个非常简单的类: 和都只需要几个配置属性(即一些.queue)就可以工作。要注册(通过或)Exchangebean的多个实例,但带有前缀配置属性。在注册bean时是否仍要更改属性定义?

  • 我的目标是: 实现所有自定义,内置记录器从同一个包到不同的文件。 信息-信息日志文件 我尝试的是: 问题是: 记录器名称相同。因此,最新的记录器只能工作。在这种情况下,Info可以工作,但也不能调试。 我的疑问是: 我引用了这么多帖子。我认为下面的方法是有效的。 按此处所述,将每一个作为自定义记录器。但我确信这是否正确的解决方案

  • 我想将一个原型作用域bean注入到一个单例中。这个原型bean应该只为它被注入的每个单例创建一次(据我所知,默认情况下是这样的)。但是,我确实希望每次都有一个稍微不同的bean,所以我希望能够用一个自定义注释来注释注入点,这是在构造原型bean时使用的。 问题是,我如何找出注入点上有哪些注解?