私は Stephan Zerhusen's excellent SpringBoot + JWTのデモに基づいてプロジェクトを開始しています。 SpringToolSuiteプロジェクトにインストールされて正常に動作します。私のそれ以上の発展は問題に走っています。スプリングブート - なぜ@ComponentScanはパッケージの組み合わせで動作しないのですか?
Stephanのコード(org.zerhusen)を私のビジネスロジック(com.mypackage)から分離したいと思います。 @SpringBootApplicationと@ComponentScanの試した設定は私のために働いていません。
SpringBootスタートアッププログラムは次のとおりです。
package org.zerhusen;
[SNIP]
@SpringBootApplication
public class JwtDemoApplication {
public static void main(String[] args) {
SpringApplication.run(JwtDemoApplication.class, args);
}
}
私は単に私が見プログラムを再度com.mypackageして実行するorg.zerhusenからパッケージを変更した場合:
APPLICATION FAILED TO START
***************************
Description:
Field userRepository in org.zerhusen.security.service.JwtUserDetailsServiceImpl required a bean of type 'org.zerhusen.security.repository.UserRepository' that could not be found.
Action:
Consider defining a bean of type 'org.zerhusen.security.repository.UserRepository' in your configuration.
今UserRepositoryだけですインタフェース:
package org.zerhusen.security.repository;
[SNIP]
public interface UserRepository extends JpaRepository<User, Long> {
User findByUsername(String username);
}
しかし、そのインタフェースはユーザコードで実装されていません。私はこの時点でH2を使用していますので、インターフェイスは単にUserDetailsService実装の実装内で参照されている(私は後でJPAとMySQLを取得します):
に私に言ってstackoverflowの記事がたくさんありますpackage org.zerhusen.security.service;
[SNIP]
@Service
public class JwtUserDetailsServiceImpl implements UserDetailsService {
@Autowired
private UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
[SNIP]
}
設定を使用していますが、すでに私は持っています:
@SpringBootApplication(scanBasePackages = {"org.zerhusen"})
@ComponentScan(basePackages = {"org.zerhusen"})
@EnableJpaRepositories(basePackages = {"org.zerhusen.security.repository.UserRepository"})
@EntityScan(basePackages = {"org.zerhusen"})
public class JwtDemoApplication {
[SNIP]
}
それのどれも私にとっては役に立ちません。
私はすべてを1つのパッケージツリーに強制したくありません。ステファンのコードをどのように書き直すことなく、私のコードをどのように融合できますか? - しかし私の設定は私のプログラムが動かないようにしています。
誰かが私の状況に対して正しい設定を教えてもらえますか?
ありがとう、 Jerome。私はクラスを使用して、@EnableJpaRepositoriesステートメントを変更し、コメントを使用して
UPDATE 7/30 ON、12:04 CDT 。その変更により、アプリケーションは適切に動作します。念頭に置いて
私は、一度に1つの注釈をコメントアウトし、バリエーションを試してみました:
- @SpringBootApplicationなければ春ブートコンテナが起動しません。
- @ComponentScanを指定しないと、アプリケーションが起動します。基本認証のようなユーザー名/パスワードのポップアップがありますが、それは実際には機能しません。
- @EnableJpaRepositoriesなしUserRepositoryについて質問しました
- @EntityScanを使用しない場合、Spring BootはTomcatを起動しません。
私はこの成功(すべてのレスポンダーのおかげで働くアプリケーション)を受け取りますが、これらの4つの注釈が必要な理由をまだ理解していません。
'@EnableJpaRepositories(basePackages = {" org.zerhusen.security.repository "})'を使って試してみましょう。 –