java - Spring Boot/Data 不重新创建表

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

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

当表不存在时,将创建它们。但是当表存在时,它们不会被重新创建。我认为 ddl-auto create (“创建架构,销毁以前的数据。”)总是会重新创建表。

application.yaml

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

我的配置文件:

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

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

}

DBAConfig.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();
    }   

}

DBBConfig.java

@Configuration
@EntityScan(basePackages = {"com.example.mds.dbb.model"} )
@EnableTransactionManagement
@EnableJpaRepositories(
        entityManagerFactoryRef = "dbb_emf",
        transactionManagerRef = "dbb_tm",
        basePackages = {"com.example.mds.dbb.repository"}
)
public class DBBConfig {

    @Bean(name = "dbb_ds")
    @ConfigurationProperties(prefix = "dbb.datasource")
    public DataSource dataSource(@Qualifier("dbb_dsp") DataSourceProperties properties) {
        return properties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
    }

    @Bean(name = "dbb_emf")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder, @Qualifier("dbb_ds") DataSource datasource) {
        return builder
                  .dataSource(datasource)
                  .packages("com.example.mds.dbb.model")
                  .persistenceUnit("dbb_pu")
                  .build();
    }

    @Bean(name = "dbb_tm")
    public PlatformTransactionManager transactionManager(@Qualifier("dbb_emf") EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }

    @Bean(name = "dbb_dsp")
    @ConfigurationProperties(prefix = "dbb.datasource")
    public DataSourceProperties dataSourceProperties() {
        return new DataSourceProperties();
    }   

}

最佳答案

如果您想要删除并创建表,则需要使用 create-drop 属性。这应该仅用于测试目的,而不是用于生产用途。 引用this详情请咨询

关于java - Spring Boot/Data 不重新创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58479427/

相关文章:

php - 无法在 codeigniter php 中将多选 ID 提取到数组中并插入到数据库中

javax.servlet.ServletContext 正在从 Spring Boot 应用程序中的多个依赖项加载

java - 在测试用例中添加断言语句,对于返回 void 的 API 服务?

java - 参数化类型(如 Class<)的等效 C# 是什么?在 Java 中扩展 Throwable>?

java - 继续获取 {"status":21002} while verifying Apple In-App Purchase receipt

java - 无法使用 Glassfish 设置 SSL

java - Java 如何知道在此示例中使用哪个类?

php - 将数据从一个 MySQL 表移动到另一个

java - 如何了解先前是否已通过选择查询查询过一行?

Spring Boot Controller - 枚举参数作为值