I am creating an utility in Spring, the use of Tomcat, Mysql5, Java8... The drawback is that I can't deploy it, because of "required bean 'entityManagerFactory' not found" downside. I've developed this project with my coworkers but they can completely deploy it with any issues, although I replica-paste the similar undertaking in Spring Tool Suite. How can be conceivable? Error:
2016-12-15 17:41:12.777 WARN 3676 --- [ main] ationConfigEmbeddedWebApplicationContext : Exception encountered all the way through context initialization - cancelling refresh try: org.springframework.beans.factory.UnsatisfiedDependencyException: Error growing bean with title 'controlador': Unsatisfied dependency expressed through box 'usuarioDao'; nested exception is org.springframework.beans.manufacturing facility.BeanAdventException: Error developing bean with name 'usuarioRepository': Cannot create internal bean '(inside bean)#59e43e8c' of kind [org.springframework.orm.jpa.SharedEntityManagerAuthor] while environment bean property 'entityManager'; nested exception is org.springframework.beans.manufacturing unit.BeanAdventException: Error growing bean with identify '(interior bean)#59e43e8c': Cannot get to the bottom of connection with bean 'entityManagerFactory' whilst atmosphere constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerManufacturing facility' available 2016-12-15 17:41:12.783 INFO 3676 --- [ primary] o.apache.catalina.core.StandardService : Stopping service Tomcat 2016-12-15 17:41:12.807 WARN 3676 --- [ost-startStop-1] o.a.c.loader.WebappClassLoaderBase : The internet utility [ROOT] appears to have started a thread named [Abandoned connection cleanup thread] however has failed to forestall it. This may be very more likely to create a reminiscence leak. Stack hint of thread: 2016-12-15 17:41:12.826 INFO 3676 --- [ main] utoConfigurationReportLoggingInitializer : Error starting ApplicationContext. To show the automobile-configuration record re-run your utility with 'debug' enabled. 2016-12-15 17:41:12.940 ERROR 3676 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPLICATION FAILED TO START *************************** Description: Field usuarioDao in es.uc3m.tiw.Controladores.Controlador required a bean named 'entityManagerManufacturing unit' that could not be found. Action: Consider defining a bean named 'entityManagerManufacturing facility' in your configuration. Here is my pom.xml
<?xml version="1.0" encoding="UTF-8"?> <venture xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <workforceId>es.uc3m.tiw</crewId> <artifactId>Cliente</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <identify>Cliente</name> <description>Demo undertaking for Spring Boot</description> <parent> <workforceId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mum or dad</artifactId> <model>1.4.2.RELEASE</version> <relativePath/> <!-- look up parent from repository --> </dad or mum> <homes> <venture.build.sourceEncoding>UTF-8</challenge.build.sourceEncoding> <mission.reporting.outputEncoding>UTF-8</undertaking.reporting.outputEncoding> <java.version>1.8</java.model> </homes> <dependencies> <dependency> <teamId>org.springframework.boot</workforceId> <artifactId>spring-boot-starter-internet</artifactId> </dependency> <dependency> <workforceId>org.springframework.boot</crewId> <artifactId>spring-boot-starter-take a look at</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</staffId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</staffId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <crewId>org.springframework.boot</workforceId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </venture> Here is my repository
package deal es.uc3m.tiw.Daos; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import es.uc3m.tiw.dominios.Usuario; public interface UsuarioRepository extends JpaRepository<Usuario, Long> List<Usuario> findAll(); Usuario findByNombre(String nombre); Here is my controller
package deal es.uc3m.tiw.Controladores; import java.util.List; import org.springframework.beans.manufacturing facility.annotation.Autowired; import org.springframework.internet.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.internet.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import es.uc3m.tiw.Daos.AdministradorRepository; import es.uc3m.tiw.Daos.UsuarioRepository; import es.uc3m.tiw.dominios.Administrador; import es.uc3m.tiw.dominios.Usuario; @RestController public magnificence Controlador @Autowired non-public UsuarioRepository usuarioDao; private AdministradorRepository administradorDao; @RequestMapping(value="/registroUsuario", method = RequestMethod.POST) public @ResponseBody Usuario registrarUsuario(@RequestBody Usuario usuarioARegistrar) usuarioDao.save(usuarioARegistrar); //guardar, editar, borrar, findbyOne(Primary key) son métodos que vienen implementados ya en el CrudRepository return usuarioARegistrar; @RequestMapping(value="/editarUsuario", manner = RequestMethod.POST) public @ResponseBody Usuario editarUsuario(Usuario usuarioAEditar) usuarioAEditar.setNombre(usuarioAEditar.getNombre()); usuarioAEditar.setApellidos(usuarioAEditar.getApellidos()); usuarioAEditar.setCiudad(usuarioAEditar.getCiudad()); usuarioAEditar.setEmail(usuarioAEditar.getEmail()); usuarioAEditar.setPassword(usuarioAEditar.getPassword()); usuarioDao.save(usuarioAEditar); return usuarioAEditar; @RequestMapping(price="/eliminarUsuario", method = RequestMethod.DELETE) public @ResponseBody Usuario eliminarUsuario(Usuario usuarioAEliminar) usuarioDao.delete(usuarioAEliminar); return usuarioAEliminar; @RequestMapping(price="/validar" ,approach = RequestMethod.POST) public @ResponseBody Usuario loginUsuario(@RequestBody Usuario usuarioPendiente) Usuario usuarioLogeado = null; List <Usuario> usuarios = usuarioDao.findAll(); usuarioLogeado = comprobarUsuario(usuarios, usuarioPendiente.getEmail(),usuarioPendiente.getPassword()); go back usuarioLogeado; @RequestMapping(worth="/verPerfilUsuario", manner = RequestMethod.GET) public @ResponseBody Usuario verPerfilUsuario(Usuario usuarioAMostrar) usuarioAMostrar.getNombre(); usuarioAMostrar.getApellidos(); usuarioAMostrar.getCiudad(); usuarioAMostrar.getEmail(); usuarioAMostrar.getPassword(); return usuarioAMostrar; @RequestMapping(price="/loginAdministrador" ,manner = RequestMethod.POST) public @ResponseBody Administrador loginAdministrador(@RequestBody Administrador administradorPendiente) Administrador administradorLogeado = null; List <Administrador> administradores = administradorDao.findAll(); administradorLogeado = comprobarAdministrador(administradores, administradorPendiente.getEmail(),administradorPendiente.getPassword()); go back administradorLogeado; private Usuario comprobarUsuario( List<Usuario> usuarios, String e-mail, String password) Usuario u = null; for (Usuario usuario : usuarios) if (e mail.equals(usuario.getEmail()) && password.equals(usuario.getPassword())) u = usuario; spoil; return u; private Administrador comprobarAdministrador( List<Administrador> administradores, String electronic mail, String password) Administrador advert = null; for (Administrador administrador : administradores) if (e-mail.equals(administrador.getEmail()) && password.equals(administrador.getPassword())) advert = administrador; //smash; go back advert; Application.homes
server.port=8010 spring.datasource.url=jdbc:mysql://localhost:3306/tiw spring.datasource.username=root spring.datasource.password=admin spring.datasource.driving force-class-name = com.mysql.jdbc.Driver spring.jpa.hibernate.ddl-auto = update Entity
package es.uc3m.tiw.dominios; import java.io.Serializable; import javax.endurance.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.patience.GenerationType; import javax.endurance.Id; import javax.persistence.Table; @Entity @Table(name="USUARIOS") public magnificence Usuario implements Serializable non-public static ultimate long serialVersionUID = 1L; @Id @GeneratedValue(technique=GenerationType.AUTO) private lengthy identification; @Column(period = 25) non-public String nombre; @Column(duration = 25) personal String apellidos; @Column(duration = 25) non-public String ciudad; @Column(period = 25, nullable = false, unique = true) non-public String electronic mail; @Column(period = 25, nullable = false) non-public String password; public Usuario() public Usuario(lengthy identity, String nombre, String apellidos, String ciudad, String password, String e-mail) tremendous(); this.identification = identity; this.nombre = nombre; this.apellidos = apellidos; this.ciudad = ciudad; this.password = password; this.email = email; public lengthy getId() go back identification; public void setId(lengthy identity) this.identity = id; public String getNombre() return nombre; public void setNombre(String nombre) this.nombre = nombre; public String getApellidos() return apellidos; public void setApellidos(String apellidos) this.apellidos = apellidos; public String getCiudad() return ciudad; public void setCiudad(String ciudad) this.ciudad = ciudad; public String getPassword() go back password; public void setPassword(String password) this.password = password; public String getEmail() return electronic mail; public void setEmail(String electronic mail) this.e mail = e mail; Here is my main
bundle es.uc3m.tiw; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public magnificence ClienteSpringApplication public static void primary(String[] args) SpringApplication.run(ClienteSpringApplication.class, args); 213 Answers
In my case, I had the flawed dependency: spring-data-jpa. after I modified to spring-boot-starter-data-jpa, it solved the issue.
I didn't have to add any annotation @Repository nor @EnableJpa and so forth.
<dependency> <workforceId>org.springframework.boot</crewId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> 1You are lacking repository configuration, as it's a must to configure it the use of @Repository,
Following is flawed,
public interface UsuarioRepository extends JpaRepository<Usuario, Long> { Rather it will have to be configured as repository as follows,
@Repository public interface UsuarioRepository extends JpaRepository<Usuario, Long> { This will make it a bean to be scanned and treat it as a repository and then your following code will have to paintings as anticipated as smartly,
@Autowired non-public UsuarioRepository usuarioDao; 0I had very same factor. When I checked maven build log I've realised that there was once an error about hibernate applications complaining about "invalid LOC header (bad signature)". I solved through deleting sub directories under .m2\repository\org\hibernate\hibernate-core and recompiling my undertaking.
1In your ClienteSpringApplication you only have the @SpringBootApplication annotation, wich is the identical of @Configuration, @EnableAutoConfiguration and @ComponentScan. What you're lacking is the @EnableJpaRepositories annotation.
package deal es.uc3m.tiw; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @EnableJpaRepositories public elegance ClienteSpringApplication public static void major(String[] args) SpringApplication.run(ClienteSpringApplication.elegance, args); If it does not paintings like that try adding also the package of your repository:
@EnableJpaRepositories("es.uc3m.tiw.dominios") test that you simply added @Repository annotation on JpaRepository Check that you make all entity Setter and Getter blank and build then run.
pom.xml must be up to date and it works for me:
I added the next dependency:
<dependency> <groupId>javax.xml.bind</teamId> <artifactId>jaxb-api</artifactId> <model>2.3.1</model> </dependency> I confronted the same issue a while again and in my case the bundle declaration in connection configuration was once wrong. So like others mentioned, both test the annotations in SpringBootApplication magnificence or the configurations in your connectionconfiguration elegance
@Configuration @EnableTransactionManagement @EnableJpaRepositories( entityManagerFactoryRef = "someEntityManagerFactory", transactionManagerRef = "someTransactionManager", **basePackages = "com.pack.some.database.repository")** public magnificence MyConnectionConfiguration { In my case, I used to be lacking Hibernate Entity Manager dependency,
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <model>5.2.3.Final</version> </dependency> as a result of I've had most effective this one (Hibernate Core):
<dependency> <crewId>org.hibernate</staffId> <artifactId>hibernate-core</artifactId> <version>4.1.4.Final</model> </dependency> Furthermore solved adding this dependency:
<dependency> <crewId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.0</model> </dependency> as advised right here: link.
Check endurance-api in pom report and check out to modify with hibernate-jpa-2.1 which is a a part of spring-boot-began-data-jpa jar
In my case was once the h2-1.4.193.jar, that incorporates the Driver magnificence but it surely can't be learn (very ordinary, is also is corrupted), as you'll be able to see: Driver class from h2-1.4.193
So, you'll be able to replace de spring-boot-starter-dad or mum to 1.5.3.RELEASE (or newer) or override the controlled model of your h2 dependency.
Be cautious with jars dependencies loaded by way of Maven, in my case hibernate-core.jar was once corrupted, once I got rid of and set up that dependency the project runs adequate. cheers.
In my case, the problem was incompatible versions between JPA nad Spring Boot version
After attempting a dozen things, I finally gave up and added a bean to my config like it says to do, with a DataSource variable named dataSource which will get @Autowired in the constructor. Then it sought after another bean that I additionally added.
Here is the overall config, do not disregard to exchange the repository.package.location textual content with the bundle location of your repository:
@Configuration public class JpaConfiguration non-public ultimate DataSource dataSource; public JpaConfiguration(DataSource dataSource) this.dataSource = dataSource; @Bean public EntityManagerFactory entityManagerManufacturing facility() HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); vendorAdapter.setGenerateDdl(true); LocalContainerEntityManagerFactoryBean manufacturing facility = new LocalContainerEntityManagerManufacturing facilityBean(); factory.setJpaVendorAdapter(vendorAdapter); factory.setPackagesToScan("repository.package.location"); manufacturing unit.setDataSource(dataSource); manufacturing unit.afterPropertiesSet(); go back factory.getObject(); @Bean public PlatformTransactionManager transactionManager() JpaTransactionManager txManager = new JpaTransactionManager(); txManager.setEntityManagerManufacturing unit(entityManagerManufacturing unit()); go back txManager; ncG1vNJzZmirpJawrLvVnqmfpJ%2Bse6S7zGiorp2jqbawutJoa2ppZ2WDd32OrKeroZ6ceqWt05pko6iRYrCwutKim56qXZmyp7XNoqWgZZFir6atzWalmqWVmXqmutOiq7KlkaOuqLHRn5icrJ%2Bnxm61zWawqK2i