inf*_*ito 8 java spring hibernate jndi dialect
我正在尝试使用JNDI而不是属性文件来配置Spring + Hibernate Web应用程序.一切正常,数据库网址,密码,登录等,但我无法从JNDI上下文中获取方言.
我在我的datatabase-context.xml中使用它:
<bean id="databaseUrl" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/url"/>
</bean>
<bean id="databaseDriver" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/driver"/>
</bean>
<bean id="databaseUsername" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/username"/>
</bean>
<bean id="databasePassword" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/password"/>
</bean>
<bean id="databaseDialect" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/dialect"/>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" ref="databaseDriver"/>
<property name="url" ref="databaseUrl"/>
<property name="username" ref=databaseUsername"/>
<property name="password" ref="databasePassword"/>
<property name="maxWait" value="30000"/>
<property name="validationQuery" value="select 1"/>
<property name="maxActive" value="100"/>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan">...</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.show_sql">true</prop>
<!--<prop key="hibernate.dialect">org.hibernate.dialect.DerbyDialect</prop>-->
<!--<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>-->
</props>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
问题是我不知道如何在<prop name="hibernate.dialect">blabla</prop>属性中使用databaseDialect的JNDI值.
有任何想法吗?
Spring 可以将 a 转换Map为Properties对象,因此您可以执行以下操作:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<util:map>
<entry key="hibernate.hbm2ddl.auto" value="update" />
<entry key="hibernate.show_sql" value="true" />
<entry key="hibernate.dialect">
<jee:jndi-lookup jndi-name="java:comp/env/jdbc/dialect" />
</entry>
</util:map>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
参考:
处理从内容
String到Properties对象的转换。还处理Map转换Properties,用于Properties通过 XML“映射”条目填充对象。