![](/img/trans.png)
[英]Spring boot: Consider defining a bean of type 'com.repository.services.interfacename' in your configuration
[英]Consider defining a bean of type 'com.repository.UserRepository' in your configuration
您好,我正在使用 spring 引導中的 Java 配置進行 JPA 和 Hibernate 配置,我在這個錯誤中停留了幾個小時。 即使我已將 UserRepository 聲明為 bean,它仍然無法獲取存儲庫。
package com.repository;
@Repository
public interface UserRepository extends JpaRepository<User, Long> {}
我的服務 class 正在使用這個存儲庫:
package com.service;
@Service
public class AppointmentPaymentServiceImpl implements AppointmentPaymentService {
@Autowired
private UserRepository userRepository;
......
......
}
我的數據庫配置:
package com.config;
@Configuration
@PropertySource(value = { "classpath:application.properties" })
@EnableTransactionManagement
@EnableJpaRepositories("com.repository.*")
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})
public class DBConfig {
@Value("${spring.datasource.driver-class-name}")
public String driver;
@Value("${spring.datasource.url}")
public String url;
@Value("${spring.datasource.username}")
public String username;
@Value("${spring.datasource.password}")
public String password;
@Value("${spring.jpa.properties.hibernate.dialect}")
public String dialect;
@Value("${spring.jpa.hibernate.ddl-auto}")
public String ddl;
@Bean(name = "dataSource")
public DriverManagerDataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
@Bean(name = "sessionFactory")
public LocalSessionFactoryBean hibernateSessionFactory(DataSource dataSource) {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
sessionFactory.setPackagesToScan(new String[] { "com.model.*" });
sessionFactory.setHibernateProperties(hibernateProperties());
return sessionFactory;
}
@Bean
HibernateTransactionManager transactionManagerHib(SessionFactory sessionFactory) {
HibernateTransactionManager transactionManager = new HibernateTransactionManager();
transactionManager.setSessionFactory(sessionFactory);
return transactionManager;
}
/*@Bean
@Qualifier(value = "entityManager")
public EntityManager entityManager(EntityManagerFactory entityManagerFactory) {
return entityManagerFactory.createEntityManager();
}*/
@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
return new PersistenceExceptionTranslationPostProcessor();
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setDatabase(Database.MYSQL);
vendorAdapter.setGenerateDdl(true);
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource());
em.setPackagesToScan("com.model.*");
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaProperties(hibernateProperties());
return em;
}
@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory emf){
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(emf);
return transactionManager;
}
Properties hibernateProperties() {
return new Properties() {
{
setProperty("hibernate.hbm2ddl.auto", ddl);
setProperty("hibernate.connection.useUnicode", "true");
setProperty("spring.jpa.hibernate.ddl-auto", ddl);
setProperty("hibernate.dialect", dialect);
setProperty("spring.jpa.properties.hibernate.dialect", dialect);
setProperty("hibernate.globally_quoted_identifiers", "true");
setProperty("hibernate.connection.CharSet", "utf8mb4");
setProperty("hibernate.connection.characterEncoding", "utf8");
}
};
}
}
這是我的主 class:
package com;
@SpringBootApplication
@ComponentScan(basePackages = { "com.*"})
@EnableCaching
@Configuration
@PropertySource({"classpath:logging.properties"})
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class, args);
}
}
我的 pom.xml 包含 hibernate 和 jpa 的這些依賴項,如果我只使用 spring 數據 jpa 然后 hibernate-core 5.0.12.Final 是默認導入的,我不想要:
<dependencies>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
</dependency>
.
.
.
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.10.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.2.3.Final</version>
</dependency>
</dependencies>
錯誤:
***************************
APPLICATION FAILED TO START
***************************
Description:
Field userRepository in com.service.AppointmentPaymentServiceImpl required a bean of type 'com.repository.UserRepository' that could not be found.
Action:
Consider defining a bean of type 'com.repository.UserRepository' in your configuration.
我的用戶實體:
package com.model;
@Entity
@Table(name = "USER")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name = "id")
private Long id;
@NotNull
@Column(name = "city_id")
private Long cityId;
@Column(name = "name")
private String name;
@Column(name = "age")
private int age;
@Column(name = "locality")
private String locality;
@Column(name = "gender")
private String gender;
}
在主 Spring Boot 應用程序類中添加以下注釋解決了我的問題:
@ComponentScan("com.myapp.repositories")
您的@EnableJpaRepositories
注釋是錯誤的。 您不會以這種方式定義存儲庫所在的包。
假設他們駐留的包被稱為:
foo.somepackage.repositories
那么你的注解應該是@EnableJpaRepositories("foo.somepackage.repositories")
。
嘗試更正注釋,以便正確且正確地掃描您的存儲庫包,以便將它們帶入上下文。
我認為您的代碼必須在com.xyz.abc.model
下組織, @EnableJpaRepostiories
應該可以工作。 例如: com.xyz.abc.repository
, com.xyz.abc.service
只需將AppointmentPaymentServiceImpl
和UserRepository
放在同一個包中,這對我來說是com.
我有同樣的問題。 我只是將存儲庫從我的工作項目復制到一個新項目,並且在考慮定義類型為 com.[packagename].repository.[repository-name] 的 bean 時遇到了同樣的錯誤。 以上沒有對我有用,后來我做了以下事情:
移除了 POM 文件中 JPA 依賴的版本(只是移除了版本標簽)
我使用的是 Java 15,當我從 start.spring.io 創建 SpringBoot 項目時,只有 11 和 16 個 fava 版本。 所以我為我的項目選擇了 11。 我也在 POM 文件中改變了它
15(之前是11)現在我刪除了主文件中的 @ComponentScan 注釋,這也是早期對我有用的解決方案。
只需使緩存無效並重新啟動
輸入 mvn 全新安裝
mvn clean spring-boot:run 希望這對你也有用
將以下任一注釋添加到 spring 啟動應用程序的主 class。 他們兩個都為我工作。
@ComponentScan("com.abc.repository")
@EnableAutoConfiguration
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.