'com.repository' 유형의 빈을 정의합니다.구성의 '사용자 리포지토리'
안녕하세요. 저는 봄 부팅에서 Java 구성을 사용하여 JPA 및 최대 절전 모드 구성을 수행하고 있으며 이 오류로 인해 몇 시간 동안 꼼짝 못하고 있습니다.사용자 리포지토리를 been으로 선언했지만 리포지토리를 가져올 수 없습니다.
package com.repository;
@Repository
public interface UserRepository extends JpaRepository<User, Long> {}
이 리포지토리를 사용하는 내 서비스 클래스:
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");
}
};
}
}
그리고 이것이 제 주요 수업입니다.
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에는 스프링 데이터 jpa와 hibernate-core 5.0.12만 사용하는 경우 hibernate 및 jpa에 대한 이러한 종속성이 포함되어 있습니다.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;
}
메인 스프링 부트 애플리케이션 클래스에 다음 주석을 추가하여 이 문제를 해결했습니다.
@ComponentScan("com.myapp.reposities")
당신의.@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 유형의 빈을 정의하는 것과 같은 오류가 발생했습니다.[패키지 이름].저장소[computory-name].위의 어떤 것도 저에게 효과가 없었고 나중에 저는 다음과 같은 일을 했습니다.
POM 파일에서 JPA 종속성 버전을 제거했습니다(버전 태그만 제거함).
저는 Java 15를 사용하고 있었고 start.spring.io 에서 SpringBoot 프로젝트를 만들었을 때 11개와 16개의 fava 버전만 있었습니다.그래서 저는 제 프로젝트에 11개를 선택했습니다.저도 POM 파일에서 그것을 변경했습니다.
15(11년 전)이제 메인 파일에서 @ComponentScan 주석을 제거했는데, 이는 초기에 사용할 수 있는 해결책이기도 했습니다.
캐시를 무효화하고 다시 시작하기만 하면 됩니다.
mvn 새로 설치 입력
mvn 클린 스프링 부트: 실행 이것도 당신에게 효과가 있기를 바랍니다.
다음 주석 중 하나를 스프링 부팅 응용 프로그램의 기본 클래스에 추가합니다.둘 다 저를 위해 일했어요.
@ComponentScan("com.abc.repository")
@EnableAutoConfiguration
언급URL : https://stackoverflow.com/questions/52101936/consider-defining-a-bean-of-type-com-repository-userrepository-in-your-configu
'programing' 카테고리의 다른 글
Python의 Very Long If 문 (0) | 2023.07.17 |
---|---|
모듈로(%) 연산자는 파이썬에서 음수에서 어떻게 작동합니까? (0) | 2023.07.17 |
파이썬 요청의 응답을 읽으려면 어떻게 해야 합니까? (0) | 2023.07.17 |
TypeScript에서 함수 인터페이스를 구현할 수 있습니까? (0) | 2023.07.07 |
커서에서 '업데이트 대기'를 언제 사용해야 합니까? (0) | 2023.07.07 |