我如何配置Bean,从一个新的yml文件加载和工作所有属性,从另一个新的yml加载和工作另一个Bean?最佳实践是什么?
我发现了使用YAMLPropertiesFactoryBean
的示例,并且这个bean可以读取几个资源(yml文件),但是在另一个bean中,当我读取这个YAMLPropertiesFactoryBean
时,我无法获得特定的yml,因为这个YAMLPropertiesFactoryBean
的getObject()
将包含我添加到其中的所有yml资源。
我终于拿到了!这就是它的工作原理:
我有一个属性配置类,它加载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时使用的。 问题是,我如何找出注入点上有哪些注解?