Spring Boot 应用程序运行正常,但 hibernate 和 MySql 相关属性不起作用

Posted

技术标签:

【中文标题】Spring Boot 应用程序运行正常,但 hibernate 和 MySql 相关属性不起作用【英文标题】:SpringBoot application is running properly but the hibernate & MySql related properties are not working 【发布时间】:2017-09-13 00:51:21 【问题描述】:
    @Configuration
    @EnableJpaRepositories(basePackages = 
    "com.gmt.user",entityManagerFactoryRef = 
    "userEntityManager",transactionManagerRef = "userTransactionManager")

    public class UserConfig 


@Bean
@Primary
public LocalContainerEntityManagerFactoryBean userEntityManager()
    LocalContainerEntityManagerFactoryBean em= new LocalContainerEntityManagerFactoryBean();
    em.setDataSource(userDatasource());
    em.setPackagesToScan(new String[]"com.gmt.user");

    HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
    em.setJpaVendorAdapter(vendorAdapter);

    HashMap<String,Object> properties = new HashMap<String, Object>();
    properties.put("hibernate.hbm2ddl.auto","craete");
    properties.put("hibernate.dialect","org.hibernate.dialect.mysql5Dialect");
    properties.put("hibernate.show_sql","true");
    em.setJpaPropertyMap(properties);
    return em;


@Bean
@Primary
public DataSource userDatasource()
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql://localhost:3306/schema_name");
    dataSource.setUsername("root");
    dataSource.setPassword("password12");
    return dataSource;



@Bean
@Primary
public PlatformTransactionManager userTransactionManager()
    JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();

    jpaTransactionManager.setEntityManagerFactory(userEntityManager().getObject());

    return jpaTransactionManager;


这是我的 SpringBoot 应用程序

    @SpringBootApplication
    @ComponentScan(basePackages = "com.gmt")
    @EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class, 
    HibernateJpaAutoConfiguration.class)
    public class Client 
    public static void main(String[] args)
    SpringApplication.run(Client.class,args);

    System.out.println(" ***** Inside Spring Boot Application ***** ");


   
   

这是我的 pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
     <project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
     http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

<groupId>Simple_Spring</groupId>
<artifactId>Spring01</artifactId>
<version>1.0-SNAPSHOT</version>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.2.RELEASE</version>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>


    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
    </dependency>
    <dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.1-api</artifactId>
        <version>1.0.0.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
    </dependency>

</dependencies>


<build>

    <plugins>

        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

我已将模型类和相应的存储库放在同一个文件夹中。应用程序运行正常,没有任何错误,但没有连接到数据库,也没有在架构中创建表。请帮我解决这个问题。

【问题讨论】:

已编辑 springboot 应用程序 【参考方案1】:

您在此处拼错了 hibernate.hbm2ddl.auto 属性值:

properties.put("hibernate.hbm2ddl.auto","craete");

它必须是create,但你将它设置为craete

【讨论】:

感谢您的回复,我已将其更正为“创建”,但仍无法正常工作。【参考方案2】:

如果您使用 spring-boot-starter-data-jpa 在您的 POM 中,则无需使用 &lt;groupId&gt;org.hibernate&lt;/groupId&gt; 的其他工件。 “spring-boot-starter-data-jpa”将引入 Hibernate 作为默认的 JPA 提供程序,这可能会导致依赖冲突,因为我已经看到了类似的问题。 所以你说没有显示错误?你调试了吗?

同样在 spring boot 中你可以将你的属性设置为:

spring.datasource.* 

spring boot JPA 会自动准备好

要更改休眠属性,我们将使用前缀

 `spring.jpa.properties.*`

具有休眠属性名称 spring boot可以根据给定的数据源URL自动识别数据源驱动类。所以我们不需要配置驱动类。

编辑 1 ________

#spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/concretepage
spring.datasource.username=root
spring.datasource.password=
spring.datasource.tomcat.max-wait=20000
spring.datasource.tomcat.max-active=50
spring.datasource.tomcat.max-idle=20
spring.datasource.tomcat.min-idle=15

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLDialect
spring.jpa.properties.hibernate.id.new_generator_mappings = false
spring.jpa.properties.hibernate.format_sql = true

logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE 

【讨论】:

我从 pom.xml 中删除了“Spring-boot-starter-data-jpa”,我认为 Datasource 和 hibernate 属性不起作用,因为我在我的主 springboot 应用程序中明确排除了它们。我编辑了它。 我没有对 mysql 和 hiberante 值进行硬编码,而是将其放在 application.properties 文件中,但这仍然无法解决我的问题。 这是我排除 DataSourceAutoConfiguration.class 和 HibernateJpaAutoConfiguration.class 时得到的错误“描述:无法确定数据库类型的嵌入式数据库驱动程序类无操作:如果您想要一个嵌入式数据库,请放置一个受支持的数据库在类路径上。如果您要从特定配置文件加载数据库设置,您可能需要激活它(当前没有配置文件处于活动状态)。“ 是的,只留下“spring-boot-starter-data-jpa”,但是如果您在属性文件中删除这些类,则必须编辑为(请参阅我的回答中的编辑) 属性必须有那个命名法,你也试过了吗?

以上是关于Spring Boot 应用程序运行正常,但 hibernate 和 MySql 相关属性不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 Tomcat 中部署的 Spring Boot 提供 404 但可以独立运行

如何在 Eclipse 中使用 Gradle 运行 Cucumber + Spring Boot 应用程序

运行 jar 时出现 Spring Boot 错误,但在 IDE 中工作正常(spring-boot-starter-data-jpa)

spring boot 项目启动无任何反应

Spring Boot 中的多租户

Spring Boot with H2 每次 web 应用启动时都会运行 data.sql,这正常吗?