web-dev-qa-db-ja.com

Spring Boot:ライブラリプロジェクトからのautowire Bean

GradleでインポートしたカスタムライブラリからBeanを自動配線するのに苦労しています。同様のトピックをいくつか読んだ後でも、解決策を見つけることができません。

他のプロジェクトに依存するSpring Bootプロジェクトがあります(コンポーネント、リポジトリなどのカスタムライブラリ)。このライブラリは、主にドメインのエンティティとリポジトリから構成される、Springの実行不可能なjarです。実行可能なApplication.classとプロパティはありません...

アプリケーションを起動すると、「ライブラリーからの」「CustomUserService」Beanが初期化されようとしているのがわかりますが、自動ワイヤードされたBeanはロードできませんでした(インターフェースUserRepository)...

エラー:

Com.myProject.customLibrary.configuration.CustomUserDetailsS​​erviceのコンストラクターのパラメーター0には、タイプ 'com.myProject.customLibrary.configuration.UserRepository'のBeanが必要でしたが、見つかりませんでした。

「Order」を設定して明示的にロードし(「scanBasePackageClasses」で)、パッケージとマーカークラスでスキャンし、「EnableJPARepository」アノテーションを追加しようとしましたが、何も機能しません...

コード例(パッケージ名は簡単にするために変更されました)

package runnableProject.application;

import runnableProject.application.configuration.ServerConfigurationReference.class
import com.myProject.customLibrary.SharedReference.class

//@SpringBootApplication(scanBasePackages = {"com.myProject.customLibrary", "runnableProject.configuration"}) 
//@EnableJpaRepositories("com.myProject.customLibrary")  

@SpringBootApplication(scanBasePackageClasses = {SharedReference.class, ServerConfigurationReference.class})   
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

}

ライブラリのクラス:

package com.myProject.customLibrary.configuration;

import com.myProject.customLibrary.configuration.UserRepository.class;

@Service
public class CustomUserDetailsService implements UserDetailsService {
    private UserRepository userRepository;    

    @Autowired
    public CustomUserDetailsService(UserRepository userRepository) {
        this.userRepository = userRepository;       
    }
...

package myProject.customLibrary.configuration;

@Repository
public interface UserRepository extends CustomRepository<User> {
    User findByLoginAndStatus(String var1, Status var2);

    ...
}
17
maret

ちょうど解決策を見つけました。別のライブラリーからスキャンする基本パッケージを定義する代わりに、このライブラリー内に一連のアノテーション全体で構成クラスを作成し、それをメインのMyApplication.classにインポートしました。

package runnableProject.application;    

import com.myProject.customLibrary.configuration.SharedConfigurationReference.class

@SpringBootApplication
@Import(SharedConfigurationReference.class)
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

}
package com.myProject.customLibrary.configuration;

@Configuration
@ComponentScan("com.myProject.customLibrary.configuration")
@EnableJpaRepositories("com.myProject.customLibrary.configuration.repository")
@EntityScan("com.myProject.customLibrary.configuration.domain")
public class SharedConfigurationReference {}
46
maret