我正在尝试配置 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/