数据源应该由Spring还是Web容器管理?

时间:2016-07-13 07:41:40

标签: spring spring-mvc

我试图在现实生活中理解应该管理数据源的企业应用程序(例如使用Spring Framework的Web应用程序)?我可以想到两种方式:

(i)在Spring配置中定义的数据源,根据需要,应用程序可以从Spring容器中获取数据源。

(ii)在web容器中定义的数据源(例如),然后应用程序可以从容器中获取数据源。

现在,我有以下问题:

Q1)在方案中(i)我相信我们可以使用Spring的DI来注入数据源,因为它是由Spring管理的。这是对的吗?

Q2)在方案(ii)中,获取数据源的唯一方法是使用JNDI查找,因为数据源是在容器中配置的,因此Spring无法做DI。是对的吗?

Q3)当数据源由Spring容器管理时,是否能够处理connection poolingglobal transaction等,如果是,如何处理?它是否在内部使用某些第三方库来实现这一切?

关于此的任何详细信息都非常感谢。

1 个答案:

答案 0 :(得分:3)

基本上:

  • Spring定义的数据源使您可以独立于容器,并且更容易部署应用程序
  • 容器定义的数据源赋予服务器管理员而不是程序员掌握数据源配置的权力和责任
    • 这可以说是一个更好的责任/角色分离
    • 它允许服务器管理员维护和更新数据源,而无需了解应用程序的详细信息
    • 它以明文解析了一个普通的"无数据库密码"要求,使容器负责保护密码,而不是你

It is possible to refer to a JNDI resource in Spring configuration,所以Spring将为您执行查找,它将可用于DI。

您可以使用第三方库(例如Apache commons-dbcp)为Spring管理的数据源建立连接池(我已经在企业项目中这样做了)。

Spring使用内置的TransactionManager支持数据库事务管理。根据{{​​3}},似乎JPA仅在数据源在容器中定义时才可用。