java - unable - error creating bean with name entitymanagerfactory spring boot 2
Spring Boot-Error al crear bean con el nombre ''dataSource'' definido en el recurso de ruta de clase (17)
¿Estás ejecutando la aplicación como un contenedor? (java -jar xxxx.jar)
Si es así, ¿tiene las propiedades de la aplicación almacenadas en ese contenedor?
Si no, intenta descubrir por qué:
- Para que el paquete se empaquete automáticamente, los archivos pueden estar en: src / main / resources / application.properties
- El plugin maven en pom.xml también se puede configurar
Tengo la aplicación web Spring Boot. Se centra en un enfoque RESTful. Toda la configuración parece estar en su lugar pero, por alguna razón, MainController no puede manejar la solicitud. Resulta en un error 404. ¿Como arreglarlo?
@Controller
public class MainController {
@Autowired
ParserService parserService;
@RequestMapping(value="/", method= RequestMethod.GET)
public @ResponseBody String displayStartPage(){
return "{hello}";
}
}
Solicitud
@Configuration
@ComponentScan(basePackages = "")
@EnableAutoConfiguration
public class Application extends SpringBootServletInitializer{
public static void main(final String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
protected final SpringApplicationBuilder configure(final SpringApplicationBuilder application) {
return application.sources(Application.class);
}
}
ParserController
@RestController
public class ParserController {
@Autowired
private ParserService parserService;
@Autowired
private RecordDao recordDao;
private static final Logger LOG = Logger.getLogger(ParserController.class);
@RequestMapping(value="/upload", method= RequestMethod.POST)
public @ResponseBody String fileUploadPage(
}
}
ACTUALIZAR
Parece que MySQL no puede ser inicializado por Spring ...
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration'': Injection of autowired dependencies failed;
nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.sql.DataSource org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.dataSource;
nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''dataSource'' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration$NonEmbeddedConfiguration.class]: Instantiation of bean failed;
nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public javax.sql.DataSource org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration.dataSource()] threw exception;
nested exception is org.springframework.beans.factory.BeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath.
ACTUALIZACIÓN2
application.properties
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/logparser
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.database = MYSQL
spring.jpa.show-sql = true
# Hibernate
hibernate.dialect: org.hibernate.dialect.MySQL5Dialect
hibernate.show_sql: true
hibernate.hbm2ddl.auto: update
entitymanager.packagesToScan: /
ACTUALIZACIÓN4
Parece que los controladores lite no responden aunque se hayan establecido @RequestMapping
. ¿Por qué podría ser?
PD. Ocurre cuando ejecuto la
test
ciclo de vida de Maven. Cuando se ejecuta en modo degub en IntelliJ, no se genera ningún error.
ACTUALIZACIÓN5
También uso este DAO como se explica en el tutorial ...
public interface RecordDao extends CrudRepository<Record, Long> {
}
http://blog.netgloo.com/2014/10/27/using-mysql-in-spring-boot-via-spring-data-jpa-and-hibernate/
ACTUALIZACIÓN6
Cambié las propiedades de mi aplicación. Y probé todas las combinaciones, pero se niega a funcionar. ; (
Salida Maven:
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running IntegrationTest
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 2.365 sec <<< FAILURE! - in IntegrationTest
saveParsedRecordsToDatabase(IntegrationTest) Time elapsed: 2.01 sec <<< ERROR!
java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:99)
at org.springframework.test.context.DefaultTestContext.getApplicationContext(DefaultTestContext.java:101)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:331)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:213)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:290)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:292)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:233)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:87)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:176)
at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration'': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.sql.DataSource org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.dataSource; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''dataSource'' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration$NonEmbeddedConfiguration.class]: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public javax.sql.DataSource org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration.dataSource()] threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath.
Compruebe que tiene la dependencia de la base de datos en el grupo de tiempo de ejecución en build.gradle
runtime group: ''com.h2database'', name: ''h2'', version: ''1.4.194''
o cambie el alcance de la prueba al tiempo de ejecución si usa Maven
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.194</version>
<scope>runtime</scope>
</dependency>
Desde el aspecto de las cosas, no has pasado suficientes datos a Spring Boot para configurar el origen de datos
Cree / En su application.properties
existente agregue lo siguiente
spring.datasource.driverClassName=
spring.datasource.url=
spring.datasource.username=
spring.datasource.password=
asegurándose de agregar un valor para cada una de las propiedades.
En mi caso, esto estaba sucediendo porque org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.dataSource es un campo autocadenado sin un Calificador y estoy usando múltiples fuentes de datos con nombres calificados. Resolví este problema usando @Primary arbitrariamente en una de mis configuraciones de beans de DataSource como
@Primary
@Bean(name="oneOfManyDataSources")
public DataSource dataSource() { ... }
Supongo que quieren que implementes AbstractRoutingDataSource, y luego esa configuración automática solo funcionará porque no se necesita ningún calificador, solo tienes un único origen de datos que permite que tus beans se resuelvan en el DataSource apropiado según sea necesario. Entonces no necesitas las anotaciones @Primary o @Qualifier en absoluto, porque solo tienes un solo DataSource.
En cualquier caso, mi solución funcionó porque mis beans especifican DataSource por calificador, y la configuración automática de JPA es feliz porque tiene un único DataSource principal. De ninguna manera estoy recomendando esto como la forma "correcta" de hacer las cosas, pero en mi caso resolvió el problema rápidamente y no disuadió el comportamiento de mi aplicación de manera notable. Esperemos que algún día podamos implementar AbstractRoutingDataSource y refacturar todos los beans que necesiten un DataSource específico y quizás sea una solución más ordenada.
En mi caso, simplemente ignoré lo siguiente en el archivo application.properties:
# Hibernate
# spring.jpa.hibernate.ddl-auto = actualización
Esto funciona para mi....
Estaba enfrentando este problema incluso después de suministrar todas las propiedades de origen de datos requeridas en application.properties. Luego me di cuenta de que la clase de configuración de propiedades no estaba siendo escaneada por Spring boot porque estaba en una jerarquía de paquetes diferente en comparación con mi Spring boot Application.java y, por lo tanto, no se aplicaron propiedades al objeto de fuente de datos. Cambié el nombre del paquete de la clase de configuración de mis propiedades y comenzó a funcionar.
Este problema aparece mientras ejecuta Test. Añadir dependencia
testCompile group: ''com.h2database'', name: ''h2'', version: ''1.4.197''
Agregue los recursos de la carpeta bajo fuente de prueba agregue el archivo bootstrap.yml y proporcione contenido.
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
url: jdbc:h2:mem:TEST
driver-class-name: org.h2.Driver
username: username
password: password
hikari:
idle-timeout: 10000
esto configurará su fuente de datos.
Estuve enfrentando el mismo problema durante varios días, y finalmente el problema no está en el código, el problema proviene de maven, debe eliminar todos los archivos que descargó de su disco duro "C: / Users / username.m2 / repositorio ", y hacer otra actualización maven para su proyecto, que solucionará su problema.
Las propiedades hibernate.*
Son inútiles, deberían ser propiedades spring.jpa.*
. Sin mencionar que está intentando anular los que ya se establecieron utilizando las propiedades spring.jpa.*
. (Para la explicación de cada propiedad, sugiero una lectura de la guía de referencia de Spring Boot.
spring.jpa.database-platform = org.hibernate.dialect.MySQL5Dialect
spring.jpa.show-sql = true
# Hibernate
spring.jpa.hibernate.ddl-auto=update
Además, los paquetes para escanear se detectan automáticamente según el paquete base de su clase de Application
. Si desea especificar algo más, use la anotación @EntityScan
. Además, especificar el paquete más nuevo no es muy acertado ya que escaneará toda la ruta de clase, lo que afectará gravemente el rendimiento.
Me funcionó, puedes probar tu: agrega esto a las opciones de VM en Tomcat
-DdevBaseDir="C:/Your_Project_Dir_Path"
No está directamente relacionado con la pregunta original, pero esto será útil para alguien. Este error se me ocurrió con una estructura simple de dos proyectos. Un proyecto manejaba algunas operaciones de base de datos con jdbc de primavera (digamos A) y el otro no tenía ninguna operación de jdbc (digamos B). Pero aún así apareció este error mientras comenzaba el servicio B. Decir que el origen de datos debería inicializarse correctamente.
Como descubrí que había agregado esta dependencia al pom padre de los dos módulos
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
Esto causó que la primavera inicializara las dependencias jdbc para el proyecto B también. Entonces, lo moví al poject A de A, todo estaba bien.
Espero que esto ayude a alguien
Obtuve el mismo error, descubrí que se debía a algunas de las dependencias que faltaban en mi pom.xml, como la de Spring JPA, Hibernate, Mysql o tal vez jackson. Así que asegúrese de que las dependencias no falten en su pom.xml y compruebe la compatibilidad de sus versiones.
<!-- Jpa and hibernate -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.0.3.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
Ofrecerle algo diferente, cuando encuentre este tipo de error, no podrá crear un origen de datos de bean en un caso de prueba.
Puede ser causado por algunas razones:
- Sin fuente de datos, necesitará crear su fuente de datos, fuente de datos h2 en memoria o lo que sea, o puede elegir la forma como
exclude={datasource··}
. - Usted tiene su fuente de datos, como MySQL, pero aún no funciona. Fue causado por la clase
AutoConfigureTestDatabase
, elegirá una fuente de datos para usted que puede causar ambigüedad.
Solución: agregue @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
para evitar reemplazar el origen de datos predeterminado.
Parece que el problema inicial es con la configuración automática.
Si no necesita el origen de datos, simplemente elimínelo del proceso de configuración automática:
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
Quizás olvidaste el controlador MySQL JDBC.
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency>
Si está utilizando application.properties en la aplicación de arranque de primavera, simplemente coloque la siguiente línea en application.properties y debería funcionar:
spring.datasource.url: jdbc: mysql: // google /? cloudSqlInstance = & socketFactory = com.google.cloud.sql.mysql.SocketFactory & user = **** & password = ****
cambiar debajo de la línea de código
spring.datasource.driverClassName
a
spring.datasource.driver-class-name