Spring-将服务自动装配到另一个项目中时找不到YAML配置

时间:2018-11-18 10:20:01

标签: java spring spring-boot

我目前正在从事一个项目,该项目由多个模块组成,这些模块都由Spring管理。我现在正在尝试将模块A的服务自动连接到模块B。此服务是使用模块A中的application.yml配置文件配置的。使用独立版本的模块A时,一切正常,并且正确注入了配置值放入@Value("${...}")注释的字段中。但是,如果我使用模块B中的该服务,则由于spring无法解析注释中给出的占位符,因此其构造失败。

因此,将服务自动装配到另一个项目中似乎使其无法找到配置文件。有什么办法可以解决这个问题?

感谢您的帮助!

编辑:这是config类的相关部分的外观:

    @EnableKafka
    @Configuration
    @EnableElasticsearchRepositories(basePackages = "...")
    public class ElasticsearchConfig {

            @Value("${elasticsearch.home}")
            private String elasticsearchHome;

            @Value("${elasticsearch.cluster}")
            private String clusterName;

            @Bean
            public Client client() {
                 Settings elasticSettings = Settings
                    .builder()
                    .put("path.home", elasticsearchHome)
                    .put("cluster.name", clusterName)
                    .put("client.transport.sniff", true)
                    .build();
                 PreBuiltTransportClient client = 
                    new PreBuiltTransportClient(elasticSettings);
                 try {
                    client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
                 } catch (UnknownHostException e) {
                   throw new RuntimeException(e);
                 }
                 return client;

            }
         ...
       }

然后将这些值用于创建构建elasticsearch client所需的bean。相应的application.yml看起来像这样:

elasticsearch:
  cluster: elasticsearch
  home: "/path/to/elasticsearch-6.4.2/"

kafka:
  bootstrap-servers: localhost:9092
  ...

这是项目结构的相关部分:

Project
|-- module A
|   `-- src
|       |-- main
|       |   `-- java
|       |       |-- ElasticsearchConfig.java
|       |       |-- SomeService.java
|       |       `-- ServiceUsedFromA.java
|       `-- resources
|           `-- application.yml
`-- module B
    `-- src
        `-- main
            |-- java
            |   `-- ServiceUsedFromB.java
            `-- resources
                `-- ...

如果将SomeService自动连接到ServiceUsedFromA中,一切将按预期工作,如果自动连接到ServiceUsedFromB(也是基于spring的)中,则会发生上述问题。

1 个答案:

答案 0 :(得分:0)

经过大量搜索并尝试了不同的想法来解决此问题,我终于找到了解决方案:

我从使用YAML配置文件切换为使用放置在上面发布的项目结构中提到的资源文件夹中的application.properties。这使我可以通过@PropertySource(value = "classpath:application.properties")中的ElasticSearchConfig.java注释指定属性文件(这对于YAML配置是不可能的)。 现在,即使服务已自动连接到另一个模块中,spring似乎也能够提取配置文件。

感谢您的努力:)