将MySQL连接到Spring应用程序

问题描述:

我想使用MySQL数据库,而不是使用像hsqldb这样的运行时数据库。我已经克隆了this repository,它使用hsqldb作为它的数据库。将MySQL连接到Spring应用程序

因为我想学习如何使用关系数据库和基于休息的spring应用程序。所以我做了如下修改的pom.xml: 改变的pom.xml:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<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/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>org.springsource.restbucks</groupId> 
    <artifactId>restbucks</artifactId> 
    <packaging>war</packaging> 
    <version>1.0.0.BUILD-SNAPSHOT</version> 
    <name>Spring RESTBucks</name> 

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

    <properties> 
     <spring-data-releasetrain.version>Evans-RC1</spring-data-releasetrain.version> 
     <tomcat.version>8.0.9</tomcat.version> 
    </properties> 

    <dependencies> 

     <!-- Spring Data REST --> 

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

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-jpa</artifactId> 
      <exclusions> 
       <exclusion> 
        <groupId>org.hibernate</groupId> 
        <artifactId>hibernate-entitymanager</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 

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

     <!-- JDK 8 DateTime support for Hibernate --> 

     <dependency> 
      <groupId>org.jadira.usertype</groupId> 
      <artifactId>usertype.extended</artifactId> 
      <version>3.2.0.GA</version> 
     </dependency> 

     <dependency> 
      <groupId>com.fasterxml.jackson.datatype</groupId> 
      <artifactId>jackson-datatype-jsr310</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
     </dependency> 

     <!-- Database > 

     <dependency> 
      <groupId>org.hsqldb</groupId> 
      <artifactId>hsqldb</artifactId> 
      <scope>runtime</scope> 
     </dependency --> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
     </dependency> 

     <!-- Misc --> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-tx-events</artifactId> 
      <version>1.0.0.BUILD-SNAPSHOT</version> 
     </dependency> 

     <dependency> 
      <groupId>org.projectlombok</groupId> 
      <artifactId>lombok</artifactId> 
      <version>1.14.4</version> 
      <scope>provided</scope> 
     </dependency> 

     <dependency> 
      <groupId>com.jayway.jsonpath</groupId> 
      <artifactId>json-path</artifactId> 
     </dependency> 

    </dependencies> 

    <build> 
     <plugins> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 

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

     </plugins> 
    </build> 

    <repositories> 
     <repository> 
      <id>spring-libs-snapshot</id> 
      <url>http://repo.spring.io/libs-snapshot</url> 
      <snapshots> 
       <enabled>true</enabled> 
      </snapshots> 
     </repository> 
    </repositories> 

    <pluginRepositories> 
     <pluginRepository> 
      <id>spring-libs-snapshot</id> 
      <url>http://repo.spring.io/libs-snapshot</url> 
      <snapshots> 
       <enabled>true</enabled> 
      </snapshots> 
     </pluginRepository> 
    </pluginRepositories> 

</project> 

和application.properties(弹簧restbucks/src目录/主/资源/ application.properties),我做了以下变化:

# JPA 
spring.jpa.show-sql=true 

server.port=8080 

spring.datasource.url=jdbc:mysql://localhost/restBucks 

spring.datasource.driverClassName=com.mysql.jdbc.Driver 

spring.datasource.username=root 

spring.datasource.password= 

,但我现在面临约15这样的错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'orderInitializer' defined in file [/home/jimish/projects/spring_projects/spring/spring-restbucks/target/classes/org/springsource/restbucks/order/OrderInitializer.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springsource.restbucks.order.OrderInitializer]: Constructor threw exception; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet 

因此,如果任何人都可以建议如何连接mysql到Spring应用程序,将是巨大的路径。 谢谢。

+0

确保您的设置是正确的,你的数据库中存在,并已启动并运行,并且您可以连接到它用户。还要确保你已经为Hibernate选择了正确的方言,否则你可能会得到错误的SQL。 – 2014-09-19 09:21:07

+0

嘿,我的数据库存在,它的运行...但我不知道如何选择方言休眠。你能建议一些有用的相关吗? – jimish 2014-09-19 09:59:46

+1

我建议您阅读文档,而不是只在周围乱逛。但是设置'spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect'应该可以做到。您也可能想要将完整的堆栈跟踪添加到您的帖子中。 – 2014-09-19 10:06:23

您可以验证您的POM文件,并进行以下罐子确保最低可

 <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-beans</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.data</groupId> 
      <artifactId>spring-data-jpa</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
     </dependency> 
     <!-- Spring AOP --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-aspects</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
     </dependency> 

     <!-- MySQL JDBC connector --> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
     </dependency> 


     **Make sure you are reading your db.properties file from application-context.xml** 

     <bean id="propertyConfigurer" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
      <property name="locations"> 
      <list> 
       <value>classpath:db.properties</value> 
      </list> 
     </property> 
     </bean> 

     **Make sure you use proper datasource and entity manager in application-context.xml** 

     <bean id="dataSource" class="{our.DataSource}" destroy-method="close"> 
      <property name="driverClass" value="${driver}"/> 
      <property name="jdbcUrl" value="${url}"/> 
      <property name="user" value="${username}"/> 
      <property name="password" value="${password}"/> 
     </bean> 

     <bean id="entityManagerFactory" 
      class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
      <property name="persistenceUnitName" value="spring-jpa" /> 
      <property name="dataSource" ref="dataSource" /> 
      <property name="jpaVendorAdapter"> 
       <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
        <property name="generateDdl" value="true" /> 
        <property name="showSql" value="false" /> 
        <property name="databasePlatform" value="${dialect}" /> 
       </bean> 
      </property> 

     </bean> 

    **Make sure you are adding minimum of below properties in db.properties** 

    dialect=org.hibernate.dialect.MySQL5InnoDBDialect 
    url=jdbc:mysql://localhost:3306/dbName 
    driver=com.mysql.jdbc.Driver 
    username=root 
    password=test 
+0

他在解析结果时遇到了问题,应用程序运行良好,因此依赖关系正常。此外,依赖项来自Spring引导启动器项目,该项目已包含适当的依赖关系。 – 2014-09-19 10:08:58

上简释@M。 Deinum的评论...您需要指定JPA配置信息,因为Spring RestBucks App正在使用Spring Data JPA

添加标准JPA属性并指定数据库平台(Common Application Properties)应使您的JPA连接正常工作。

spring.jpa.show-sql=true 
spring.jpa.hibernate.ddl-auto=create-drop 
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect 

# Enable spring data repos 
spring.data.jpa.repositories.enabled=true 

# Replace with your connection string 
spring.datasource.url=jdbc:mysql://localhost:3306/restbucks 

# Replace with your credentials 
spring.datasource.username=sa 
spring.datasource.password= 

spring.datasource.driverClassName=com.mysql.jdbc.Driver 

只包括下面的配置,在类路径的application.properties,它会像一个魅力:

spring.datasource.url=jdbc:mysql://localhost/jpa_example 
spring.datasource.username=root 
spring.datasource.driver-class-name=com.mysql.jdbc.Driver 
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect 

数据库服务器IP,端口号和数据库名称

spring.datasource .url = jdbc:mysql:// localhost/sample

数据库服务器用户名

spring.datasource.username =根

数据库服务器密码

spring.datasource.password = root123每当服务器上

更新数据库启动

spring.jpa.hibernate.ddl-AUTO =更新

添加MySQL连接/ J到类路径:

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

这是文件的一个例子application.properties基于Spring的应用程序中:

datasource.mine.poolSize=30 

spring.datasource.url=jdbc:mysql://127.0.0.1/vy?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC 
spring.datasource.username=root 
spring.datasource.password=123456 
spring.datasource.driverClassName=com.mysql.jdbc.Driver 

spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect 
spring.jpa.show-sql=true 
spring.jpa.hibernate.ddl-auto=update