我使用Spring引導JPA在一個獨立的圖形用戶界面(鞦韆)的Java應用程序與嵌入式數據庫H2。春季啓動 - 堅持直接交易嵌入式數據庫
我使用Spring 1.3.0啓動,這是我的其他配置:
private static final String dataSourceUrl = "jdbc:h2:./databse;DB_CLOSE_ON_EXIT=FALSE";
@Bean
public DataSource dataSource() {
return DataSourceBuilder.create().url(dataSourceUrl).username("user").password("pwd").build();
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource);
em.setPackagesToScan(new String[] { "packages.to.scan" });
JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
Properties properties = new Properties();
properties.setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect");
properties.setProperty("hibernate.hbm2ddl.auto", "update");
em.setJpaProperties(properties);
return em;
}
在我application.properties
文件我只有一個行:spring.aop.proxy-target-class=true
。
對於我的倉庫我向JpaRepository
。
一切工作,最近我唯一的問題:在其上運行的應用程序中的MAC的MAC有一些這樣那樣的問題而墜毀。之後,之前完成的修改都沒有實際存儲在數據庫中。我使用@Transactional
註釋修改數據庫中的數據。
我對數據庫不是很有經驗,但在google搜索後我猜想事務被持久化上下文緩存(不知道術語是否正確)並且在應用程序關閉時實際上持久化。我檢查了數據庫文件,並通過GUI做了一些調整(包括一些查詢),但數據庫文件的修改日期只在我關閉應用程序時才改變。
由於這是一個獨立的GUI應用程序不會有性能問題,如果每一筆交易都會在數據庫中直接perisisted。我的方式是否正確,我如何實現每個事務都直接保存在數據庫中?是否有配置我必須做或我必須在每次調用存儲庫的save()
方法後添加任何代碼?
如果沒有,我完全不知道怎麼,我不得不承認,我不是很確定什麼引擎蓋下居然能上調試這類問題..
更改保存到一旦數據庫交易已經承諾並被刷新。後者通常在交易完成後很短時間內發生,而不是在您停止應用程序時發生。你有沒有檢查,你的交易限制不是太大?如果您只對整個應用程序使用一個事務,則只有在您停止應用程序時纔可能提交。 – dunni
至少我不會在整個應用程序中故意使用一個事務。我添加了一些函數'propagation = Propagation.REQUIRES_NEW',並在調用這個函數的GUI中做了一些事情,但結果是一樣的:數據庫文件只在關閉應用程序時才被修改。 – Semaphor