簡體   English   中英

Spring-將服務自動裝配到另一個項目中時找不到YAML配置

[英]Spring - YAML config not found when autowiring service into another project

我目前正在從事一個由幾個模塊組成的項目,這些模塊全部由春季管理。 我現在正在嘗試將模塊A的服務自動連接到模塊B。此服務是使用模塊A中的application.yml配置文件配置的。使用獨立版本的模塊A時,一切正常,並且配置值已正確注入到@Value("${...}")注釋的字段。 但是,如果我使用模塊B中的該服務,則由於spring無法解析注釋中給出的占位符,因此其構造失敗。

因此,將服務自動裝配到另一個項目中似乎使其無法找到配置文件。 有什么辦法解決這個問題?

謝謝你的幫助!

編輯:這是配置類的相關部分的外觀:

    @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客戶所需的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)中,則會發生上述問題。

經過大量搜索並嘗試了不同的想法來解決此問題,我終於找到了解決方案:

我從使用YAML配置文件切換為使用放置在上面發布的項目結構中提到的資源文件夾中的application.properties 這使我可以通過ElasticSearchConfig.java@PropertySource(value = "classpath:application.properties")批注指定屬性文件@PropertySource(value = "classpath:application.properties") YAML配置不可能)。 現在,即使服務自動連接到另一個模塊中,spring似乎也能夠拾取配置文件。

謝謝你的努力 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM