首页 > 解决方案 > Spring Boot - 没有自动创建表

问题描述

我无法让 spring 自动创建表。我尝试了所有我能找到的关于应该添加的属性和注释的解决方案。

春季版 - 5.2.5.RELEASE

我的应用程序属性如下所示:


spring.datasource.url=jdbc:mysql://localhost:3306/ci_test?useLegacyDatetimeCode=false&serverTimezone=UTC
spring.datasource.username=****
spring.datasource.password=****

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.jpa.database-platform=org.hibernate.dialect.SQLServerDialect
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update

management.endpoints.web.exposure.include=*
management.endpoint.shutdown.enabled=true
#management.server.port=8090
logging.level.org.springframework=INFO

我的主要应用程序:

com.mypackage.autoTester;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.modelmapper.ModelMapper;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.core.SpringVersion;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableScheduling
@EnableConfigurationProperties
@EntityScan(basePackages = {"com.mypackage.autoTester"})  // scan JPA entities
public class AutoTesterApplication {

    public static final Logger logger = LogManager.getLogger();

    @Bean
    public ModelMapper modelMapper() {
        return new ModelMapper();
    }

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

    }

}

我的实体:

com.mypackage.autoTester.entities;

import lombok.*;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "testTable")
@Getter
@Setter
@AllArgsConstructor(access = AccessLevel.PUBLIC)
@NoArgsConstructor
public class TestEntity {

    @Id
    private long id;
}

上面的代码有问题吗?我错过了什么吗?

更新:

我尝试了下面的解决方案但没有帮助:( 早在我在 eclipse 中使用 spring boot 插件并且它工作的时候,我现在使用 intellij,所以我不确定它是否相关

标签: sqlspring-boot

解决方案


我找到了解决方案,也许我的问题似乎缺少一些信息。

我们正在使用 2 个 DB,并在 @EnableJpaRepositories 的帮助下在代码中手动初始化它们

@Configuration
@EnableJpaRepositories(basePackages = "",
        entityManagerFactoryRef = "primaryEntityManager",
        transactionManagerRef = "primaryTransactionManager")
public class PrimaryConfig {
    private final Environment env;

    public PrimaryConfig(Environment env) {
        this.env = env;
    }

    @Bean
    @ConfigurationProperties(prefix="spring.datasource")
    public DataSource primaryDataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setUrl(env.getProperty("spring.datasource.url"));
        dataSource.setUsername(env.getProperty("spring.datasource.username"));
        dataSource.setPassword(env.getProperty("spring.datasource.password"));
        dataSource.setDriverClassName(Objects.requireNonNull(env.getProperty("spring.datasource.driver-class-name")));
        return dataSource;
    }

    @Bean
    public PlatformTransactionManager primaryTransactionManager() {
        JpaTransactionManager transactionManager
                = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(
                primaryEntityManager().getObject());
        return transactionManager;
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean primaryEntityManager() {
        final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(primaryDataSource());
        em.setPackagesToScan("");

        final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        vendorAdapter.setGenerateDdl(true); // -> added this line 
        em.setJpaVendorAdapter(vendorAdapter);

        return em;
    }
}

所以我只需要添加一行就可以让它工作并开始自动执行 SQL 命令。

看来,由于我们手动创建了它,添加到 application.properties 文件的属性没有任何区别,或者至少其中一些没有任何区别。

我希望它会帮助其他看到这个的人,因为我在这上面浪费了很多时间:)


推荐阅读