gpt4 book ai didi

mysql - 如何在单独的文件中使用 DB 设置连接多个数据库(hsqldb、mysql)

转载 作者:可可西里 更新时间:2023-11-01 08:20:16 25 4
gpt4 key购买 nike

基本上我想决定运行 2 个数据库项目中的哪个。

我有以下hibernateContext.xml

  <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:database.properties</value>
</list>
</property>
</bean>


<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.user}" />
<property name="password" value="${jdbc.password}" />
</bean>


<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="com.blog.przem.entity" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>

</property>
</bean>

database.properties文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/pbdb
jdbc.user=root
jdbc.password=

我想要实现的是将 HSQLDB 添加到我的项目中(用于开发、测试),但对于生产,我希望拥有 MySQL DB。我已经看到了一些解决方案:

我想知道什么是最好的方法,但我想将数据库设置保存在单独的文件中。

  1. 我应该创建 database.properties2 文件(带有 HSQL 属性)并添加 propertyConfigurer2 吗?以及如何让 dataSource bean 知道要使用哪个 propertyConfigurer(我觉得我错过了什么)?
  2. 也许应该由 maven 完成?
  3. 解决此类问题的专业方法是什么(假设项目最终将使用 MySQL)- 应用程序应始终使用 MySQL,而 HSQLDB 应仅用于运行测试类?

最佳答案

@Ralph 的回答很好,正如我所知,它是大型项目的好解决方案,我得到了另一种解决方案来解决我的问题,因此可以为项目和测试文件设置许多数据库,而无需创建额外的 applicationContext-db .xml(但是我不知道为测试使用单独的配置 xml 是否比下面介绍的方法更好)

slighty 的代码改变了我的 hibernateContext.xml

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.user}" />
<property name="password" value="${jdbc.password}" />
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="com.blog.przem.entity" />

<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${jdbc.hibernate.dialect}</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.cache.use_second_level_cache">false</prop>
<prop key="hibernate.cache.use_query_cache">false</prop>
<prop key="hibernate.hbm2ddl.auto">create-drop</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.connection.autocommit">false</prop>
<prop key="hibernate.transaction.flush_before_completion">true</prop>
</props>

</property>
</bean>

<tx:annotation-driven transaction-manager="transactionManager"/>

<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
  1. PropertyPlaceholderConfigurer 被提取(删除了 id="propertyConfigurer")到新文件 proptiesContext.xml(当然是添加到hibernateContext.xml)

    <beans profile="default">
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
    <list>
    <value>classpath:msql_database.properties</value>
    </list>
    </property>
    </bean>
    </beans>

    <beans profile="testing">
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
    <list>
    <value>classpath:hsql_database.properties</value>
    </list>
    </property>
    </bean>
    </beans>

  2. 然后我修改并添加了两个数据库的配置文件:

msql_database.propertie

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/pbdb
jdbc.user=root
jdbc.password=
jdbc.hibernate.dialect=org.hibernate.dialect.MySQLDialect

hsql_database.propertie

jdbc.driver=org.hsqldb.jdbcDriver
jdbc.url=jdbc:hsqldb:mem;shutdown=true
jdbc.user=sa
jdbc.password=
jdbc.hibernate.dialect=org.hibernate.dialect.HSQLDialect

现在,如果我运行(在我的例子中是 Tomcat)服务器,它使用 “默认” - 没什么特别的 - 使用 MYSQL 数据库但是如果我用参数运行服务器

-Dspring.profiles.active="testing"

它使用给定的配置文件,所以我的项目使用 HSQLDB HOORAY

此外,当我在测试类中添加特定配置文件时(就在类名声明之前):

 @ActiveProfiles("default")
public class UserServiceTest {

指定数据库用于测试

关于mysql - 如何在单独的文件中使用 DB 设置连接多个数据库(hsqldb、mysql),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15996923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com