2014-02-23 7 views
7

Ich versuche, eine einfache Web-Anwendung mit Spring Boot zu bauen. Wenn ich die Anwendung neu starte, werden alle Datenbanktabellen neu erstellt. Ich habe versucht, hibernate.hbm2ddl.auto zu update oder validate zu setzen, aber das hilft nicht.Disable Tabelle Erholung in Spring Boot-Anwendung

Dies ist meine Konfiguration:

@ComponentScan 
@EnableAutoConfiguration 
@EnableHypermediaSupport 
@EnableSpringDataWebSupport 
public class ApplicationConfig { 

    @Bean 
    public DataSource dataSource() { 
     DriverManagerDataSource datasource = new DriverManagerDataSource(); 
     datasource.setDriverClassName("org.postgresql.Driver"); 
     datasource.setUrl("jdbc:postgresql://localhost/mydatabase"); 
     datasource.setUsername("myusername"); 
     datasource.setPassword("mypassword"); 
     return datasource; 
    } 

    @Bean 
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource, JpaVendorAdapter jpaVendorAdapter) { 
     LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean(); 
     lef.setDataSource(dataSource); 
     lef.setJpaVendorAdapter(jpaVendorAdapter); 
     lef.setPackagesToScan("my.domain.package"); 
     Properties jpaProperties = new Properties(); 
     jpaProperties.setProperty("hibernate.hbm2ddl.auto", "update"); 
     lef.setJpaProperties(jpaProperties); 
     return lef; 
    } 

    @Bean 
    public JpaVendorAdapter jpaVendorAdapter() { 
     HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter(); 
     hibernateJpaVendorAdapter.setShowSql(false); 
     hibernateJpaVendorAdapter.setGenerateDdl(true); 
     hibernateJpaVendorAdapter.setDatabase(Database.POSTGRESQL); 
     return hibernateJpaVendorAdapter; 
    } 

    @Bean 
    public PlatformTransactionManager transactionManager() { 
     return new JpaTransactionManager(); 
    } 

    public static void main(String[] args) { 
     SpringApplication.run(ApplicationConfig.class, args); 
    } 
} 

Mit debug ich diese bekommen (etwas gefiltert):

2014-02-23 18:17:30.735 INFO 27716 --- [   main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot[email protected]66e43eb8: startup date [Sun Feb 23 18:17:30 CET 2014]; root of context hierarchy 
2014-02-23 18:17:31.354 INFO 27716 --- [   main] o.s.b.f.s.DefaultListableBeanFactory  : Overriding bean definition for bean 'pageableResolver': replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.data.web.config.HateoasAwareSpringDataWebConfiguration; factoryMethodName=pageableResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/data/web/config/HateoasAwareSpringDataWebConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.data.web.config.HateoasAwareSpringDataWebConfiguration; factoryMethodName=pageableResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/data/web/config/HateoasAwareSpringDataWebConfiguration.class]] 
2014-02-23 18:17:31.355 INFO 27716 --- [   main] o.s.b.f.s.DefaultListableBeanFactory  : Overriding bean definition for bean 'sortResolver': replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.data.web.config.HateoasAwareSpringDataWebConfiguration; factoryMethodName=sortResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/data/web/config/HateoasAwareSpringDataWebConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.data.web.config.HateoasAwareSpringDataWebConfiguration; factoryMethodName=sortResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/data/web/config/HateoasAwareSpringDataWebConfiguration.class]] 
2014-02-23 18:17:31.726 INFO 27716 --- [   main] o.s.b.f.s.DefaultListableBeanFactory  : Overriding bean definition for bean 'viewResolver': replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=thymeleafConfig; factoryMethodName=viewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [be/**************/******/ThymeleafConfig.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter; factoryMethodName=viewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class]] 
2014-02-23 18:17:32.159 INFO 27716 --- [   main] o.s.b.f.s.DefaultListableBeanFactory  : Overriding bean definition for bean 'transactionManager': replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=applicationConfig; factoryMethodName=transactionManager; initMethodName=null; destroyMethodName=(inferred); defined in class **.**************.******.ApplicationConfig] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; factoryMethodName=transactionManager; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]] 
2014-02-23 18:17:32.160 INFO 27716 --- [   main] o.s.b.f.s.DefaultListableBeanFactory  : Overriding bean definition for bean 'entityManagerFactory': replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=applicationConfig; factoryMethodName=entityManagerFactory; initMethodName=null; destroyMethodName=(inferred); defined in class **.**************.******.ApplicationConfig] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; factoryMethodName=entityManagerFactory; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]] 
2014-02-23 18:17:32.160 INFO 27716 --- [   main] o.s.b.f.s.DefaultListableBeanFactory  : Overriding bean definition for bean 'jpaVendorAdapter': replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=applicationConfig; factoryMethodName=jpaVendorAdapter; initMethodName=null; destroyMethodName=(inferred); defined in class **.**************.******.ApplicationConfig] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; factoryMethodName=jpaVendorAdapter; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]] 
2014-02-23 18:17:33.031 INFO 27716 --- [   main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [class org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerByCGLIB$$9ca466b9] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 
2014-02-23 18:17:33.074 INFO 27716 --- [   main] trationDelegate$BeanPostProcessorChecker : Bean 'transactionAttributeSource' of type [class org.springframework.transaction.annotation.AnnotationTransactionAttributeSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 
2014-02-23 18:17:33.092 INFO 27716 --- [   main] trationDelegate$BeanPostProcessorChecker : Bean 'transactionInterceptor' of type [class org.springframework.transaction.interceptor.TransactionInterceptor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 
2014-02-23 18:17:33.102 INFO 27716 --- [   main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.config.internalTransactionAdvisor' of type [class org.springframework.transaction.interceptor.BeanFactoryTransactionAttributeSourceAdvisor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 
2014-02-23 18:17:33.779 INFO 27716 --- [   main] o.apache.catalina.core.StandardService : Starting service Tomcat 
2014-02-23 18:17:33.779 INFO 27716 --- [   main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/7.0.42 
2014-02-23 18:17:33.909 INFO 27716 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]  : Initializing Spring embedded WebApplicationContext 
2014-02-23 18:17:33.909 INFO 27716 --- [ost-startStop-1] o.s.web.context.ContextLoader   : Root WebApplicationContext: initialization completed in 3177 ms 
2014-02-23 18:17:35.028 INFO 27716 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]  : Initializing Spring FrameworkServlet 'dispatcherServlet' 
2014-02-23 18:17:35.028 INFO 27716 --- [ost-startStop-1] o.s.web.servlet.DispatcherServlet  : FrameworkServlet 'dispatcherServlet': initialization started 
2014-02-23 18:17:35.124 INFO 27716 --- [ost-startStop-1] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 
2014-02-23 18:17:35.385 INFO 27716 --- [ost-startStop-1] o.s.j.d.DriverManagerDataSource   : Loaded JDBC driver: org.postgresql.Driver 
2014-02-23 18:17:35.457 INFO 27716 --- [ost-startStop-1] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'default' 
2014-02-23 18:17:35.592 INFO 27716 --- [ost-startStop-1] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {4.0.1.Final} 
2014-02-23 18:17:35.622 INFO 27716 --- [ost-startStop-1] org.hibernate.Version     : HHH000412: Hibernate Core {4.2.1.Final} 
2014-02-23 18:17:35.627 INFO 27716 --- [ost-startStop-1] org.hibernate.cfg.Environment   : HHH000205: Loaded properties from resource hibernate.properties: {hibernate.bytecode.use_reflection_optimizer=false, hibernate.hbm2ddl.auto=validate} 
2014-02-23 18:17:35.628 INFO 27716 --- [ost-startStop-1] org.hibernate.cfg.Environment   : HHH000021: Bytecode provider name : javassist 
2014-02-23 18:17:35.655 INFO 27716 --- [ost-startStop-1] org.hibernate.ejb.Ejb3Configuration  : HHH000204: Processing PersistenceUnitInfo [ 
    name: default 
    ...] 
2014-02-23 18:17:35.899 INFO 27716 --- [ost-startStop-1] o.h.s.j.c.i.ConnectionProviderInitiator : HHH000130: Instantiating explicit connection provider: org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider 
2014-02-23 18:17:36.256 INFO 27716 --- [ost-startStop-1] org.hibernate.dialect.Dialect   : HHH000400: Using dialect: org.hibernate.dialect.PostgreSQL82Dialect 
2014-02-23 18:17:36.268 INFO 27716 --- [ost-startStop-1] o.h.e.jdbc.internal.LobCreatorBuilder : HHH000424: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException 
2014-02-23 18:17:36.284 INFO 27716 --- [ost-startStop-1] o.h.e.t.i.TransactionFactoryInitiator : HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactory 
2014-02-23 18:17:36.292 INFO 27716 --- [ost-startStop-1] o.h.h.i.ast.ASTQueryTranslatorFactory : HHH000397: Using ASTQueryTranslatorFactory 
2014-02-23 18:17:36.481 INFO 27716 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000227: Running hbm2ddl schema export 
Hibernate: alter table project drop constraint FK_4725849e7c4543e3885bbd3a3a9 
2014-02-23 18:17:36.488 ERROR 27716 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000389: Unsuccessful: alter table project drop constraint FK_4725849e7c4543e3885bbd3a3a9 
2014-02-23 18:17:36.488 ERROR 27716 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport : ERROR: constraint "fk_4725849e7c4543e3885bbd3a3a9" of relation "project" does not exist 
Hibernate: alter table project drop constraint FK_56d354acd26e412daa99d5584ff 
2014-02-23 18:17:36.489 ERROR 27716 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000389: Unsuccessful: alter table project drop constraint FK_56d354acd26e412daa99d5584ff 
2014-02-23 18:17:36.489 ERROR 27716 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport : ERROR: constraint "fk_56d354acd26e412daa99d5584ff" of relation "project" does not exist 
Hibernate: drop table if exists company cascade 
Hibernate: drop table if exists project cascade 
Hibernate: create table company (id serial not null, name varchar(255), primary key (id)) 
Hibernate: create table project (id serial not null, reference varchar(255), company int4, primary key (id)) 
Hibernate: alter table project add constraint FK_4725849e7c4543e3885bbd3a3a9 foreign key (company) references company 
2014-02-23 18:17:36.577 INFO 27716 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000230: Schema export complete 
+0

Es ist wahrscheinlich diese Zeile: 'hibernateJpaVendorAdapter.setGenerateDdl (true);' –

+0

'hibernateJpaVendorAdapter.setGenerateDdl (false)' hilft auch nicht. – user3170702

+0

Können Sie Ihre App mit "--debug" (in der Befehlszeile) oder '-Ddebug' (Systemeigenschaft) starten und den Autokonfigurationsbericht (oder Teile davon, die Hibernate oder JPA erwähnen) anhängen? Ich denke, Sie kontrollieren die JPA-Konfiguration vollständig dort, aber es wäre gut, nur zu überprüfen. –

Antwort

10

Ihre Konfiguration ist keine Klasse .

Darüber hinaus schlage ich vor, dass Sie die Macht des Frühlings-Boot verwenden. Was bedeutet, würde ich vorschlagen, alles, aber die DataSource Konfiguration zu entfernen und einfach mit den folgenden Eigenschaften

spring.jpa.database=POSTGRESQL 
spring.jpa.show-sql=false 
spring.jpa.hibernate.ddl-auto=update 

Dies sollten Sie das gewünschte Verhalten, mit weniger Codierung eine application.properties Datei hinzufügen.

Sie könnten sogar entfernen Sie die Datenquelle, wenn Sie entweder commons-dbcp oder tomcat-Pool in Ihrem Classpath haben und die folgenden Eigenschaften

spring.datasource.driver-class-name=org.postgresql.Driver 
spring.datasource.url=jdbc:postgresql://localhost/mydatabase 
spring.datasource.username=myusername 
spring.datasource.password=mypassword 
+0

yeah !!! Danke vielmals! –

0

Ihre ApplicationConfig ist nicht @Configuration. Ich stelle mir vor, dass die Spring Boot Autokonfigation auch angewendet wird. Können Sie das hinzufügen?

+0

Hinzugefügt @Configuration, aber es funktioniert immer noch nicht ... – user3170702

2

Wenn Sie Feder Boot verwenden, können Sie es durch Konfiguration tun könnte über die Konfigurationsdatei. Hibernate hat all diese Möglichkeiten:

  1. validate (validieren das Schema)
  2. Aktualisierung (Update das Schema, wenn Änderungen)
  3. erstellen (Erstellen Sie das Schema)
  4. erstellen Drop (erstellen das Schema und legen Sie es am Ende)

aber wenn Sie nichts tun wollen, Frühling Boot andere Möglichkeit hinzuzufügen, verwenden Sie wie folgt vor:

spring: 
    jpa: 
    hibernate: 
     ddl-auto: none