Spring Boot / Data不会重新创建表

时间:2019-10-21 03:25:21

标签: java mysql spring-boot spring-data-jpa yaml

我正在尝试配置Spring Boot / Data以在应用初始化时重新创建表。 为此,我将ddl-auto配置为创建。我正在使用两个数据源。

当表不存在时,将创建它们。但是,如果存在表,则不会重新创建它们。我认为ddl-auto create(“创建模式,破坏先前的数据。”)将始终重新创建表。

application.yaml

num[5]

我的配置文件:

spring:
   profiles: spring
   jpa:
      generate-ddl: true
      hibernate: 
         ddl-auto: create
      show-sql: true
      properties:
         hibernate:
            dialect: org.hibernate.dialect.MySQL5InnoDBDialect
            format_sql: true

dba:
   datasource:
      url: jdbc:mysql://localhost:3306/DBA
      username: root
      password: 123
      driver-class-name: com.mysql.cj.jdbc.Driver

dbb:
   datasource:
      url: jdbc:mysql://localhost:3306/DBB
      username: root
      password: 123
      driver-class-name: com.mysql.cj.jdbc.Driver

DBAConfig.java

@SpringBootApplication
@ComponentScan( basePackages = {"com.example.mds"} )
public class EMdsApplication {

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

}

DBBConfig.java

@Configuration
@EntityScan(basePackages = {"com.example.mds.model"} )
@EnableTransactionManagement
@EnableJpaRepositories(
        entityManagerFactoryRef = "dba_emf",
        transactionManagerRef = "dba_tm",
        basePackages = {"com.example.mds.repository"}
)
public class DBAConfig {


    @Primary
    @Bean(name = "dba_ds")
    @ConfigurationProperties(prefix = "dba.datasource")
    public DataSource dataSource(@Qualifier("dba_dsp") DataSourceProperties properties) {
        return properties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
    }

    @Primary
    @Bean(name = "dba_emf")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder, @Qualifier("dba_ds") DataSource datasource) {
        return builder
                  .dataSource(datasource)
                  .packages("com.example.mds.model")
                  .persistenceUnit("dba_pu")
                  .build();
    }

    @Primary
    @Bean(name = "dba_tm")
    public PlatformTransactionManager transactionManager(@Qualifier("dba_emf") EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }

    @Primary
    @Bean(name = "dba_dsp")
    @ConfigurationProperties(prefix = "dba.datasource")
    public DataSourceProperties dataSourceProperties() {
        return new DataSourceProperties();
    }   

}

4 个答案:

答案 0 :(得分:1)

如果要删除和创建表,则需要使用create-drop属性。这仅应用于测试目的,不能用于生产。 有关详细信息,请参见this问题

答案 1 :(得分:1)

error: invalid use of non-static member function ‘AStruct MainClass::Func1(const OtherClass1&)’ 43 | AStruct v1 = Func(Func1, BS.vOC1); 中更改application.yaml
在应用程序关闭时关闭会话工厂时,它将删除该架构,并在应用程序启动时创建新的架构。

答案 2 :(得分:0)

application.yaml中更改ddl-auto: create to ddl-auto: update

答案 3 :(得分:0)

从我所理解的问题是,您只想在已存在的schme上对其进行更新。但是在您当前的配置下,仅当表不存在时才被创建。已经存在。

请注意确保您仅将此属性用于测试场景或用于开发目的。请确保在生产环境中将ddl-auto设置为none。< / p>

尝试如下设置application.yml

spring:
   profiles: spring
   jpa:
      generate-ddl: true
      hibernate: 
         ddl-auto: update

ddl-auto的可能值为:

  

validate:验证架构,不对数据库进行任何更改。
  更新:更新架构。
  create:创建模式,销毁先前的数据。
  create-drop:在会话结束时删除架构。

update操作将查询JDBC驱动程序的API以获取数据库元数据,然后Hibernate根据读取您的带注释的类或HBM XML映射比较它创建的对象模型,并尝试在其上调整架构。飞。

相关文章:How does spring.jpa.hibernate.ddl-auto property exactly work in Spring?