0

マルチモジュールの springboot プロジェクトがあります。アーキテクチャは次のとおりです。 ここに画像の説明を入力

で注釈が付けられたクラス@SpringBootApplicationは、最上位モジュール (webservice) にあります。@SpringBootTestテストクラスで使用して、このトップモジュールから統合テストを実行すると、正常に動作します。

しかし、今はビジネス モジュールから統合テストを実行したいと考えています。@SpringBootTestビジネスモジュールに構成クラスが見つからないため、のみが機能しなくなりました。そこで、ビジネス モジュールに構成クラスを作成しました。

package com.berthoud.p7.webserviceapp.business.config;

import org.springframework.boot.SpringBootConfiguration;
import org.springframework.context.annotation.ComponentScan;

@SpringBootConfiguration
@ComponentScan(basePackages = "com.berthoud.p7")
public class TestContextConfiguration {
}

そして、私のテストクラスでは、この構成クラスを次のように指定しました:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestContextConfiguration.class)
public class BookResearchIT {
//my tests...
}

そうすることで、Spring がパッケージ com.berthoud.p7 とそのサブフォルダーで宣言されたすべての Bean をコンテキストに追加することを期待していました。実際、テストクラスでSpring Beanを自動配線すると、問題なく見えるようになりました(IntelliJは、@autowiredBeanを自動配線できないことを通知しなくなりました): ここに画像の説明を入力

それにもかかわらず、テストを実行すると、Spring はアプリケーション コンテキストの読み込みに失敗します。

***************************
APPLICATION FAILED TO START
***************************

Description:

Field bookReferenceDAO in com.berthoud.p7.webserviceapp.business.BookResearchManager required a bean of type 'com.berthoud.p7.webserviceapp.consumer.contract.BookReferenceDAO' that could not be found.

The injection point has the following annotations:
    - @org.springframework.beans.factory.annotation.Autowired(required=true)


Action:

Consider defining a bean of type 'com.berthoud.p7.webserviceapp.consumer.contract.BookReferenceDAO' in your configuration.

私はこれを理解していません。関連するBeanを宣言した方法は次のとおりです。

package com.berthoud.p7.webserviceapp.business;

@Service
public class BookResearchManager {

    @Autowired
    BookReferenceDAO bookReferenceDAO;

    @Autowired
    LibrairyDAO librairyDAO;

    @Autowired
    BookDAO bookDAO;
package com.berthoud.p7.webserviceapp.consumer.contract;

public interface BookReferenceDAO {
// method signatures
}
package com.berthoud.p7.webserviceapp.consumer.repositories.SpringDataJPA;

public interface BookReferenceRepository extends CrudRepository<BookReference, Integer>, BookReferenceDAO {

私は何を間違えましたか?

編集:私の設定クラスを次のように変更した後:

package com.berthoud.p7.webserviceapp.business.config;

import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;


@SpringBootConfiguration
@ComponentScan(basePackages = "com.berthoud.p7.webserviceapp")
@EnableJpaRepositories(basePackages = "com.berthoud.p7.webserviceapp.consumer")
@EntityScan(basePackages = "com.berthoud.p7.webserviceapp")
public class TestContextConfiguration {
}

私は今、別のエラーがあります:

Field bookReferenceDAO in com.berthoud.p7.webserviceapp.business.BookResearchManager required a bean named 'entityManagerFactory' that could not be found.
4

0 に答える 0