2016-06-21 5 views
0

私は春のバッチとスケジューラでアプリケーションを実行しようとします。私はddlスキーマが常に更新され、私のddlスキーマを変更したくないことがわかります。hibernateでddlスキーマを更新しないでください

私は私のapplication.propertiesファイルでこれを試してみてください。

hibernate.hbm2ddl.auto=validate|none 

しかし、それは私の問題を解決しません。私のようなコンソールログに表示さ

@Configuration 
@EnableBatchProcessing 
@EntityScan("com.package.myentity") 
@ComponentScan(basePackages = {"com.package.batch.", 
           "com.package.repository"}) 
@PropertySource("classpath:application.properties") 
public class BatchSmsJobConfig { 

    @Value("${spring.datasource.driver-class-name}") 
    private String databaseDriver; 
    @Value("${spring.datasource.url}") 
    private String databaseUrl; 
    @Value("${spring.datasource.username}") 
    private String databaseUsername; 
    @Value("${spring.datasource.password}") 
    private String databasePassword; 

    @Bean 
    public ItemReader<Souscription> reader() throws Exception { 
    java.util.Date now = new java.util.Date(); 
    java.sql.Date date = new java.sql.Date(now.getTime()); 
    String jpqlQuery = "select u from Users u"; 

    JpaPagingItemReader<Souscription> reader = new JpaPagingItemReader<Souscription>(); 
    reader.setQueryString(jpqlQuery); 
    reader.setParameterValues(Collections.<String, Object>singletonMap("date", date)); 
    reader.setEntityManagerFactory(entityManagerFactory().getObject()); 
    //reader.setPageSize(3); 
    reader.afterPropertiesSet(); 
    reader.setSaveState(true); 

    return reader; 
    } 

    @Bean 
    public SouscriptionItemProcessor processor() { 
    System.out.println("Processing!"); 
    return new SouscriptionItemProcessor(); 
    } 


    @Bean 
    public ItemWriter<Sms> writer() { 
    System.out.println("Writing info into DB!"); 
    JpaItemWriter writer = new JpaItemWriter<Sms>(); 
    writer.setEntityManagerFactory(entityManagerFactory().getObject()); 

    return writer; 
    } 

    //@Bean 
    //public JobExecutionListener listener() { 
    // return new JobCompletionNotificationListener(jdbcTemplate); 
    //} 

    @Bean 
    public Job sendSMStoSubscribersJob(JobBuilderFactory jobs, Step s1) { 

    return jobs.get("import") 
     .incrementer(new RunIdIncrementer()) 
     .flow(s1) 
     .end() 
     .build(); 
    } 

    @Bean 
    public Step step1(StepBuilderFactory stepBuilderFactory, ItemReader<Souscription> reader, 
        ItemWriter<Sms> writer, SouscriptionItemProcessor processor) { 
    return stepBuilderFactory.get("step1") 
     .<Souscription, Sms>chunk(1) 
     .reader(reader) 
     .processor(processor) 
     .writer(writer) 
     .build(); 
    } 

    @Bean 
    public DataSource dataSource() { 
    DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
    dataSource.setDriverClassName(databaseDriver); 
    dataSource.setUrl(databaseUrl); 
    dataSource.setUsername(databaseUsername); 
    dataSource.setPassword(databasePassword); 
    return dataSource; 
    } 

    @Bean 
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() { 

    LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean(); 
    lef.setPackagesToScan("com.mobilproafrica.batch.sms"); 
    lef.setDataSource(dataSource()); 
    lef.setJpaVendorAdapter(jpaVendorAdapter()); 
    lef.setJpaProperties(new Properties()); 
    return lef; 
    } 

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

    jpaVendorAdapter.setDatabasePlatform("org.hibernate.dialect.PostgreSQLDialect"); 
    return jpaVendorAdapter; 
    } 
} 

私は私のデータソースを定義

application.properties

spring.datasource.url=jdbc:postgresql://localhost/ussd_service 
spring.datasource.username=root 
spring.datasource.password=password 

spring.datasource.driver-class-name=org.postgresql.Driver 
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect 

#Hibernate Configuration: 
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect 
hibernate.show_sql=true 

#DB initialization 
hibernate.hbm2ddl.auto=validate 
org.hibernate.tool.hbm2ddl=validate 
spring.jpa.hibernate.ddl-auto=validate 

そして、私のクラス:ここ

は私貴様ファイルです

org.hibernate.tool.hbm2ddl.SchemaUpdate:HHH000388:失敗: ALTER TABLEのtarifがFK_lub9g2gwhub3a7pc7u67vp3cr外国 キー(forfait_id)の参照が

をforfait制約を追加する誰かがこのエラーで私を助けることができますか?

+0

このプロパティを使用しない場合、プロパティを追加するだけでは機能しません。あなたが間違ったプロパティであるSpring Bootを使用している場合。 –

+0

休止状態の設定方法に関する情報を入力してください。 springbootやhibernate.cfg.xmlを使用するか、データソースで独自の "org.springframework.orm.hibernate3.LocalSessionFactoryBean"を定義していますか? – gmaslowski

+0

@gmaslowski、はい私はspringbootを使用しています。そして、私が設定するファイルはapplication.propertiesであると思う。 –

答えて

2

application.propertiesのSet

spring.jpa.hibernate.ddl-auto=none 

+0

申し訳ありませんがうまくいきません。 –

+0

OK解決策を見つけました。 jpavendorAdapter.setGenerateDdl(false) –

+0

@ TheGuideその理由は、データソースの設定方法と答えがあなただけであるということです構成はapplication.properties(コードも構成であることに注意してください!)は間違っていました。あなたはそれを理解して良かった。 – gmaslowski

関連する問題