我正在啓動一個基於 Stephan Zerhusen's excellent SpringBoot + JWT演示的項目。它在我的SpringToolSuite項目中安裝並運行良好。我的進一步發展遇到了問題。Spring Boot - 爲什麼@ComponentScan不能使用我的軟件包組合?
我想從業務邏輯(com.mypackage)中分離出Stephan的代碼(org.zerhusen)。沒有配置我試過@SpringBootApplication和@ComponentScan已經爲我工作。
的SpringBoot啓動程序是:
package org.zerhusen;
[SNIP]
@SpringBootApplication
public class JwtDemoApplication {
public static void main(String[] args) {
SpringApplication.run(JwtDemoApplication.class, args);
}
}
如果我僅僅是從包改變org.zerhusen到com.mypackage並再次運行程序我看到:
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(我會得到JPA和MySQL版本)的接口的UserDetailsService實現的實現中只是引用:
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]
}
而且這些都不適合我。
我不想強迫所有事情都變成一個包樹 - 我如何將Stephan's的代碼與我的代碼融合在一起,而不必重寫他的? - 但我的配置沒有讓我的程序運行。
有人可以給我一個正確的配置,我的情況?
謝謝, 傑羅姆。
UPDATE ON 7/30,12:04 CDT 使用註釋我改變了@EnableJpaRepositories語句,只使用了類。隨着這種改變,應用程序正常工作。
考慮到這一點我想變化,同時註釋掉一個註解:
- 沒有@SpringBootApplication春節引導容器不啓動。
- 沒有@ComponentScan應用程序啓動。它有一個像基本認證一樣的用戶名/密碼彈出窗口,但實際上並不工作。
- 沒有@EnableJpaRepositories我被問到UserRepository
- 沒有@EntityScan Spring Boot不會啓動Tomcat。
我會取得這個成功(一個感謝所有響應者的工作應用程序),但還不明白爲什麼需要這四個註釋。
假設您使用'@EnableJpaRepositories(basePackages = {「org.zerhusen.security.repository」})'並嘗試。 –