2016-02-26 38 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()的方法?