sql - 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,所以我不确定它是否相关
解决方案
我找到了解决方案,也许我的问题似乎缺少一些信息。
我们正在使用 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 文件的属性没有任何区别,或者至少其中一些没有任何区别。
我希望它会帮助其他看到这个的人,因为我在这上面浪费了很多时间:)
推荐阅读
- javascript - 简单加载微调器未正确显示
- android - 下载完成时颤动 image_downloader 0.19.2 崩溃
- unity3d - 我的统一游戏在构建到 webgl 时有错误
- javascript - 通过函数参数更改对象
- python - 模块存在于“点子列表”中,但我无法导入它
- java - Firebase 不会在数据更改时检索最后一个数据,并且不会以正确的方式执行 addValueEventListener 中的条件
- python - 函数不会在python“未解析的引用”中检测到变量
- python - TCP 多线程 Python
- html - 如何使用css调整旋转半径
- javascript - 在 svg-tag 中插入 Angular 组件