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

Spring Boot-手动JPA配置与配置文件问题

戚衡
2023-03-14

我的Spring Boot应用程序JPA配置有一个问题。我有两个配置文件-dev(H2 db)和prod(PostgreSQL)。我想在没有Spring Boot“Magic”的情况下手动设置JPA,所以我创建了如下所示的配置类

@Configuration
@EnableTransactionManagement
public class PersistenceContext {

@Primary
@Bean
public DataSourceProperties dataSourceProperties() {
    return new DataSourceProperties();
}

@Bean
public DataSource dataSource(DataSourceProperties properties) {
    return properties
            .initializeDataSourceBuilder()
            .type(HikariDataSource.class)
            .build();
}

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
    final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
    em.setDataSource(dataSource(dataSourceProperties()));
    em.setPackagesToScan("model");
    em.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
    return em;
}

@Bean
public PlatformTransactionManager transactionManager(final EntityManagerFactory emf) {
    return new JpaTransactionManager(emf);
}

}
10:37:47.951 [main] DEBUG org.hibernate.SQL - insert into Book (id, author, bookType, bookstore, new_price, old_price, title, url) values (null, ?, ?, ?, ?, ?, ?, ?)
10:37:47.955 [main] DEBUG o.h.e.jdbc.spi.SqlExceptionHelper - could not prepare statement [insert into Book (id, author, bookType, bookstore, new_price, old_price, title, url) values (null, ?, ?, ?, ?, ?, ?, ?)]
org.h2.jdbc.JdbcSQLException: Table "BOOK" not found; SQL statement:
insert into Book (id, author, bookType, bookstore, new_price, old_price, title, url) values (null, ?, ?, ?, ?, ?, ?, ?) [42102-197]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:357)
spring.datasource.url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.platform=h2
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver

spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.generate-ddl=true
spring.data.jpa.repositories.enabled=true
spring.jpa.properties.hibernate.hbm2ddl.auto=create-drop
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.show-sql=true

spring.h2.console.enabled=true
spring.h2.console.path=/h2-console

我发现这可能是spring.jpa.properties.hibernate.hbm2ddl.auto=create-drop的问题,因为当我在PersistenceContext类中通过属性映射设置该属性时,它可以正常工作。我不知道如何通过属性文件正确设置它。事先谢谢你的帮助。

共有1个答案

鲁乐
2023-03-14

spring.jpa.hibernate.ddl-auto=updatespring.jpa.properties.hibernate.hbm2ddl.auto=create-drop执行相同的操作。但是,由于您被选择不使用Spring自动配置魔法,这些属性是无效的。

所以您必须使用JPA属性映射,并在LocalContainerEntityManagerFactoryBean中设置它。

 类似资料:
  • 问题内容: 我正在尝试使用Maven 3 在Spring Boot应用程序中设置活动配置文件。在我的pom.xml中,将默认的活动配置文件和属性spring.profiles.active设置 为development: 但是每次我运行应用程序时,都会在日志中收到以下消息: 并且将SpringBoot配置文件设置为默认值(读取application.properties而不是application

  • 我有一个Spring Boot Web应用程序,它尝试使用Hibernate访问我的数据库。我还有一个不同的、没有spring boot应用程序,它尝试访问相同的数据库。 我正在使用一个带注释的类配置无Spring Boot应用程序。 由于某些原因,Spring Boots自动配置的作用与注释类配置不同。 如果第一次连接到数据库并使用hibernate ddl创建模式,然后使用另一种配置方式重新连

  • 4.1 根据条件的自动配置 @conditional是基于条件的自动配置,一般配合Condition接口一起使用,只有接口实现类返回true,才装配,否则不装配. 用实现了Condition接口的类传入@Conditional中 @Conditional可以标记在配置类的方法中,也可以标记在配置类上.标记的位置不同,作用域不同. @Conditional可以传入多个实现了condition接口的类

  • 配置文件使用的是 JSON 格式。 JSON 中使用的数据结构和变量名对应着 Burp UI 中显示选项。生成配置文件的最简单方法是在 Burp UI 中创建所需的配置,然后保存为配置文件。您还可以手动编辑现有的配置文件,其内容是很容易就可以看懂的。 部分配置文件可以在需要时使用。您可以通过每个子工具选项卡的配置面板上的”选项(Options)”按钮来保存该区域的配置,或者通过从完整配置的文件中删

  • 我有一个用maven作为构建工具的应用程序。 我正在使用maven概要文件从不同的概要文件设置不同的属性。 假设我运行带有out的maven,并指定我希望spring的任何其他概要文件,将和作为活动概要文件。