2016-02-26 55 views
0

我需要在本地mysql服务器中创建一个名为test的数据库,我将使用它来设置我的数据源bean。我现在用的是春天的配置用于设置数据源和JdbcTemplate的对我的测试如何在春季上下文初始化期间创建数据库

@Configuration 
class Config { 
     @Bean(initMethod = "setupDatabase") 
     public DataSource getDataSource() { 
     String url = "jdbc:mysql://localhost:3306/test"; 
     DriverManagerDataSource dataSource = new DriverManagerDataSource(
       url, settings.getUsername(), settings.getPassword()); 
     dataSource.setDriverClassName("com.mysql.jdbc.Driver"); 
     return dataSource; 
     } 

     @Bean 
     public JdbcTemplate getJdbcTemplate() { 
     JdbcTemplate jdbcTemplate = new JdbcTemplate(); 
     jdbcTemplate.setDataSource(((DataSourceTransactionManager)transactionManager()).getDataSource()); 
     return jdbcTemplate; 
     } 

     @Bean 
     public PlatformTransactionManager transactionManager() { 
     return new DataSourceTransactionManager(getDataSource()); 
     } 

     @Bean 
     public DataSourceInitializer dataSourceInitializer(final DataSource dataSource) { 
     final DataSourceInitializer initializer = new DataSourceInitializer(); 
     initializer.setDataSource(dataSource); 
     initializer.setDatabasePopulator(databasePopulator()); 
     return initializer; 
     } 

     private DatabasePopulator databasePopulator() { 
     final ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); 
     populator.addScript(schemaScript); 
     return populator; 
     } 

     @PostConstruct 
     public void setupDatabase() { 
     String url = "jdbc:mysql://localhost:3306"; 
     try { 
      Connection connection = DriverManager.getConnection(url, settings.getUsername(), settings.getPassword()); 
      Statement statement = connection.createStatement(); 
      statement.execute("create database test"); 
     } catch (SQLException exception) { 
      LOGGER.error("Could not setup database for test", exception); 
      throw new RuntimeException(exception); 
     } 
    } 
} 

我收到以下错误产生的原因:

org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database 'test' 
    at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) 
    at org.springframework.jdbc.datasource.init.DatabasePopulatorUtils.execute(DatabasePopulatorUtils.java:46) 

有人能解释与此配置脚麻?

回答

0

您是否在本地mysql创建了测试数据库?您需要首先创建数据库以从您的应用程序进行连接。如果你想通过执行sql查询创建一个数据库,以root用户身份连接到数据库并创建数据库。

+0

我希望能够在初始化spring上下文时以编程方式创建数据库。如果我手动创建数据库,它可以工作;但我希望能够在上下文初始化期间创建该数据库,并在我的bean中使用它 –

0

异常的来源:由春实际执行之后getDataSource()原因@Bean(initMethod = "setupDatabase")力量春天你setupDatabase()方法来执行initMetod一个bean创建为bean 初始化。但这不是你期望的。

您需要以某种方式定义您的getDataSource()取决于setupDatabase()。例如。在@DependsOn注释的帮助下。

另见Spring 3 bean instantiation sequence

附:但你为什么不简单手动添加setupDatabase()调用getDataSource()的方法?