繁体   English   中英

在spring Web应用程序中创建数据源的正确方法是什么?

[英]What is the proper way to create a datasource in a spring web application?

我有两种方法来创建数据源:

  1. 内部春天的背景

     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mkyongjava" /> <property name="username" value="root" /> <property name="password" value="password" /> 

  2. Tomcat JNDI

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/UsersDB"/>

使用spring或使用tomcat jndi创建数据源有什么好处和问题?

第一种方法,使用类DriverManagerDataSource,对j2ee容器之外的测试或独立环境很有用。

第二种方法是使用jndi数据源,建议在j2ee容器中使用。

以下参考文献明确说明了这些方法。

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jdbc/datasource/DriverManagerDataSource.html

没有什么比这更好的做法了。 好的是有利于用例的那个。 他们都有利弊。

如果您有使用案例,您试图在多个应用程序共享公共数据源的服务器环境中部署应用程序,或者数据源组件由服务器管理部门管理,那么最好的使用方法可能是通过JNDI上下文。 服务器已准备好DataSource,以便应用程序可以直接获取该对象,绑定到自身并使用数据源。

如果您有一个用例,其中应用程序在嵌入式服务器容器或云容器中运行,其中服务器也嵌入在构建包中,在应用程序中创建数据源并使用它们将是一个很好的解决方案。 此外,在非Web应用程序环境中,创建数据源也会很好。

总而言之,应用程序非管理数据源的用例更适合JNDI上下文。

尝试弄清楚应用程序的部署模型是什么,并找出对您有用的内容。 还尝试使用datasourcepool实现来提高性能,如DBCP,C3P0或Hikarcp。

我正在使用它如下。 因为项目是在架构设计时配置的,所以对我有用。 它生活在生产中。

<!-- Local Apache Commons DBCP DataSource that refers to a combined database -->
    <!-- (see dataAccessContext-jta.xml for an alternative) -->
    <!-- The placeholders are resolved from jdbc.properties through -->
    <!-- the PropertyPlaceholderConfigurer in applicationContext.xml -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="validationQuery" value="${jdbc.validationquery}"/>
        <property name="testOnBorrow" value="${jdbc.testonborrow}"/>
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>


    <!-- Transaction manager for a single JDBC DataSource -->
    <!-- (see dataAccessContext-jta.xml for an alternative) -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

你也可以参考这个。 Genious对Java开发人员的最佳贡献。

https://www.mkyong.com/spring-boot/spring-boot-jdbc-oracle-database-commons-dbcp2-example/

最佳做法是不要在您编写的任何代码中公开数据库配置。 最好在服务器控制台内部进行配置,并将其作为jndi公开。 在spring配置文件中,获取数据库实例:

<jee:jndi-lookup id="dataSource" jndi-name="jdbc"/>

并将数据库事务管理器配置为:

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>

这里的关键注意事项是不公开数据库配置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM