簡體   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