使用基于Java的配置在服务器模式下设置H2

我有spring XML,使我能够使用以下配置在服务器模式下启动H2数据库:

          create-drop true    

我想转换为基于java的配置。 我在这里似乎是一个post: 使用Spring启动和设置内存数据库,询问一些相同的问题,我查看了http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/ html / jdbc.html#jdbc-embedded-database-support for Embedded Database但它没有说明如何将H2模式设置为服务器模式。 它只在“mem”模式下为我启动服务器。

我有以下代码:

 EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); builder.setType(EmbeddedDatabaseType.H2); builder.setName(DATABASE_NAME); builder.addScript(H2_SCHEMA); builder.addScript(H2_TEST); return builder.build(); 

也许使用EmbeddedDatabaseBuilder(ResourceLoader)可能会起作用。 有人有一些示例代码吗?

这是允许您使用基于Java的弹簧配置在服务器模式下启动H2数据库的代码:

 private static final String H2_JDBC_URL_TEMPLATE = "jdbc:h2:%s/target/db/sample;AUTO_SERVER=TRUE"; @Value("classpath:seed-data.sql") private Resource H2_SCHEMA_SCRIPT; @Value("classpath:test-data.sql") private Resource H2_DATA_SCRIPT; @Value("classpath:drop-data.sql") private Resource H2_CLEANER_SCRIPT; @Bean public DataSource dataSource(Environment env) throws Exception { return createH2DataSource(); } @Autowired @Bean public DataSourceInitializer dataSourceInitializer(final DataSource dataSource) { final DataSourceInitializer initializer = new DataSourceInitializer(); initializer.setDataSource(dataSource); initializer.setDatabasePopulator(databasePopulator()); initializer.setDatabaseCleaner(databaseCleaner()); return initializer; } private DatabasePopulator databasePopulator() { final ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); populator.addScript(H2_SCHEMA_SCRIPT); populator.addScript(H2_DATA_SCRIPT); return populator; } private DatabasePopulator databaseCleaner() { final ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); populator.addScript(H2_CLEANER_SCRIPT); return populator; } private DataSource createH2DataSource() { String jdbcUrl = String.format(H2_JDBC_URL_TEMPLATE, System.getProperty("user.dir")); JdbcDataSource ds = new JdbcDataSource(); ds.setURL(jdbcUrl); ds.setUser("sa"); ds.setPassword(""); return ds; } @Bean public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) { JpaTransactionManager transactionManager = new JpaTransactionManager(); transactionManager.setEntityManagerFactory(entityManagerFactory); return transactionManager; } @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory(Environment env) throws Exception { HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); vendorAdapter.setGenerateDdl(Boolean.TRUE); vendorAdapter.setShowSql(Boolean.TRUE); LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); factory.setPersistenceUnitName("sample"); factory.setJpaVendorAdapter(vendorAdapter); factory.setPackagesToScan("com.sample.model"); factory.setDataSource(dataSource(env)); factory.setJpaProperties(jpaProperties()); factory.setLoadTimeWeaver(new InstrumentationLoadTimeWeaver()); return factory; } Properties jpaProperties() { Properties props = new Properties(); props.put("hibernate.query.substitutions", "true 'Y', false 'N'"); props.put("hibernate.hbm2ddl.auto", "create-drop"); props.put("hibernate.show_sql", "false"); props.put("hibernate.format_sql", "true"); return props; } 

我相信这是不可能的。 术语“嵌入式数据库”在不需要服务器的数据库中,嵌入在应用程序中,因此不应使用EmbeddedDatabase。

在h2文档中,术语“嵌入”用“本地” – (连接到嵌入式(本地)数据库)进行了包含,当他们使用“服务器”时,他们谈论数据库由服务器管理的远程连接。 为了强化这个想法,EmbeddedDataSource接口只添加了一个数据源“shutdown”接口中不存在的方法,该接口通常用于在应用程序关闭时通过@Bean(destroyMethod="shutdown")关闭数据库。

在这里查看更多详细信息:

http://h2database.com/html/features.html#database_url

什么时候被称为嵌入式数据库的数据库?

http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/jdbc/datasource/embedded/EmbeddedDatabase.html