При попытке запустить приложение Spring Boot появляется следующая ошибка:
Примечание. Эта ошибка возникает только тогда, когда я помещаю аннотацию @Autowired
над IDeviceRepository iDeviceRepository;
в классе DeviceDao.java
Мне еще предстоит получить DeviceDao.java
для сохранения в базе данных - но сущности создаются
> ***************************
> APPLICATION FAILED TO START
> ***************************
>
> Description:
> Field iDeviceRepository in com.abc.dao.DeviceDao required a bean named 'entityManagerFactory' that could not be found.
> Action:
> Consider defining a bean named 'entityManagerFactory' in your configuration.
Это структура каталогов проекта:
├───src
│ ├───main
│ │ ├───java
│ │ │ └───com
│ │ │ └───abc
│ │ │ ├───controller
│ │ │ ├───dao
│ │ │ │ └───repositories
│ │ │ ├───init
│ │ │ ├───model
│ │ │ ├───service
│ │ │ └───util
│ │ │ ├───common
│ │ │ ├───enums
│ │ │ ├───exceptions
│ │ │ └───interfaces
│ │ └───resources
│ │ ├───static
│ │ │ ├───css
│ │ │ ├───fonts
│ │ │ ├───img
│ │ │ └───js
│ │ └───templates
com.abc.init.Application.java
package com.abc.init;
@SpringBootApplication
@EnableJpaRepositories("com.abc.dao.repositories")
@EntityScan(basePackages = { "com.abc.model" })
@ComponentScan(basePackages={ "com.abc.controller", "com.abc.service", "com.abc.dao" })
public class Application
{
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
com.abc.controller.RegisterController.java
package com.abc.controller;
@Controller
public class RegisterController
{
@Autowired
RegisterServiceImpl registerService;
@GetMapping("/register")
public String registerForm(Model model) {
model.addAttribute("device", new Device());
return "registerDevice";
}
@PostMapping("/register")
public String registerSubmit(@ModelAttribute Device device) {
registerService.registerDevice(device)
return "registerDeviceSuccess";
}
}
com.abc.service.RegisterServiceImpl.java
package com.abc.service;
@Service
public class RegisterServiceImpl implements IRegisterService
{
@Autowired
DeviceDao devDao;
public boolean registerDevice (Device device) {
devDao.saveDevice(device);
return true;
}
}
com.abc.util.interfaces.IRegisterService
package com.abc.util.interfaces;
public interface IRegisterService
{
public boolean registerDevice(Device device);
}
com.abc.dao.DeviceDao.java
package com.abc.dao;
@Repository
public class DeviceDao
{
@Autowired
IDeviceRepository iDeviceRepository;
public Device saveDevice(Device device) {
return iDeviceRepository.save(device);
}
}
com.abc.dao.repositories.IDeviceRepository.java
package com.abc.dao.repositories;
@Repository
public interface IDeviceRepository extends CrudRepository<Device, Long> {}
application.properties
# Exposed HTTP Port
server.port = 8090
# Database Configuration Parameters
spring.datasource.url=jdbc:postgresql://localhost:5432/mydb
spring.datasource.username=mydbadmin
spring.datasource.password=mydbpassword
spring.datasource.driver-class-name=org.postgresql.Driver
# Hibernate Configurations
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false
# Display SQL Commands in Terminal
spring.jpa.show-sql=true
Трассировка стека:
java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'registerController': Unsatisfied dependency expressed through field 'registerService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'registerServiceImpl': Unsatisfied dependency expressed through field 'devDao'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'deviceDao': Unsatisfied dependency expressed through field 'iDeviceRepository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'IDeviceRepository': Cannot create inner bean '(inner bean)#36dce7ed' of type [org.springframework.orm.jpa.SharedEntityManagerCreator] while setting bean property 'entityManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#36dce7ed': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' available
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'registerServiceImpl': Unsatisfied dependency expressed through field 'devDao'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'deviceDao': Unsatisfied dependency expressed through field 'iDeviceRepository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'IDeviceRepository': Cannot create inner bean '(inner bean)#36dce7ed' of type [org.springframework.orm.jpa.SharedEntityManagerCreator] while setting bean property 'entityManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#36dce7ed': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' available
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'deviceDao': Unsatisfied dependency expressed through field 'iDeviceRepository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'IDeviceRepository': Cannot create inner bean '(inner bean)#36dce7ed' of type [org.springframework.orm.jpa.SharedEntityManagerCreator] while setting bean property 'entityManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#36dce7ed': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' available
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'IDeviceRepository': Cannot create inner bean '(inner bean)#36dce7ed' of type [org.springframework.orm.jpa.SharedEntityManagerCreator] while setting bean property 'entityManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#36dce7ed': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' available
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#36dce7ed': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' available
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' available
Кто-нибудь может посоветовать, пожалуйста?