版本我用:H2服務器DB通過創建春季無法訪問
- Spring版本:4.0.5.RELEASE
- H2版本:1.3.174
- Hibernate的版本:4.3.6.Final
我曾經有一個工作設置,當我部署一個war文件時,使用我的applicationContext創建一個H2服務器和一個dataSource。我的配置是這樣的:
<property name="jpaProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop>
</props>
</property>
此作品:
<bean id = "h2Server"
class="org.h2.tools.Server"
factory-method="createTcpServer"
init-method="start"
destroy-method="stop">
<constructor-arg value="-tcp,-tcpAllowOthers,-tcpPort,8045" />
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" depends-on="h2Server">
<property name="driverClassName" value="org.h2.Driver" />
<property name="url" value="${database.url}" />
<property name="username" value="${database.username}" />
<property name="password" value="${database.password}" />
然後,我定義爲讓Hibernate自動生成所有表的jpaProperty定義的
LocalContainerEntityManagerFactoryBean
就像一個魅力,當我的應用程序部署時,所有的表都被創建爲automa的角度講。這對測試設置非常有用,但對於產品發佈,我們希望通過hibernate關閉自動生成表,並且我們希望自己管理sql創建和遷移腳本。
因此我決定用飛行用的數據庫遷移工具和我刪除從EntityManager的定義如下一行:
<prop key="hibernate.hbm2ddl.auto">update</prop>
這似乎是工作和數據庫中創建並具有最小的尺寸,但是當我嘗試連接它使用的松鼠,我得到以下異常:
我希望,如果H2Server和數據源豆由Spring創建,數據庫訪問是使用它的驅動程序,網址,用戶名,密碼。
我的第一個想法是,它們不是由於惰性初始化而創建的,而hibernate表創建意味着要真正初始化bean。我試圖將延遲初始化的屬性設置爲false,但是沒有運氣...
我必須缺少一些東西,但目前看不到它... 有沒有辦法讓一旦部署應用程序,數據庫可用於連接?
好的。這並不能解釋你看到的異常(發佈在問題中),但如果它現在可以工作,那麼我猜問題解決了:-) – 2014-11-04 15:14:56