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 中,则无需使用 <groupId>org.hibernate</groupId>
的其他工件。 “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)