Mysql 如何在spring上下文初始化期间创建数据库
我需要在本地mysql服务器中创建一个名为test的数据库,用于设置数据源bean。我使用下面的spring配置为测试设置数据源和jdbctemplateMysql 如何在spring上下文初始化期间创建数据库,mysql,spring,datasource,javabeans,Mysql,Spring,Datasource,Javabeans,我需要在本地mysql服务器中创建一个名为test的数据库,用于设置数据源bean。我使用下面的spring配置为测试设置数据源和jdbctemplate @Configuration class Config { @Bean(initMethod = "setupDatabase") public DataSource getDataSource() { String url = "jdbc:mysql://localhost:3306/test";
@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)
有人能解释一下这个配置出了什么问题吗?您是否在本地mysql上创建了测试数据库?您需要先创建数据库,才能从应用程序进行连接。如果要通过执行sql查询来创建数据库,请以root用户身份连接到数据库并创建数据库。异常的来源:您的
setupDatabase()
方法实际上是由Spring在getDataSource()
原因@Bean(initMethod=“setupDatabase”)之后执行的
强制Spring在为bean初始化创建bean之后执行initMetod
。但这不是你期望的
您需要以某种方式定义getDataSource()
依赖于setupDatabase()
。例如,借助注释
也看到
p.S.但是为什么不简单地手动添加
setupDatabase()
调用getDataSource()
方法?我希望在初始化spring上下文时能够以编程方式创建数据库。如果我手动创建数据库,它可以工作;但我希望能够在上下文初始化期间创建该数据库,并在我的bean中使用它