我已经以两种方式查看(并完成了)数据源配置(以下代码仅用于演示):
1)在持久性单元中进行配置,例如:
<persistence-unit name="LocalDB" transaction-type="RESOURCE_LOCAL">
<class>domain.User</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
<property name="hibernate.connection.url" value="jdbc:hsqldb:hsql://localhost"/>
<property name="hibernate.hbm2ddl.auto" value="create"/>
<property name="hibernate.c3p0.min_size" value="5"/>
....
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
</properties>
</persistence-unit>
2)在spring配置文件(例如applicationContext.xml)中进行配置:
<bean id="domainEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="JiraManager"/>
<property name="dataSource" ref="domainDataSource"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="generateDdl" value="false"/>
<property name="showSql" value="false"/>
<property name="databasePlatform" value="${hibernate.dialect}"/>
</bean>
</property>
</bean>
<bean id="domainDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${db.driver}" />
<property name="jdbcUrl" value="${datasource.url}" />
<property name="user" value="${datasource.username}" />
<property name="password" value="${datasource.password}" />
<property name="initialPoolSize" value="5"/>
<property name="minPoolSize" value="5"/>
.....
</bean>
问题是:每种方式都有优点和缺点,还是只是口味问题?
如果您位于JavaEE容器中,则将产生巨大的变化。
如果您遵循第二种方法并进行了一些修改,那么除了个人喜好以外,您的生活也会更好。
在第一种情况下, 您将创建自己的连接池,
并且不会从容器中的现有连接池中受益。因此,即使您将容器配置为最多与数据库同时建立20个连接,您也不能保证此最大值,因为此新连接池不受配置的限制。此外,
您不会从容器提供的任何监视工具中受益 。
在第二种情况下, 您还将创建自己的连接池 ,但具有与上述相同的缺点。但是,您可以隔离此spring bean的定义,仅在测试运行中使用它。
最好的选择是 通过JNDI查找容器的连接池 。然后,您一定要遵守容器中的数据源配置。
<!-- datasource-test.xml -->
<bean id="domainDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${db.driver}" />
<property name="jdbcUrl" value="${datasource.url}" />
<property name="user" value="${datasource.username}" />
<property name="password" value="${datasource.password}" />
<property name="initialPoolSize" value="5"/>
<property name="minPoolSize" value="5"/>
.....
</bean>
<!-- datasource.xml -->
<jee:jndi-lookup id="domainDataSource" jndi-lookup="jndi/MyDataSource" />
根据反馈更新问题: 我有一个spring-boot应用程序,它有三个数据库:H2用于集成测试,Postgresql用于qa和Production。由于spring-boot为您创建了默认的数据源,所以我没有为集成测试定义任何内容。我想我应该使用Application.Properties来定义我的数据源连接值,但我不确定处理这个问题的最佳方法是什么。 我还没有弄清楚如何在IntelliJ中设置默认
我正在使用Spring2.x、Spring Data REST、Hibernate5.x、MySQL创建一个服务器REST应用程序。 我按照以下准则配置了多租户:https://dzone.com/articles/spring-boot-hibernate-multitenancy-implementation,唯一的区别是我使用了每个租户一个数据库。 我有一个来创建到DB的连接,还有一个来获取
问题内容: 目前,我正在使用带有@Transactional批注的DriverManagerDataSource来管理事务。但是所有事务都非常非常慢,这可能是因为数据源每次都打开和关闭与db的连接。 我应该使用什么数据源来加快交易速度? 问题答案: 实际上不是连接池,只能用于测试。您应该尝试使用Apache Commons DBCP 。就像是:
配置项说明 schemaName: # 逻辑数据源名称 dataSources: # 数据源配置,可配置多个 <data-source-name> <data-source-name>: # 与 ShardingSphere-JDBC 配置不同,无需配置数据库连接池 url: #数据库 URL 连接 username: # 数据库用户名 password: # 数据库
我不确定我是否很好地理解了Spring概要文件是如何处理yaml和属性文件的。我试图将这两种类型的配置分开(这两个文件不共享任何配置),但在从yaml配置中读取配置文件时遇到了问题。 我的问题是,当我试图(通过xml)配置我的数据源时,这样做: Spring总是使用YAML文件中的最后一个配置,忽略概要文件。我试图通过web.xml中的contex-parameter或直接将活动概要文件传递给JV
我有一个Spring启动应用程序,我想为它添加liquibase配置更改日志。 我创建了一个用于配置liquibase的LiquibaseConfig类: 我已经在属性文件中配置了数据源信息: 当我运行我的应用程序时,我收到这个错误: 现在我明白了,这意味着应用程序无法自动连接