2016-09-16 83 views
0

我正在开发一个使用内存嵌入式数据库的独立Java应用程序。我参考了几个文档,并编写了下面的代码。我正在使用弹簧靴。 这些是我到目前为止的步骤: 在,pom文件中,我添加了这些依赖关系。如何在春季访问内存数据库

<dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-jdbc</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>com.h2database</groupId> 
      <artifactId>h2</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.36</version> 
    </dependency> 

在application.properties文件

spring.datasource.driver-class-name=com.mysql.jdbc.Driver 
spring.datasource.url=jdbc:mysql://localhost:3306/test 
spring.datasource.username=root 
spring.datasource.password=admin 

我创建了一个脚本schema.sql文件和data.sql schema.sql文件

CREATE TABLE users 
(
    id int(11) NOT NULL AUTO_INCREMENT, 
    name varchar(100) NOT NULL, 
    email varchar(100) DEFAULT NULL, 
    PRIMARY KEY (id) 
); 

data.sql

insert into users(id, name, email) values(1,'demouser','[email protected]'); 

这是我的r epository类。

@Repository 
public class UserRepository { 

    @Autowired 
    private JdbcTemplate jdbcTemplate; 

    @Transactional(readOnly = true) 
    public List<User> findAll() { 
     return jdbcTemplate.query("select * from users", new UserRowMapper()); 
    } 

    class UserRowMapper implements RowMapper<User> { 
     @Override 
     public User mapRow(ResultSet rs, int rowNum) throws SQLException { 
      User user = new User(); 
      user.setId(rs.getInt("id")); 
      user.setName(rs.getString("name")); 
      user.setEmail(rs.getString("email")); 
      return user; 
     } 

这里是我的JUnit类

@Autowired 
    private UserRepository userRepository; 
    private EmbeddedDatabase db; 

    @Before 
    public void setUp() { 
     // db = new EmbeddedDatabaseBuilder().addDefaultScripts().build(); 
     Object db = new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2).addScript("schema.sql") 
       .addScript("data.sql").build(); 
    } 

    @Test 
    public void findAllUsers() { 
     List<User> users = userRepository.findAll(); 
     System.out.println(users.get(0).getName()); 
     assertNotNull(users); 
     assertTrue(!users.isEmpty()); 
    } 

当我运行我的JUnit我收到以下错误。

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userRepository': Unsatisfied dependency expressed through field 'jdbcTemplate': Error creating bean with name 'org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration': Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Tomcat.class]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSourceInitializer': Invocation of init method failed; nested exception is org.springframework.jdbc.datasource.init.UncategorizedScriptException: Failed to execute database script; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 

是否需要添加其他依赖项或下载数据库。

回答

1

由于您要使用H2内存数据库,所以您不应该在application.properties的pom.xml和mysql相关属性中具有MySql依赖性。

pom.xml

<!--Delete This--> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
    <version>5.1.36</version> 

卸载MySQL连接器的依赖,在application.properties文件中删除所有属性。 保持空白,Spring引导将为H2数据库自动配置这些属性。

签出GitHub存储库中的完整Spring Boot JDBC Demo项目。

+0

@madhu请接受它,如果这回答你的问题。 –