这是尝试运行我的Web应用程序时引发的错误:
[INFO] WARNING: Nested in 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.: [INFO] 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. [INFO] at org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.getDriverClassName(DataSourceProperties.java:91) [INFO] at org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration.dataSource(DataSourceAutoConfiguration.java:100) [INFO] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [INFO] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [INFO] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [INFO] at java.lang.reflect.Method.invoke(Method.java:606) [INFO] at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:115) [INFO] at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:166) [INFO] at org.springframework.beans.factory.support.ConstructorResolver$3.run(ConstructorResolver.java:580) [INFO] at java.security.AccessController.doPrivileged(Native Method) [INFO] at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:577) [INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1094) [INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:989) [INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504) [INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) [INFO] at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304) [INFO] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) [INFO] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300) [INFO] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195) [INFO] at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1017) [INFO] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:960) [INFO] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:858) [INFO] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480) [INFO] at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) [INFO] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289) [INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185) [INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537) [INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) [INFO] at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304) [INFO] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) [INFO] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300) [INFO] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195) [INFO] at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:370) [INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1094) [INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:989) [INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504) [INFO] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) [INFO] at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304) [INFO] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) [INFO] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300) [INFO] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195) [INFO] at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:973) [INFO] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:750) [INFO] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482) [INFO] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:683) [INFO] at org.springframework.boot.SpringApplication.run(SpringApplication.java:313) [INFO] at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:142) [INFO] at org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener.initWebApplicationContext(SpringBootContextLoaderListener.java:60) [INFO] at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106) [INFO] at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:548) [INFO] at org.mortbay.jetty.servlet.Context.startContext(Context.java:136) [INFO] at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250) [INFO] at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517) [INFO] at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467) [INFO] at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) [INFO] at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130) [INFO] at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) [INFO] at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130) [INFO] at org.mortbay.jetty.Server.doStart(Server.java:224) [INFO] at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) [INFO] at com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.java:249) [INFO] at com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:306) [INFO] at com.google.appengine.tools.development.AutomaticInstanceHolder.startUp(AutomaticInstanceHolder.java:26) [INFO] at com.google.appengine.tools.development.AbstractModule.startup(AbstractModule.java:79) [INFO] at com.google.appengine.tools.development.Modules.startup(Modules.java:88) [INFO] at com.google.appengine.tools.development.DevAppServerImpl.doStart(DevAppServerImpl.java:254) [INFO] at com.google.appengine.tools.development.DevAppServerImpl.access$000(DevAppServerImpl.java:47) [INFO] at com.google.appengine.tools.development.DevAppServerImpl$1.run(DevAppServerImpl.java:212) [INFO] at com.google.appengine.tools.development.DevAppServerImpl$1.run(DevAppServerImpl.java:210) [INFO] at java.security.AccessController.doPrivileged(Native Method) [INFO] at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:210) [INFO] at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:277) [INFO] at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:48) [INFO] at com.google.appengine.tools.development.DevAppServerMain.run(DevAppServerMain.java:219) [INFO] at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:210)
我相信我有正确的组合datanucleus-appengine
和datanucleus
罐子:
2.1:需要DataNucleus 3.1.x(core,api-jdo,api-jpa,enhancer).需要SDK 1.6.4+请注意,DataNucleus项目不再支持此版本的Datanucleus
JPA App配置:
@Configuration @EnableJpaRepositories("demo.core.entity") @EnableTransactionManagement class JpaApplicationConfig { private static final Logger logger = Logger .getLogger(JpaApplicationConfig.class.getName()); @Bean public AbstractEntityManagerFactoryBean entityManagerFactory() { logger.info("Loading Entity Manager..."); LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); factory.setPersistenceUnitName("transactions-optional"); return factory; } @Bean public PlatformTransactionManager transactionManager() { logger.info("Loading Transaction Manager..."); JpaTransactionManager txManager = new JpaTransactionManager(); txManager.setEntityManagerFactory(entityManagerFactory().getObject()); return txManager; } @Bean public PersistenceExceptionTranslator persistenceExceptionTranslator() { return new OpenJpaDialect(); } }
Application.java
@Configuration @ComponentScan @EnableAutoConfiguration @RestController public class Application { private static final EntityManagerFactory INSTANCE = Persistence.createEntityManagerFactory("transactions-optional"); public static void main(String[] args) { SpringApplication.run(Application.class, args); } @RequestMapping("/") public String home() { return "Hello World"; } }
POM:
4.0.0 org.demohq demo-boot 0.0.1-SNAPSHOT war demo-boot Demo project org.springframework.boot spring-boot-starter-parent 1.1.0.BUILD-SNAPSHOT org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-actuator org.springframework.boot spring-boot-starter-tomcat provided org.springframework.boot spring-boot-legacy 1.1.0.BUILD-SNAPSHOT org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-starter-data-jpa org.springframework spring-aspects com.google.appengine appengine-api-labs ${gae.version} test com.google.appengine appengine-api-stubs ${gae.version} test com.google.appengine appengine-testing ${gae.version} test org.datanucleus datanucleus-api-jpa ${datanucleus.jpa.version} org.datanucleus datanucleus-core ${datanucleus.jpa.version} org.datanucleus datanucleus-enhancer ${datanucleus.jpa.version} com.google.appengine.orm datanucleus-appengine ${datanucleus.version} org.datanucleus datanucleus-enhancer javax.jdo jdo-api 3.0.1 org.apache.geronimo.specs geronimo-jpa_2.0_spec 1.1 org.apache.openjpa openjpa-persistence 2.3.0 demo.Application UTF-8 UTF-8 1.7 / 3.1.1 2.1.2 1.8.8 ${settings.localRepository}/com/google/appengine/appengine-java-sdk/${gae.version}/appengine-java-sdk/appengine-java-sdk-${gae.version} test org.springframework.boot spring-boot-maven-plugin com.google.appengine appengine-maven-plugin ${gae.version} false maven-release-plugin gae:deploy org.apache.tomcat.maven tomcat6-maven-plugin 2.0 / org.datanucleus maven-datanucleus-plugin ${datanucleus.jpa.version} JPA true org.datanucleus datanucleus-core ${datanucleus.jpa.version} compile enhance integration-build stage release-build performRelease true release spring-snapshots Spring Snapshots http://repo.spring.io/snapshot true spring-milestones Spring Milestones http://repo.spring.io/milestone false spring-snapshots Spring Snapshots http://repo.spring.io/snapshot true spring-milestones Spring Milestones http://repo.spring.io/milestone false
我想知道我的应用程序中可能缺少什么?我按照这里的说明在Google Appengine上使用Spring Data JPA
如果您想使用Spring Boot的嵌入式H2数据库,请将以下依赖项添加到您的pom文件中.
<dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.3.156</version> </dependency>
但正如评论中所提到的,嵌入式H2数据库将数据保存在内存中,并且不会永久存储它.
您没有为Spring Boot提供足够的信息来自动配置a DataSource
.为此,您需要application.properties
使用spring.datasource
前缀添加一些属性.查看DataSourceProperties以查看可以设置的所有属性.
您需要提供相应的URL和驱动程序类名称:
spring.datasource.url = … spring.datasource.driver-class-name = …
我有同样的问题,排除DataSourceAutoConfiguration解决了这个问题.
@SpringBootApplication @EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class}) public class RecommendationEngineWithCassandraApplication { public static void main(String[] args) { SpringApplication.run(RecommendationEngineWithCassandraApplication.class, args); } }
现在我仔细观察,我认为DataSource问题是一个红色的鲱鱼.正在触发Boot的Hibernate自动配置,这就是导致需要DataSource的原因.Hibernate位于类路径上,因为你依赖于spring-boot-starter-data-jpa
它所引入的依赖hibernate-entitymanager
.
更新您的spring-boot-starter-data-jpa
依赖项以排除Hibernate:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<exclusions>
<exclusion>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
</exclusion>
</exclusions>
</dependency>
Spring启动将在application.properties文件中查找datasoure属性.
请在application.properties或yml文件中定义它
application.properties
spring.datasource.url=xxx spring.datasource.username=xxx spring.datasource.password=xxx spring.datasource.driver-class-name=xxx
如果您需要自己的配置,可以设置自己的配置文件,并在创建bean时使用数据源值.
你可以加
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
到你的application.properties
文件.
如果回答为时已晚,我不会这样做.我可以通过从Spring引导中排除DataSourceAutoConfiguration来解决这个问题.
我在使用Spring Data为ElasticSearch编写API时遇到了此异常。我做了以下工作。
@SpringDataApplication(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
这对我有用(1.3.0.M5):
import org.springframework.boot.autoconfigure.jdbc.*; import org.springframework.boot.autoconfigure.orm.jpa.*; @Configuration @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class}) public class Application {
排除这两个类.
它没有用
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
从Spring手册.
Spring Boot可以自动配置嵌入式H2,HSQL和Derby数据库.您不需要提供任何连接URL,只需包含对要使用的嵌入式数据库的构建依赖关系.
例如,典型的POM依赖关系是:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.hsqldb</groupId> <artifactId>hsqldb</artifactId> <scope>runtime</scope> </dependency>
对于我来说,抛弃spring-boot-starter-data-jpa依赖关系,只使用spring-boot-starter-jdbc依赖就像魅力一样,只要我将h2(或hsqldb)作为依赖项包含在内.