【问题标题】:Where to define the Datasource for a web application?在哪里定义 Web 应用程序的数据源?
【发布时间】:2016-06-15 08:31:23
【问题描述】:

我正在开发一个基于 Spring MVC 框架的 Web 应用程序。在这个应用程序中,我需要将一些数据持久化到 DB。

我也打算使用 Spring data JPA。现在配置数据源的最佳位置在哪里?我打算在 Apache Tomcat 中部署它。

我猜我们有两个地方:

1) 在spring配置文件中定义,如下:

<bean id="dataSource"  class="org.springframework.jdbc.datasource.DriverManagerDataSource">
      <property name="driverClassName" value="org.h2.Driver"/>
      <property name="url" value="jdbc:h2:tcp://localhost:9092/~/test"/>
      <property name="username" value="sa"/>
      <property name="password" value=""/>
 </bean>

2) 在Tomcat中定义。

我的理解正确吗? #1和#2中的方法有什么区别吗?

如果我们使用#2,Spring 能否在应用程序需要时对数据源进行依赖注入? 或者我们可以在这种情况下通过 JNDI 查找引用数据源吗?

我正在自己学习这一点,以了解现实生活中的应用程序是如何工作的;所以任何更深入的见解都会有很大帮助。

【问题讨论】:

    标签: spring-mvc tomcat datasource spring-data-jpa jndi


    【解决方案1】:

    我个人在将数据源设置为 JNDI 和在配置中定义它之间来回切换。

    我得出的结论是,我更喜欢在配置中定义数据源,原因如下:

    • 使用 JNDI 我需要将 mysql-connector jar 添加到 tomcat 库中。而且我不喜欢为了迎合特定应用而改变运行环境。
    • 在web应用中做配置,我可以用注解来配置,没有XML
    • 我认为正确的说法是应用程序需要知道如何连接到数据库,不一定是容器

    【讨论】:

    • 感谢您的回复。所以就是在spring配置文件中定义datasouce,然后进行DI。如果是这种情况,这种方法是否足够稳定以处理多个请求、连接池、事务......?容器不是用来处理所有这些服务的吗?我在这里有点困惑,如果您可以分享任何其他细节以帮助澄清疑问,将会有很大帮助。
    • @CuriousMind 如果您不使用 DriverManagerDataSource,而是使用连接池数据源,那么可以。例如,请参阅stackoverflow.com/questions/23172643/…。如果您使用提供 Spring 必须使用的 JTA 事务管理器的容器,那么您所说的将是正确的。但是Tomcat没有。它提供的只是一个连接池。你可以在 webapp 中嵌入一个连接池。
    • @JBNizet:感谢您的 cmets。我试图了解事物在现实世界的应用程序中是如何工作的。这一点我还不是很清楚。数据源如何稳定,处理多个事务(本地/全局)。如果您能详细说明一下,那将有很大帮助。我也在网上搜索,但是如果我得到一些正确的指导,它将节省很多时间(而且我已经失去了很多时间......)。感谢您的宝贵时间。
    猜你喜欢
    • 1970-01-01
    • 2011-03-10
    • 2015-06-07
    • 2018-10-14
    • 2016-11-21
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多