当前位置: 首页 > 知识库问答 >
问题:

Spring Boot数据r2dbc自动创建表

邢炯
2023-03-14

我有一个简单的问题,是否可以为MySQL或其他数据库使用spring-boot数据r2dbc自动生成表?在JPA中,我添加了spring.JPA.hhibernate。ddl-auto=更新并创建表

这是我的pom:

    <dependencies>
    <dependency>
        <groupId>org.springframework.boot.experimental</groupId>
        <artifactId>spring-boot-starter-data-r2dbc</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
    </dependency>
    <dependency>
        <groupId>dev.miku</groupId>
        <artifactId>r2dbc-mysql</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot.experimental</groupId>
        <artifactId>spring-boot-test-autoconfigure-r2dbc</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>io.projectreactor</groupId>
        <artifactId>reactor-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-all</artifactId>
        <version>4.1.43.Final</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

共有2个答案

姬昀
2023-03-14

为了让r2dbc在应用程序启动时自动创建表,您只需要一个带有@Configuration注释的config java类,例如:

import io.r2dbc.spi.ConnectionFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.r2dbc.connection.init.ConnectionFactoryInitializer;
import org.springframework.r2dbc.connection.init.ResourceDatabasePopulator;

@Configuration
public class DbSchemaInitOnStartup {

    @Bean
    ConnectionFactoryInitializer initializer(@Qualifier("connectionFactory") ConnectionFactory connectionFactory) {
        ConnectionFactoryInitializer initializer = new ConnectionFactoryInitializer();
        initializer.setConnectionFactory(connectionFactory);
        ResourceDatabasePopulator resource = new ResourceDatabasePopulator(new ClassPathResource("schema.sql"));
        initializer.setDatabasePopulator(resource);
        return initializer;
    }

}

架构.sql文件必须放在 /resources 文件夹中,上述文件才能正常工作。

廖臻
2023-03-14

我知道这不是确切的答案,但在R2DBC中创建表的唯一方法是使用databasePopulator

@Bean
fun initializer(connectionFactory: ConnectionFactory) =
    ConnectionFactoryInitializer().apply {
        setConnectionFactory(connectionFactory)
        setDatabasePopulator(CompositeDatabasePopulator()
            .apply {
                addPopulators(ResourceDatabasePopulator(FileSystemResource("src/test/resources/sql/init.sql")))
            })
    }

它在考试时会派上用场。

 类似资料:
  • 当应用程序启动时,我正在尝试创建mysql数据库。我尝试了波纹管配置,但无法实现,如果有人对此有想法,请告诉我,

  • 问题内容: 我正在使用PostgreSQL和Spring 4,希望我的应用在运行时自动创建数据库。 我的实体类是: HibernateConfig.java application.properties 但是,当我运行SQL访问表User时,将出现错误:表’User’不存在。 如何使Hibernate自动创建数据库? 问题答案: 该物业将为您解决问题。创建SessionFactory时,它将自动验

  • 我正在使用PostgreSQL和Spring 4,并希望我的应用程序在运行时自动创建数据库。 我的实体类是: HibernateConfig。Java语言 application.properties 但当我运行SQL访问表User时,会出现错误:表“User”不存在。 如何使Hibernate自动创建数据库?

  • 我有一个 postgresql 数据库的 spring r2dbc 连接,并想创建一个表, 实际上等同于 SQL 由于DatabaseClient似乎只支持select/insert,我如何做到这一点?

  • 问题内容: http://www.vaannila.com/spring/spring-hibernate- integration-1.html 在阅读本教程时,他们没有提到在数据库中创建表的任何内容。一旦我指定了表和字段,Hibernate会自动处理它吗? 这是我的bean配置。 问题答案: 您的hibernate.hbm2ddl.auto设置应该确定所创建的数据库(选项为,,或者)

  • 我有一个 Spring 引导 API,它使用 jpa 和 postgresql,并在我运行应用程序时自动创建表。 但出现以下错误消息: 这是我的应用程序。属性